Здравствуйте Gosha, Вы писали:
G>Я бы рад, но в АСМе (почти) нечего не смыслю . Хотя, наверное, придется потом и туда долезть . Но насколько я понял оптимизировать работу с целыми это не тоже самое, что работать с плавающей запятой.
ну, можно переписать под 3dNow || SSE — если числа не превышают 2^16 макс., то можно за один проход сразу с 4 работать, если превышают, то с 2. Но это лучше почитать доку по MMX & SSE
G>Поэтому и спросил нужно ли менять. Типа: сначала на целых выиграть, а потом еще и на асм перевести.
Чуть выше ответ G>Или Вы имели ввиду под оптимизацией игры с компилятором?
Intel'овский компилятор полезен для мат. расчётов, т.к. генерит очень хороший код — при отсутствие большого опыта писания под асм сложно сделать лучше, так что попробуйте
G>По поводу Intel C++ Compiler (5.0 ?). Действительно вещь хорошая?
Великолепная по многим причинам, только вот компилит медленно G>Я тут зашел на их сайт, там вроде написано, что работа с ним ведется через IDE от VC 6.0. Интересно, тогда зачем такая инсталляция толстая?
25 метров — компилер для Itanium, 12 — их дебагер. сам компилер ~ 13 после установки G>Хотел trial скачать, а он на 42М Или с ним еще и своя оболочка идет?
нет её G>Правильно ли я понял, что можно попеременно компилить то им, то MS-овским?
да, есть утилита для выбора компилятора — переключение мгновенное G>Много ли проблем со сборкой проектов (совместимось)? Как-то пробовал lcc, так тот в упор не признавал VC-шные ресурсы...
проблем нет — ещё не одной не видет. только вот коды ошибоки предупреждений — другие. и поддержка C99 полная — наличие 64 битных целочисленных переменных и пр.
В общем, всё лучшее познаётся в сравнение
У меня есть одна задачка, в которой приходится иметь дело с большим количество массивов float-ов (к тому же не слабых по размерам). Данные в этих массивах перемножаются, деляться, ... большое количесто раз. Все это считается очень долго (от 20мин. и более на P3 700). Вообщем все большое Вот и задумался я, а не быстрее ли будет перевести все это в целые числа ? Операции с целыми идут ведь быстрее. Чтобы оценить примерный рост производительности написал код, приведенный ниже. Полученный мною результат составил ~2.3 раза (int быстрее). Однако эта цифра сильно плавала в зависимости от типа оптимизации компилятора, причем не в пользу int-а. Собственно вопрос(ы): кто-нибудь исследовал этот вопрос, может прояснить ситуацию, стоит ли менять float на int и на какие цифры (прирост производительности) можно расчитывать? Может сам код не годится для такого исследования, и если так, то как его исправить? С компилятором может какие-нибудь хитрости есть?
#include"stdafx.h"#include <windows.h>
#define HEIGHT 500
#define WIDTH 500
#define TIMES 3000
int main(int argc, char* argv[])
{
int i,x,y;
DWORD fbegin,fend,ibegin,iend;
printf("Float or int... Who's faster?\n");
printf("Creating float 2d array\n");
float * pfloat=new float [HEIGHT*WIDTH];
float ** ppfloat=new float* [HEIGHT];
for (i=0;i<HEIGHT;i++)
ppfloat[i]=pfloat+i*WIDTH;
printf("Counting float ...\n");
fbegin=GetTickCount();
for (i=0;i<TIMES;i++)
for(y=0;y<HEIGHT;y++)
for(x=0;x<WIDTH;x++)
ppfloat[y][x]=1.0f*x*y;
fend=GetTickCount();
printf("Float finished. Ticks = %d\n",int(fend-fbegin));
delete [] ppfloat;
delete [] pfloat;
printf("##################################\n");
printf("Creating int 2d array\n");
int * pint=new int [HEIGHT*WIDTH];
int ** ppint=new int* [HEIGHT];
for (i=0;i<HEIGHT;i++)
ppint[i]=pint+i*WIDTH;
printf("Counting int ...\n");
ibegin=GetTickCount();
for (i=0;i<TIMES;i++)
for(y=0;y<HEIGHT;y++)
for(x=0;x<WIDTH;x++)
ppint[y][x]=100000*x*y;
//100000 - точность, нужная от float (5 знаков после запятой)
iend=GetTickCount();
printf("Int finished. Ticks = %d\n",int(iend-ibegin));
delete [] ppint;
delete [] pint;
printf("##################################\n");
printf("(float ticks)/(int ticks) = %.3f\n",
(float)(fend-fbegin)/(float)(iend-ibegin));
return 0;
}
Здравствуйте VuDZ, Вы писали:
VDZ>Здравствуйте Gosha, Вы писали:
G>>Привет Всем!!!
VDZ>Для эитх целей был придуман intel C++ Compiler VDZ>MS cl /Og /Os /G6 = 1.212 (float = 12888) VDZ>icl /Og /Os /G7 /QaxiMKW /QIfist /Qprec /Qprec_div 1.657 (float ~ 10500)
VDZ>Athlon 1000/133
VDZ>так что при использование icl скорость выростает значительно...
VDZ>ЗЫ а может этот код оптимизировать под MMX, SSE, 3DNow! ?
Я бы рад, но в АСМе (почти) нечего не смыслю . Хотя, наверное, придется потом и туда долезть . Но насколько я понял оптимизировать работу с целыми это не тоже самое, что работать с плавающей запятой. Поэтому и спросил нужно ли менять. Типа: сначала на целых выиграть, а потом еще и на асм перевести. Или Вы имели ввиду под оптимизацией игры с компилятором?
По поводу Intel C++ Compiler (5.0 ?). Действительно вещь хорошая? Я тут зашел на их сайт, там вроде написано, что работа с ним ведется через IDE от VC 6.0. Интересно, тогда зачем такая инсталляция толстая? Хотел trial скачать, а он на 42М Или с ним еще и своя оболочка идет? Правильно ли я понял, что можно попеременно компилить то им, то MS-овским? Много ли проблем со сборкой проектов (совместимось)? Как-то пробовал lcc, так тот в упор не признавал VC-шные ресурсы...
Здравствуйте Gosha, Вы писали:
G>Здравствуйте VuDZ, Вы писали:
VDZ>>Здравствуйте Gosha, Вы писали:
G>>>Привет Всем!!!
VDZ>>Для эитх целей был придуман intel C++ Compiler VDZ>>MS cl /Og /Os /G6 = 1.212 (float = 12888) VDZ>>icl /Og /Os /G7 /QaxiMKW /QIfist /Qprec /Qprec_div 1.657 (float ~ 10500)
VDZ>>Athlon 1000/133
VDZ>>так что при использование icl скорость выростает значительно...
VDZ>>ЗЫ а может этот код оптимизировать под MMX, SSE, 3DNow! ? G>Я бы рад, но в АСМе (почти) нечего не смыслю . Хотя, наверное, придется потом и туда долезть . Но насколько я понял оптимизировать работу с целыми это не тоже самое, что работать с плавающей запятой. Поэтому и спросил нужно ли менять. Типа: сначала на целых выиграть, а потом еще и на асм перевести. Или Вы имели ввиду под оптимизацией игры с компилятором? G>По поводу Intel C++ Compiler (5.0 ?). Действительно вещь хорошая? Я тут зашел на их сайт, там вроде написано, что работа с ним ведется через IDE от VC 6.0. Интересно, тогда зачем такая инсталляция толстая? Хотел trial скачать, а он на 42М Или с ним еще и своя оболочка идет? Правильно ли я понял, что можно попеременно компилить то им, то MS-овским? Много ли проблем со сборкой проектов (совместимось)? Как-то пробовал lcc, так тот в упор не признавал VC-шные ресурсы...
Вещь хорошая но медленная, но полезно им иногда собирать т.к. в нем есть такие предупреждения каких нет в M$!
Здравствуйте VuDZ, Вы писали:
G>>По поводу Intel C++ Compiler (5.0 ?). Действительно вещь хорошая? VDZ>Великолепная по многим причинам, только вот компилит медленно
Ага. Точно великолепная!
Я тоже перекомпилил свою програмулину под icl
и сразу получил выигрыш в скорости на 20% !!
Заплатить пришлось размером ехешника (он стал процентов на 25 больше)
и медленной компиляцией (очень, в разы).
Непонятные ворнинги — это пустяки.
Размер — это не страшно совсем.
А скорость — так верь сборка релиз-версии не терпит суеты...
Так что думаю, что если это вся плата(?), то игра стоит свеч.
Только, вот вопрос... а это действительно вся плата?
Здравствуйте Gosha, Вы писали:
G>Привет Всем!!!
G>У меня есть одна задачка, в которой приходится иметь дело с большим количество массивов float-ов (к тому же не слабых по размерам). Данные в этих массивах перемножаются, деляться, ... большое количесто раз. Все это считается очень долго (от 20мин. и более на P3 700). Вообщем все большое Вот и задумался я, а не быстрее ли будет перевести все это в целые числа ? Операции с целыми идут ведь быстрее. Чтобы оценить примерный рост производительности написал код, приведенный ниже. Полученный мною результат составил ~2.3 раза (int быстрее). Однако эта цифра сильно плавала в зависимости от типа оптимизации компилятора, причем не в пользу int-а. Собственно вопрос(ы): кто-нибудь исследовал этот вопрос, может прояснить ситуацию, стоит ли менять float на int и на какие цифры (прирост производительности) можно расчитывать? Может сам код не годится для такого исследования, и если так, то как его исправить? С компилятором может какие-нибудь хитрости есть?
Я понятия не имею как все обстоит на самом деле но я бы сделал такое предположение... Тормоза начинаются когда используется мат. процессор... А если число целое и допустим влезает в разрядность регистра... то ее уже можно считать на проце без мата Вот вроде и все... а правильно это или нету... не могу сказать точно этотолько лишь предположение
Здравствуйте Рек, Вы писали:
Рек>Здравствуйте VuDZ, Вы писали:
G>>>По поводу Intel C++ Compiler (5.0 ?). Действительно вещь хорошая? VDZ>>Великолепная по многим причинам, только вот компилит медленно
Рек>Ага. Точно великолепная! Рек>Я тоже перекомпилил свою програмулину под icl Рек>и сразу получил выигрыш в скорости на 20% !!
Рек>Заплатить пришлось размером ехешника (он стал процентов на 25 больше) Рек>и медленной компиляцией (очень, в разы).
Рек>Непонятные ворнинги — это пустяки.
Они более информативны Рек>Размер — это не страшно совсем.
Больший размер из-за большего размера ассемблерного кода Рек>А скорость — так верь сборка релиз-версии не терпит суеты...
Рек>Так что думаю, что если это вся плата(?), то игра стоит свеч.
есть 2 трудности:
1. более строгое следование стандарту — м.б. проблема с "кривыми исходниками"
2. сложно по нормальному вставить 3dNow!
Рек>Только, вот вопрос... а это действительно вся плата?
Вроде вся... А можешь доплатить больше?
RA/ET>Я понятия не имею как все обстоит на самом деле но я бы сделал такое предположение... Тормоза начинаются когда используется мат. процессор
Ну, это было истинной в эпоху х87, когда сопроцессор был маленьким и слабеньким >... А если число целое и допустим влезает в разрядность регистра... то ее уже можно считать на проце без мата
да, вот только регистров мало >: >Вот вроде и все... а правильно это или нету... не могу сказать точно этотолько лишь предположение
в общем — SSE или 3DNow! были для этого и придуманы...
Здравствуйте VuDZ, Вы писали:
VDZ>Здравствуйте Рек, Вы писали:
Рек>>Здравствуйте VuDZ, Вы писали:
G>>>>По поводу Intel C++ Compiler (5.0 ?). Действительно вещь хорошая? VDZ>>>Великолепная по многим причинам, только вот компилит медленно
Рек>>Ага. Точно великолепная! Рек>>Я тоже перекомпилил свою програмулину под icl
Рек>>Непонятные ворнинги — это пустяки. VDZ>Они более информативны
Да. Согласен.
Повозившись несколько дней и разобрав все ворнинги,
признаю — компилятор ворчит справедливо.
Это ворнинги помогли мне отловить несколько явных своих глупостей.