|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 29, 2004 11:20:25 Кто-нибудь пробывал оптимизировать MemMove? Реально ли достичь максимума оптимизации и во сколько раз!!!! |
|
|
Дата: Янв 29, 2004 11:35:54 критерий оптимизации? скорость, размер? |
|
|
Дата: Янв 29, 2004 12:20:12 ПО СКОРОСТИ!!! |
|
|
Дата: Янв 29, 2004 12:30:56 Хм.. только что с подобного топика.. копирование памяти :) |
|
|
Дата: Янв 30, 2004 04:31:05 Этот вопрос сразу упирается в конкретный процессор. Если нужно под любой, то использовать "movsd" или "mov eax,[esi]" и т.п. Если есть MMX или SSE, то можно ими делать, что особенно важно при больших перекачках байтов. Раз стоит вопрос об оптимизации, то, видимо, много данных надо тащить и часто. Если перекинуть надо до килобайта, то лучше использовать стандартные методы. Особой разницы не заметишь. |
|
|
Дата: Фев 2, 2004 14:38:07 · Поправил: S_T_A_S_ |
|
|
Дата: Мар 6, 2004 17:14:52 S_T_A_S_ Так это ведь для AMD!! Я работаю с Intel. А как известно все рпаивла касающиеся AMD не подходят для Intel. |
|
|
Дата: Мар 11, 2004 05:34:24 emergenter Ах да, у них даже наборы команд отличаются %-))))) Следуйте совету интел: "use intel C compiler". А на остальные советы забейте. И результаты работы того теста на вашем же компьютере - тоже сущая чушь. Извините, что отнял ваше время. |
|
|
Дата: Май 22, 2004 05:50:02 MMX и SSE - это как мертову припарка ;) а оптимизировать MemMove и memcpy можно, причем очень даже значительно. подробности в "Технике оптимизации программ". |
|
|
Дата: Май 22, 2004 22:14:25 · Поправил: S_T_A_S_ [ kaspersky : MMX и SSE - это как мертову припарка ;) ] Неужели? Я делал простейший тест (линк выше), который показывает, что это вполне конкретные цифры. Хотя (относительно моего теста) не уместно говорить об использовании MMX/SSE, т.к. само по себе использование дополнительных команд ничего не даёт, используются лишь дополнитеольные регистры. Обычных просто не хватает. ЗЫ Интересно, чем отличаются MemMove от memcpy.. |
|
|
Дата: Май 22, 2004 23:08:24 memcpy не гарантирует корректность копирования перекрывающихся блоков, а memmove - таки да. а для оптимизации необходимо: использовать естественный параллелизм чипсета и памяти (давать упреждающие запросы с шагом пакетного цикла обмена или на PIII юзать предвыборку); использовать чередование банков кэша, что позволяет обрабатывать две пары ячеек в единицу времени; выровнять адреса, если это только возможно; копировать либо только впреред, либо блоками по несколько кил, двигаясь назад; спланировать запросы с учетом иерархии очередей записи; при необходимости "разбавить" код математическими инструкциями; да много там чего еще можно придумать, особенно, на продвинутых многоканальных чисетах.. |
|
|
Дата: Май 22, 2004 23:26:21 > memcpy не гарантирует корректность копирования перекрывающихся блоков, а memmove - таки да. Разве это имеет непосредственное отношение к оптимизации копирования блоков памяти.. > да много там чего еще можно придумать, особенно, на продвинутых многоканальных чисетах.. Существует классический труд от Mike Wall: Using Block Prefetch for Optimized Memory Performance. Там всё очень наглядно написано и без излишеств. AMD_block_prefetch_paper.pdf |
|
|
Дата: Май 22, 2004 23:41:15 S_T_A_S_ Наверное kaspersky имел в виду процессоры с несколькими адресными шинами - это характерно для DSP и вообще всех SIMD. |
|
|
Дата: Май 23, 2004 01:29:40 нихрена подобного. имеем код типа: #define off_x 3 char str[]="0123456789abcdef..."; #ifdef _WRONG_ memcpy (str+off_x,str,strlen(str) - off_x); #else memmove(str+off_x,str,strlen(str) - off_x); #endif printf(str + off_x); компилируем: cl.exe /Ox filename.c или bcc32.exe filename.c memcpy дает: 01231237237b37bf memmome дает: 0123456789abcdef |
|
|
Дата: Май 23, 2004 02:17:35 Значит memmove копирует через буфер и будет медленнее чем memcpy. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.370 |