LINUX.ORG.RU

MPlayer fast_memcpy() ?


0

0

выдрал давеча из MPlayer/libvo код функции fast_memcpy. Подразумевается, что во время компиляции она оптимизируется для конкретного процессора. Поддержка определённых инструкций определяется дефайнами типа HAVE_MMX2, HAVE_3DNOW и т.д. Потестировал на боевом приложении по сравнению с обычной memcpy на процессоре Duron-1600. Оказалось, что реально быстрее memcpy оказалась _только_ fast_memcpy() с 3dnow. Все остальные инструкции как то mmx, mmx, sse... оказались медленнее. Время мерял с помощью Qt класса QTime (QTime::start() + QTime::elapsed()). Флаги оптимизации брал как в MPlayer для своего процессора - athlon4.

Получается, что fast_memcpy() вовсе не fast, или в чём я не прав ?

Это сильно зависит, во-первых, от процессора и используемого набора команд, а во-вторых, от копируемых блоков памяти. Однажды нужна была высокопроизводительная memcpy для пней -- писал на асме с использованием sse2. Обгоняла штатную memcpy до 8 раз в зависимости от размера копируемых блоков.

anonymous
()
Ответ на: комментарий от anonymous

блоки по 512x512*4 байт.

>>от процессора и используемого набора команд

я привел и процессор и используемый набор команд, быстрее штатного memcpy оказалась только fast_memcpy с 3dnow. и sse/sse2 и mmx/mmx2 показали себя хуже.

alex_custov ★★★★★
() автор топика
Ответ на: комментарий от TaranSergey

Хех, круто, arjanv's interleaved MOVQ/MOVNTQ with prefetchNTA от двух до четырёх раз быстрее, чем glibc memcpy. Правда работает только на aligned blocks.

krum
()
Ответ на: комментарий от alex_custov

Может это кривость реализации интеловского набора команд в процессорах амд? Попробуйте mmx, sse[123] на пентиумах.

Dr_ZLO
()
Ответ на: комментарий от krum

>>Хех, круто, arjanv's interleaved MOVQ/MOVNTQ with prefetchNTA от двух до четырёх раз быстрее, чем glibc memcpy. Правда работает только на aligned blocks.

дык! но для этого ядро надо патчить :(

alex_custov ★★★★★
() автор топика
Ответ на: комментарий от alex_custov

> я привел и процессор и используемый набор команд, быстрее штатного memcpy оказалась только fast_memcpy с 3dnow. и sse/sse2 и mmx/mmx2 показали себя хуже.

По-моему, ты что-то недоговариваешь. Мне очень интересно посмотреть, как ты гонял sse2 инструкции на дюроне. :D

В тему: допускаю, что на дюронах sse расширение могло быть реализовано довольно стремно, чем и объясняется шумный слив, а вот 3dnow от производителя показало себя неплохо.

anonymous
()
Ответ на: комментарий от anonymous

я знаю, что на Duron нет SSE2, но тем не менее с SSE2 откомпилилось и работало. Странно конечно всё это, на выходных потестирую на Sempron-2800

alex_custov ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.