Zefick
Ты просто мне завидуешь.
Вот правильный тест:
В результате половина времени, замерянная автором, это просто паразитные затраты на цикл. Если читать и писать по одному байту, то разница при записи с memcpy в семь раз, если с интами то в два.
Zefick
> В результате половина времени, замерянная автором, это просто паразитные
> затраты на цикл
=A=L=X=
> GCC -O3 и никакого мошенничества
У меня то же самое, первый вариант выдаёт 16, второй 2. В выхлопе вообще упоминания memcpy нет и код разный.
Zefick
> У меня то же самое, первый вариант выдаёт 16, второй 2.
Твои все варианты у меня медленее моих изначальных, кроме write, тот такой же.
Если ему не мешать, он всё векторизирует на ура. У меня еще опция -march=corei7 задействована.
Кстати, я же сегодня его обновил до 4.9.3. Если у тебя по другому попробуй обновится.
Тут явно идёт упор рогами в шину и я полез короче проверять в чём может быть у меня проблема с ней...
У меня Intel Compiler 10 генерирует код, который выполняется почти в два раза медленнее, чем msvc2005
entryway
Лучше мой код попробуй, с этой шляпой всё понятно, она работает от компилятора к компилятору по разному.
=A=L=X=
> Кстати, я же сегодня его обновил до 4.9.3.
Ну ты резкий хлопчик, ещё и года не прошло. А я слышал, что только 6.1 вышел. Там, правда, список одних только серьёзных регрессий в багтрекере на несколько экранов.
=A=L=X=
> Если у тебя по другому попробуй обновится.
Похоже, что у меня даже memset заинлайнился (одинаково на 4.9.2 x86 и 5.1 x64):
movl $1073741824, %ecx
movq %rdx, %rdi
rep stosb
Так что теперь вопросы к твоему компилятору.
Zefick
> Лучше мой код попробуй
entryway
> > Лучше мой код попробуй
Видимо древний интел компилер (лет десять десятой версии уже) не распознал мой проц и отдал самую медленную версию.
entryway
Можешь скинуть свои exe-шники? (моего теста)
=A=L=X=
> Можешь скинуть свои exe-шники? (моего теста)
https://dl.dropboxusercontent.com/u/235592644/files/mem.zip
А ты мне от компилятора поновее 2005 года? Может как-то умнее завекторизирует memset. Статик версию только.
entryway
Хм, у меня они обе более-менее ровно пошли:
D:\Misc\mem>"=a=l=x=_intel.exe" init write time: 0.438 sec => 2.28311 Gb/sec write time: 0.242 sec => 4.13223 Gb/sec read time: 0.23 sec => 4.34783 Gb/sec write time: 0.243 sec => 4.11523 Gb/sec read time: 0.241 sec => 4.14938 Gb/sec write time: 0.288 sec => 3.47222 Gb/sec read time: 0.236 sec => 4.23729 Gb/sec D:\Misc\mem>"=a=l=x=_msvc.exe" init write time: 0.47 sec => 2.12766 Gb/sec write time: 0.245 sec => 4.08163 Gb/sec read time: 0.206 sec => 4.85437 Gb/sec write time: 0.239 sec => 4.1841 Gb/sec read time: 0.206 sec => 4.85437 Gb/sec write time: 0.233 sec => 4.29185 Gb/sec read time: 0.204 sec => 4.90196 Gb/sec
Но и тот же потолок, 4-5 Гб/с опять таки. Хмммм...
мой mingw32 [file=117429] слинковал со -static чтобы не просил своих dll-ек
В общем планки то я попереставлял врозь и по отдельности, но свои результаты смог только ухудшить.
При том что DDR3-1333 и должно быть по всем спекам, заявлениям от материнки и процессора быть больше.
Мдя уж... Наверное так и останется покрыто мраком до следующего апгрейда.
=A=L=X=
> мой mingw32 Mingw test static слинковал со -static чтобы не просил своих dll-ек
На запись такое же медленное как мой старый icc (14 против 25 у msvc), а на чтение быстрее чем "даже" msvc2005 (18 против 14)
Глянул asm записи в msvc — тупой rep stos. Умом не давил и помогло.
Тема в архиве.