ancestor::
Гродненец
Репутация: +13/-0
Offline
Пол:
Сообщений: 127
Не знаешь как правильно – делай, как знаешь…
|
и в общем сколько я не пускал eclipse что то плакать ну никак не хотелось может это от того что я им под виндой пользуюсь ? Ой-ой-ой сидел под этим жахом полгода - да ну его нах с его тормозами и отжыранием под полГига памяти которая ничего не целесообразно юзаеться. Единственный плюс - мощный дебаггер. Я при всей своей любови да Джавы всё таки посыпаю голову пеплом - жава-ГУИ весч достаточно тормознутая ( пока ) - Не люблю я кошек. - Ты просто не умеешь их готовить 8-)
|
|
|
Записан
|
"I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing...Only I will remain" F.H., D
|
|
|
maxposedon
|
Вот, кстати, кусок моего кода mmx'ового:
movd mm2, [ebp + ecx] movd mm3, [esi + ecx] PUNPCKLBW mm2, mm4 PUNPCKLBW mm3, mm4 psubw mm2, mm3
pmullw mm2, mm1
movq mm3, mm0 psubw mm3, mm2 PACKUSWB mm3, mm3
Делает аналогичный сишный раз в 20-30. Называется этот чудо-алгоритм DSA - цифровая субтракционная ангиография.
что-то ваш код батенька устарел) mmx-у уже лет 6-ть и толку с ваших знаний? Нынче рулят sse2 3dnowext и 64bit инструкции... спрашивается и толку с ваших знаний?
|
|
|
Записан
|
|
|
|
spammer
|
А в почему такой ажиотаж, что оптимизированный асмовый код делает дефолтный сишный? Это подразумевается. Потому все критичные по скорости библиотечные сишные функции (обработка строк, работа с памятью, и т.п.) и написаны на асме.
|
|
« Последнее редактирование: 06 Апрель 2006, 19:47:08 от spammer »
|
Записан
|
|
|
|
iced
Гость
|
Потому все критичные по скорости библиотечные сишные функции (обработка строк, работа с памятью, и т.п.) и написаны на асме. на си они писаны, на си. на 99.99999%
|
|
|
Записан
|
|
|
|
iced
Гость
|
ну вот например кусок из маллока (глибц-2.3.5). код страшный, но 100% сишный. потому что писать подобные вещи на ассемблере - безумие. #define MALLOC_ZERO(charp, nbytes) \ do { \ INTERNAL_SIZE_T* mzp = (INTERNAL_SIZE_T*)(charp); \ unsigned long mctmp = (nbytes)/sizeof(INTERNAL_SIZE_T); \ long mcn; \ if (mctmp < 8) mcn = 0; else { mcn = (mctmp-1)/8; mctmp %= 8; } \ switch (mctmp) { \ case 0: for(;;) { *mzp++ = 0; \ case 7: *mzp++ = 0; \ case 6: *mzp++ = 0; \ case 5: *mzp++ = 0; \ case 4: *mzp++ = 0; \ case 3: *mzp++ = 0; \ case 2: *mzp++ = 0; \ case 1: *mzp++ = 0; if(mcn <= 0) break; mcn--; } \ } \ } while(0)
#define MALLOC_COPY(dest,src,nbytes) \ do { \ INTERNAL_SIZE_T* mcsrc = (INTERNAL_SIZE_T*) src; \ INTERNAL_SIZE_T* mcdst = (INTERNAL_SIZE_T*) dest; \ unsigned long mctmp = (nbytes)/sizeof(INTERNAL_SIZE_T); \ long mcn; \ if (mctmp < 8) mcn = 0; else { mcn = (mctmp-1)/8; mctmp %= 8; } \ switch (mctmp) { \ case 0: for(;;) { *mcdst++ = *mcsrc++; \ case 7: *mcdst++ = *mcsrc++; \ case 6: *mcdst++ = *mcsrc++; \ case 5: *mcdst++ = *mcsrc++; \ case 4: *mcdst++ = *mcsrc++; \ case 3: *mcdst++ = *mcsrc++; \ case 2: *mcdst++ = *mcsrc++; \ case 1: *mcdst++ = *mcsrc++; if(mcn <= 0) break; mcn--; } \ } \ } while(0)
а критичный strdup например `тупо` реализован простыми вызовами strlen, malloc, memcpy: char * __strdup (const char *s) { size_t len = strlen (s) + 1; void *new = malloc (len);
if (new == NULL) return NULL;
return (char *) memcpy (new, s, len); } #ifdef libc_hidden_def libc_hidden_def (__strdup) #endif #ifdef weak_alias weak_alias (__strdup, strdup) #endif
итд итп.
|
|
|
Записан
|
|
|
|
spammer
|
Как-нибудь повтыкай папочку С:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\intel\ или как там она у тебя назывется там лежит хороший ОПТИМИЗИРОВАННЫЙ код
а стандартный код конечно не будут писать на асме, кому надо себе лишнюю работу придумывать?
ps писать такие вещи на асме - далеко не безумие, а прикрытие узких мест производительности кода
|
|
« Последнее редактирование: 07 Апрель 2006, 01:43:35 от spammer »
|
Записан
|
|
|
|
iced
Гость
|
Как-нибудь повтыкай папочку С:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\intel\ 1. нету у меня такой. 2. этим убогим надо только x86 поддерживать - а что делать с зоопарком из пары десятков архитектур? 3. теперь я тем более не доверяю мелкософту - коре части писать на ассемблере НЕЛЬЗЯ! они немайнтабельны и нетестируемы.
|
|
|
Записан
|
|
|
|
spammer
|
1. http://zergirl.at.Тут/strlen.asm2. а) в чем проблема написать оптимизированный код для другой архитектуры. б) если даже он не написан, то возьмется дефолтный сишный код. 3. смысл до меня не дошел. по-твоему коре должны работать НЕ оптимально?
|
|
|
Записан
|
|
|
|
iced
Гость
|
1. жуть 2. посчитаем архитектуры? одних x86 пара десятков комбинаций наберётся (с различными вариациями mmx, sse, ...). кто писать будет? 3. коре должно работать в первую очередь СТАБИЛЬНО. повторяю. СТАБИЛЬНО.
PS. сделал тут тестовую прожку (туча дёрганий различных функов которые работают с памятью). скомпилял под лялих (gcc-4.1.0 -march=athlon-xp) и попросил знакомого вентузятника скомпилять под венту (msvc2003). линукосвая (писанная на медленном си) на 15% быстрее. сюююрприиииз.
|
|
|
Записан
|
|
|
|
Archi
|
1. http://zergirl.at.Тут/strlen.asm2. а) в чем проблема написать оптимизированный код для другой архитектуры. б) если даже он не написан, то возьмется дефолтный сишный код. 3. смысл до меня не дошел. по-твоему коре должны работать НЕ оптимально? По моим скромным наблюдениям все фанатичные линуксоиды любят пощеголять словом "портабельность".
|
|
|
Записан
|
У меня дикая аллергия на тупость. Я сразу покрываюсь сарказмом.
|
|
|
iced
Гость
|
ээ - имеются в виду реализации данных фунок. вот.
|
|
|
Записан
|
|
|
|
iced
Гость
|
По моим скромным наблюдениям все фанатичные линуксоиды любят пощеголять словом "портабельность". это суровая необходимость в этом жестоком мире. не все же пишут `базы данных на аксессе` (ц) и чистилки реестра. бывают и другие задачи.
|
|
|
Записан
|
|
|
|
VooDoo
|
|
|
|
Записан
|
Are you human? - My body is. Do you feel pain? - My body does. ..- --- --- -.. --- ---
|
|
|
spammer
|
2. а) в чем проблема написать оптимизированный код для другой архитектуры. б) если даже он не написан, то возьмется дефолтный сишный код.
|
|
|
Записан
|
|
|
|
iced
Гость
|
твааааю маааать. ещё раз. для совсем больных. ты прогу написал. под x86 и амд64 (такая портабельность и вентузятникам нужна. бееедные). в силу того что ты не знаешь (и не будешь знать) амд64 ассемблер, ты написал функу сохранения/загрузки для амд64 на си и для x86 на ассемблере (и тебя почему то не выгнали с работы после этого). ок. в х86 коде ты допустил ашипку. маааленькую. и стало оно у тя работать немного отлично от амд64 варианта. твой кастомер вначале попользовав прогу на x86 (ту, с багом) пересел на амд64. и тут жуякс - при попытке загрузки файла оно стало вылетать. поседееешь фиксить. ну ладно - через 2 года упорной отладки ты багу отловил и кастомер доволен. теперь ему нужно поменять что нить мелкое в данной функе. но срочно. вчера как обычно. и ты обмотав язык вокруг шеи делаешь работу пять раз (один раз на си, один раз на ассемблере - по временным затратам как минимум на 4 сишных выйдет). после этого ты успешно вылетел с работы (или разорился, хотя непонятно как с таким подходом к написанию софта ты умудрилсч открыть конторку свою) и всем хорошо (кроме тебя и кастомера, у которого не работает). ну вот. вполне реальная задачка. и ещё раз насчёт быстрее. цитирую умного человека (себя): PS. сделал тут тестовую прожку (туча дёрганий различных функов которые работают с памятью). скомпилял под лялих (gcc-4.1.0 -march=athlon-xp) и попросил знакомого вентузятника скомпилять под венту (msvc2003). линукосвая (писанная на медленном си) на 15% быстрее. сюююрприиииз.
|
|
|
Записан
|
|
|
|
spammer
|
Что я могу сказать... Всестороннее тестирование спасет мир. Прога, написанная с багом = ненаписанная прога. Каким это образом можно допустить скрытую ошибку в, например, модуле подсчета длины строки? Такие баги пробегают только в крупном проекте, но их никто не пишет на асме.
ps Подскажи своему другу как включить Intel Compiler
|
|
|
Записан
|
|
|
|
iced
Гость
|
1. ассемблерный код для пачки платформ тестируемый? ха ха ха. 2. причём тут интел компайлер - я тестил не компилеры а скорость либц.
|
|
|
Записан
|
|
|
|
spammer
|
1. забыл слово "лопата" 2. не думал, что дефолтный компайлер vs2k3 и gcc могут немножко различаться?
|
|
« Последнее редактирование: 07 Апрель 2006, 22:31:07 от spammer »
|
Записан
|
|
|
|
iced
Гость
|
твоюмать. КАКАЯ разница что там нагенерил компилер. там тупые вызовы различных malloc(), free(), strlen(), strdup(), strcpy(), strcat(), ... тестируется не компилёр а реализация данных фунок в либц. я проверил что ни гцц ни цл не соптимизировали вызовы в пустые. результат - быстрая ассемблерная реализация либц от мелкософт отсосала у медленной сишной. непорядок, ага.
в 10тый раз объяснять не буду.
|
|
|
Записан
|
|
|
|
spammer
|
Попрошу циферки. Что-нибудь вроде: тестируемый исходник, программа тайминга, линк на используемые компилеры/либы, настройки этих компилеров.
|
|
« Последнее редактирование: 08 Апрель 2006, 00:45:24 от spammer »
|
Записан
|
|
|
|
iced
Гость
|
цифирьки - ~20% лялиховый глибц быстрее. тайминг - вывод time() перед стартом и после окончания. вентовый бинарник был откомпилен clем (msvs 2003) с дефолтовыми опциями. лялиховый бинарник был откомпилен gcc 4.1 с дефолтовыми опциями. (и ещё раз - какая разница чем и как откомпилена пачка вызова фунок) оба бинарника были проверены - код не был соптимизирован в nop. вентовый либц - это наверное тот быстрый на ассемблере (xpsp2). лялиховый глибц 2.4 собранный с моими дефолтовыми ключиками (-O2 -march=athlon-xp). возражения типа `а чего это ты под атлон собираешь то` не принимаются - как хочу так и собираю (и вообще это преимущество сей). фил фри пересобрать вентовый чем угодно и с какими угодно ключами. код на работе - дам позже.
PS. потом на амд64 протестим ;]
|
|
|
Записан
|
|
|
|
spammer
|
По дефолту берется дефолтный либц - т.е. сишный. Асмовый включается Intel Compiler'ом.
|
|
|
Записан
|
|
|
|
iced
Гость
|
не понял? а какая разница какой там компилер то?! он же на ассемблере?
|
|
|
Записан
|
|
|
|
iced
Гость
|
стоп стоп. то есть в системе работает либц писанный на сях. но если тебе делать нехер можешь собрать и поставить себе `быстрый` ассемблерный? а как же крики что в венте вот либц быстрый на ассемблере?
кто-то из нас бредит.
|
|
|
Записан
|
|
|
|
spammer
|
не понял? а какая разница какой там компилер то?! он же на ассемблере? В данном конкретном случае разница в том, какие по дефолту берутся либы - либо общие, либо оптимизированные. стоп стоп. то есть в системе работает либц писанный на сях. но если тебе делать нех#р можешь собрать и поставить себе `быстрый` ассемблерный? а как же крики что в венте вот либц быстрый на ассемблере? 1) да; 2) какие крики? имхо имеет место простое недопонимание друг друга.
|
|
|
Записан
|
|
|
|
iced
Гость
|
В данном конкретном случае разница в том, какие по дефолту берутся либы - либо общие, либо оптимизированные. погуглил. гугель ничего не знает о `быстрых` вентовых либцах. есть тока одни - те которые в комплекте. они отсасывают у медленных линуксовых писанных на си. точка.
|
|
|
Записан
|
|
|
|
spammer
|
Гугль много чего не знает. Поэмэсдээнь =)
|
|
« Последнее редактирование: 09 Апрель 2006, 01:46:23 от spammer »
|
Записан
|
|
|
|
iced
Гость
|
http://msdn.microsoft.com тоже смотрел. не нашёл. какие то таинственные быстрые либцы. рвут всех. встречаются только в секретных лабораториях мелкософт и у тов. спаммера.
|
|
|
Записан
|
|
|
|
|
maxposedon
|
ПОД ЧТО ОПТИИЗИРОВАНЫЕ? Зашибись а если у меня amd? из всех x86 архитектур ты предлагаеш к Intel? что за бредни... что по вашему libc каждый год на asm-е переписывают? а не пойму вы что ДЕЙСВИТЕЛЬНО верите что libc переписывают? 1. под sse 2. под sse2 3. под sse3 ... под прочие mmx, mmx2 вон в том (aсмовсокм libc твоем) есть суппорт sse/sse2? или просто mmx, mmx2, 3dnow, etc? там что по твоему asm-овский код для минимум 6 архитектур? итак повторю вопрос? ТАКИ ПОД ЧТО?
|
|
|
Записан
|
|
|
|
|