ПрограммированиеФорумОбщее

Как быстрее очистить большой кусок памяти? (C++) (8 стр)

Страницы: 14 5 6 7 8 9 Следующая »
#105
0:41, 18 янв 2011

rAmpArk
я там в коде теста специально поставил

// pre-cache
    memset (ptr, val, size);
#106
0:55, 18 янв 2011

Blew_zc
ОК, просто у меня memset в 64х битной программе выдает 6GB/s, я вот и думаю куда уж быстрее.
Хотя 32х битный memset медленнее собственного SSE:
> memset: 3.5 GB/s
> SSE: 6.1 GB/s
разумеется от запуска к запуску цифры немного разные, но порядок тот же.
вот тест: http://pastebin.com/AGARQVTD

#107
2:25, 18 янв 2011

На домашнем компе (количество итераций увеличил в 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.

#108
2:32, 18 янв 2011

вообще, имхо, тут больше задача стоит не забить буфер нулями, а каким-то осмысленным числом. Свой вариант можно написать, а предоставляет ли тот же интел компилер нечто кроме однобайтного мемсета ?

#109
3:00, 18 янв 2011

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), но он плевал.

#110
3:03, 18 янв 2011

C AVX всё поменяеться, будет _mm_stream_si256 или что-то в этом роде)
А так-же AVX менее чуствителен к варавниванию.

#111
6:52, 18 янв 2011

MinGW и пень 4.
time of memset: 2.95995 sec
time of memset_my: 2.79464 sec

#112
7:19, 18 янв 2011

о_О  !!  Восемь страниц по поводу очистки памяти..  Палм дальше.

#113
7:26, 18 янв 2011

Автор темы страдает х***ней.

#114
7:28, 18 янв 2011

адцкая тема

#115
10:41, 18 янв 2011

ksacvet777
> Восемь страниц по поводу очистки памяти..

ГД.ру торт...

#116
10:47, 18 янв 2011

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

#117
10:48, 18 янв 2011

Andrey
> Pentium(R) D 3.4 HGz

извиняюсь, на афлонах64 уже тестили ?

#118
11:04, 18 янв 2011

innuendo
не не тестил. Дома гляну.

#119
11:20, 18 янв 2011

У интела, судя по асму, в зависимости от типа CPU три реализации: SSE, rep stosd и rep stosb. Хотя, возможно, последнее как пожарный случай, когда ничего не продетектилось.

Страницы: 14 5 6 7 8 9 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.