rAmpArk
я там в коде теста специально поставил
// pre-cache memset (ptr, val, size);
Blew_zc
ОК, просто у меня memset в 64х битной программе выдает 6GB/s, я вот и думаю куда уж быстрее.
Хотя 32х битный memset медленнее собственного SSE:
> memset: 3.5 GB/s
> SSE: 6.1 GB/s
разумеется от запуска к запуску цифры немного разные, но порядок тот же.
вот тест: http://pastebin.com/AGARQVTD
На домашнем компе (количество итераций увеличил в 10 раз для точности):
Intel Compiler 10.x:
time of memset: 6.56751 sec
time of memset_my: 6.34772 sec
time of memset_sse2: 6.21823 sec
MSVC 2005
time of memset: 7.28413 sec
time of memset_my: 3.34481 sec
time of memset_sse2: 6.22407 sec
memset_my на msvc зарулил.
Вы спросите почему?
MSVC в memset_my тупо заюзал rep stosb, а Intel Compiler мозгом допер, что внутри там аналог мемсет и заменил memset_my на свой intel_VEC_memzero.
вообще, имхо, тут больше задача стоит не забить буфер нулями, а каким-то осмысленным числом. Свой вариант можно написать, а предоставляет ли тот же интел компилер нечто кроме однобайтного мемсета ?
entryway
> MSVC в memset_my тупо заюзал rep stosb, а Intel Compiler мозгом допер, что
> внутри там аналог мемсет и заменил memset_my на свой intel_VEC_memzero.
Я так понял, Интел слишком много потерял на издержках вызова своего мощного 10ти страничного __intel_VEC_memzero. Я ведь еще 10000 раз сделал.
Увеличил буфер в 16 раз и уменьшил количество итераций до 100.
Интел выдает похожие результаты:
time of memset: 1.13001 sec
time of memset_my: 0.99765 sec
time of memset_sse2: 0.99610 sec
Майкрософт сильно проседает на стандартной реализации:
time of memset: 3.55052 sec
time of memset_my: 1.78801 sec
time of memset_sse2: 1.02859 sec
Попробовал майкрософту подсунуть #pragma intrinsic(memset), но он плевал.
C AVX всё поменяеться, будет _mm_stream_si256 или что-то в этом роде)
А так-же AVX менее чуствителен к варавниванию.
MinGW и пень 4.
time of memset: 2.95995 sec
time of memset_my: 2.79464 sec
о_О !! Восемь страниц по поводу очистки памяти.. Палм дальше.
Автор темы страдает х***ней.
адцкая тема
ksacvet777
> Восемь страниц по поводу очистки памяти..
ГД.ру торт...
Blew_zc
Pentium(R) D 3.4 HGz
time of memset: 2.01122 sec
time of memset_my: 1.58873 sec
time of memset_sse2: 1.03237 sec
Кстати если вызвать обычный malloc то тоже самое:
time of memset: 1.99203 sec
time of memset_my: 1.62865 sec
time of memset_sse2: 1.03027 sec
Andrey
> Pentium(R) D 3.4 HGz
извиняюсь, на афлонах64 уже тестили ?
innuendo
не не тестил. Дома гляну.
У интела, судя по асму, в зависимости от типа CPU три реализации: SSE, rep stosd и rep stosb. Хотя, возможно, последнее как пожарный случай, когда ничего не продетектилось.
Тема в архиве.