LINUX.ORG.RU

Производительность памяти.

 , ,


1

1

Вобщем такое дело: Я для дела и апгрейда решил заменить свой старый штеуд на новое железо, и потянуло меня что-то на амд, ибо разницы в перфомансе моего штеуда и новомодного i7 нет, но вёдра и более высокая ТТ, а так же нужные мне фичи - сподвигли меня купить что-то.

Вобщем выбрал я fx8350 и уже почти заказал, но братуха говорит, что бульдозер у него делает «буль-буль» и всё пичаль. Мы побенчили и пришли в выводу, что на штуеду по каким-то мистическим причинам память работает намного быстрее, хотя там и там 1600 дефолтные планки.

Братуха стал выдвигать теории о разном устройстве двуканала и прочено, моя вера в амд пошатнулась. И только вы можете меня спасти.

Кто хочет помочь - пожалуйста побенчите и выложите сюда результаты бенчей и свой проц/память - это будет всем интересно. http://www.alasir.com/software/ramspeed/ramsmp-3.5.0.tar.gz - бенч, собираем sh build.sh.

Мне интересные 10,11,(12),16,17,(18) - то, что в скобках не обязательно. Так же, попробуйте -p1,2,3,4,5,6,7,8, пожалуйста.

Так же, люди, кто юзал «новую» «стримовую запись», аля movnt* - как оно? Для многократного обхода данных, непомещающихся в кеш - кеш мне только мешает, поэтому nt запись через буферы меня спасает, но с чтением проблемы - поэтому я решил поверить в sse4.2 и купить себе новое железо.



Последнее исправление: Klymedy (всего исправлений: 1)

Ответ на: комментарий от mv

Глупый mv не удасужился понять, что те блоки. которые влезают в кеш - буду мерить l1 ... lcc и только после этого память. Поэтому и смотри на блоки в районе 16+метров, а не говори гон, ибо бенчь мериет и кеши.

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

А тайминги ты тоже считал? :) Ну и да, про мелочь кэшируемую уже написали...

pekmop1024 ★★★★★
()
Последнее исправление: pekmop1024 (всего исправлений: 1)
Ответ на: комментарий от devl547

Да хотя бы вспомни их проблемы с подсчетом транзюков. Если бы разработка полноценно контролировалась людьми, такого факапа бы не было.

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

osh5pntp8, нашёл, называется DCTs mode, в дефолте unganged. Кстати, интересно, а можно ли на лету это переключать... Возможно, интел так умеет и поэтому имеет преимущество.

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

Спасибо, осталось найти того, кто переключит и забенчит.

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

Перестаньте онанировать на флаги компилятора.

Суть, как я понял, в том, что флаги компилятора, в данном случае, определяют «доступность» различных тестов, но не результат, в конеретном тесте.

Как-то так.

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

ramsmp -p2 -b18 -t0
ramsmp -p2 -b18 -t1
ramsmp -p2 -b18 -t2
ramsmp -p1 -b18 -t0
ramsmp -p1 -b18 -t1
ramsmp -p1 -b18 -t2
ramsmp -p4 -b18 -t0
ramsmp -p4 -b18 -t1
ramsmp -p4 -b18 -t2

пожалуста

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

У меня в мануале это в DRAM configuration. Там где задаёшь частоты памяти, клоки итп.

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

ganged mode is 1x128bit dual channel

unganged is 2x64 bit dual channel

(c) http://www.xtremesystems.org/forums/showthread.php?166222-Phenom-ganged-and-u...

Короче, когда у тебя загружено только одно ядро может иметь смысл объединение контроллеров в «один толсты». Когда же у тебя много ядер сразу лезут в оперативку лучше чтобы два канала работали порознь. По крайней мере так понял я.

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

у меня гента, компиляю в 8 потоков, остальное время нетбинс и игрушки. (однопоток). так и оставлять в gauged или вернуть взад от греха подальше?
//тест выполняется

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

Мой ответ всегда такой — надо мерять на своих задачах. Потому что иначе в своих заблуждениях можно очень далеко уйти. Клоуны с overclockers.ru тому подтверждение — там народ по блок-схеме проца или его названию влёт «определяет» пиковую производительность, энергопотребление, области применения, себестоимость, уровень выхода годных чипов, «актуальный» техпроцесс итп.

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

Мой ответ всегда такой — надо мерять на своих задачах

С этим сложно поспорить, но не всегда железо доступно для сравнения.

Например, у меня, есть 8-и ядерник (fx-8350), есть задача, которую можно раcпараллелить на 8 процессов. Есть обзоры, что amd хорошо держит многопоток, особенно под линуксом. С учётом этоих факторов и цены, выбрал amd. Интела же уровня 3770 и выше нет в зоне досягаемости, проверка не возможна. Остаётся только смотреть на восемь загруженных на 100% ядер и верить, что решение получилось эффективным.

Для этого и нужны тесты, чтобы заочно, прикидывая особенности тестов, оценить совместимость железа с реальными задачами.

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

В дневном посте фраза:

Результат тут

«тут» - ссылка на файл с результатами при DCT Unganged Mode (Enable)

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

Т.е. Ungauged сливает в хлам Gauged'у в многонитях, хотя должно быть наоборот.

Только ещё одна просьба - суть Gauged в том, что он будет быстрее с -p1, когда у тебя одна нить пинает память. А ты заюзал -p8, что как-бэ казалось бы бесполезно, но Gauged выйграл в хлам. Молодец.

Теперь осталось заюзать бенчмарк( на Gauged) с -p1 и если у тебя он покажит больше 12гигов, то Gauged - заруливает Ungauged по всем параметрам на нормальном коде и смысла в Ungauged нет.

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

Спасибо, но у теперь у тебя Ganged сливает, а у поцана ниже сливает Unganged - мистика. Хотя у него 8-ми нитевый тест, а у тебя максимум 4-х, а некоторые выхлопы вообще не записались( в одном 1 и 2 нити, а во втором 1 и 4).

Мы дошли до того, что дойди до производительности штеуда на амд реально, но только через тотальную жопу:

Мне надо обойти 16мегабайт 1кк раз, выполнив по 3-4 операции с каждыми 4-мя байтами из этих 16мегабайт. Теоретический придел на avx - 32(ширина avx mov'а)*5(частота камня) гигабайт ~= 150гигабайт+. Это 8*5гигаопераций в секунду, хотя пропускная способность памяти в лучшем случае 5-6гигаопераций в секунду - т.е. на одном ведре я могу делать по ~8 операций над каждыми 4-мя байтами. Реально по 10.

На штеуде я могу это сделать на одном ведре с 80%-ю процентами производительности памяти. А вот одна нить на амд мне даст всего 40%, что удручает.

На штеуде я получаю на одном ведре производительность обхода порядка 5гагопераций/с над 4-мя байтами, а на амд всего 2-3. Обходить в нескольких нитях я хоть и имею возможность, но это глупо, хотя можно ли юзать sseфпу в 8 нитей на бульдозере я не знаю, если нельзя, то бульдозер даже на 4-х нитях не доползёт до 5гигаопераций.

Получается, что штеуд на обходе данных не помещающихся в кеш быстрее амд примерно в 2раза и это не лечится, либо лечится( если sseфпу можно юзать в 8нитей), но через жопу.

Вот такая вот пичаль. Когда у тебя менее 7-9 нормальных(умножение, сумма/разность, битовые операции, сдвиги etc, а не деление) операций на 4-хбайтный елементами - смысла юзать больше 1-ой нити у тебе нет. Поэтому вариант «считай в 8нитей» - является черезжопным и мне не нравится, да и гонять в холостую 8вёдер ради 5гигафлопсов*2-3 я считаю непрактичным.

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

А что за мамка? Я в своё время искал-искал с поддержкой ecc, но так и не нашёл то что можно купить. Если мамка обычная то показывает ли наличие ecc memtest?

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

Интересно, т.е. если у нас 2 куска памяти, в один мы пишем, а второй читаем - он выдаёт примерно 80-90% своей максимальной скорости записи, причем максимальной для 8-ми нитей в одной нити.

Если мы берём 3 куска и в один пишем, а 2 читаем - он выдаёт уже 50-60% своей максимальной производительности для 8ми нитей в одном ните.

Т.е. реально мемкопи нам выдаёт в районе 9.5гигов, аля a[n] = b[n]; А вот a[n] = (b[n] + c[n]) нам выдаёт не полженные минимальные 4.25гига, а 3.5гига.

Каким-то мистическим образом на амд a[n] = b[n]; a[n] += c[n]; быстрее, чем a[n] = (b[n] + c[n]).

Причем, если не юзать префетч и movnt* картина мира возвращается наместо и a[n] = (b[n] + c[n]) становится быстрее, но скорость падает до 20-25% от своей максимальной производительности для 8ми нитей в одном ните.

Амд - одна мистика.

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

Ну для меня 10% разницы - существенная разница. Там разница в районе 1-2гигов, что для меня принципиально.

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

Если че надо - я сделаю, ты говори :)
Первый текст был с потушенными иксами и всем-всем-всем, второй на свежезагруженном компе, третий на свежезагруженном компе + audacious + opera. cpufreq-governor ondemand. Может подкрутить что-то?

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

GA-990FXA-D3
На сайте производителя ничего не написано ни о ECC, ни о IOMMU, хотя и то и то мать прекрасно умеет. (специально для тебя поставил мемтест и посмотрел ещё раз :3).

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

Мне по большому счету память с ECC в общем-то ни к чему, просто захотелось закупиться железом на ближайшие лет пять, и не думать о обновах. Вот и решил... Топовый проц, средняя видюха, мать с iommu,ecc, двумя pciex x16, двумя pciex x8, крутая память, копеечный заменяемый БП (FSP 460W бумажных, ~350W реальных). Уже полгода работает, жрать не просит... Зафлудился что-то я, извиняюсь за оффтоп.

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

Глупый mv не удасужился понять, что те блоки. которые влезают в кеш - буду мерить l1 ... lcc и только после этого память. Поэтому и смотри на блоки в районе 16+метров, а не говори гон, ибо бенчь мериет и кеши.

Ну ты сам-то посмотри, прежде чем гнать на непогрешимого. Особенно, когда non-temporal storage используется.

Тест - говно.

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

Бла-бла глупый mv снова нихрена не осилил и пошел гнать на меня.

Там нет nt чтения, ибо его нет до sse4.1, а тест не юзает < ssse3. Там где подписано nt - банальное чтение с префетчем, лучше которого ты не напишешь - я тебе гарантирую это. Мы можем спорнуть на твои 5звёзд, если так уверен в себе.

Ты можешь взять 1гиг памяти и прочитать его, уж на него кеши влиять не будут, но картина не изменится - поверь мне.

Тест написан по царски, и как я уже сказал - лучше ты не напишешь, он мериет именно то, что должен мерить. Меня интересует конкретная вещь: обход 32 ro метров в цикле тысячи, сотни тысяч, миллионы раз. Тест мне это показывает.

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

superhackkiller1997 это снова ты вернулся на лор

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

Хосспадя, давай что-то конкрейтно, либо не порть мне топик, пожалуйста. С чем-то несогласен - говори и аргументируй конкретно и по теме. Считаешь бенчь говном - покажи нормальный - его написать дело 20-30минут.

Это я уже читал, что конкретно мне там надо ЕЩЁ РАЗ прочитать? Повторю вопрос.

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

Там нет nt чтения, ибо его нет до sse4.1, а тест не юзает < ssse3. Там где подписано nt - банальное чтение с префетчем, лучше которого ты не напишешь - я тебе гарантирую это. Мы можем спорнуть на твои 5звёзд, если так уверен в себе.

Иди читай книжки про то, что такое movnt* и prefetchnta. Как дойдёт, приходи, исправишься.

Я глянул код - собрание заблуждений. Умилительно, что кто-то готов спорить на чужие звёзды.

Ты можешь взять 1гиг памяти и прочитать его, уж на него кеши влиять не будут, но картина не изменится - поверь мне.

Ты Дреппера не читал. Или предмет оказался слишком сложным для тебя.

Тест написан по царски, и как я уже сказал - лучше ты не напишешь, он мериет именно то, что должен мерить. Меня интересует конкретная вещь: обход 32 ro метров в цикле тысячи, сотни тысяч, миллионы раз. Тест мне это показывает.

Тест - говно, показывает фигню, а раз ты хлебаешь и нахваливаешь, то в предмете не разбираешься.

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

Иди читай книжки про то, что такое movnt* и prefetchnta. Как дойдёт, приходи, исправишься.

Как любят люди куда-то посылать, там, скажу я тебе prefetcht0, а не prefetchnta. Ой...

Я глянул код - собрание заблуждений. Умилительно, что кто-то готов спорить на чужие звёзды.

Т.е. в чём там собрание заблуждений ты не скажешь - так и запишем.

Ты Дреппера не читал. Или предмет оказался слишком сложным для тебя.

Так ты согласен или нет? Если нет - аргументируй, а если нет аргументов, то что я могу сказать.

Тест - говно, показывает фигню, а раз ты хлебаешь и нахваливаешь, то в предмете не разбираешься.

Я жду описания: в чём говно? Нет аргументов, так и запишем - сел в лужу, а из аргументов 2 словосочетания: «тест - говно», «ты не читал/осилил». Детсад.

Я тебя не прошу писать что-то сложное - напиши тот же мемкопи правильно - покажи как надо - там 10-15минут времязатраты. Я погляжу и скажу, что ты прав, но насколько я знаю - я ничего не увижу, как я не вижу аргументов уже 2-3ссобщение.

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

Решил поувесистей аргументировать, чтобы ты на меня не начал гнать:

Ах, ну и да, movnt* даже на 10килобайтах будет ограничен оперативой, а бустанёт только в рамках кешлайна, либо длинны буфера, если он не равен кешлайну.

Чтение - там префетч, а как написанно в твоей книге prefetchnta нихрена почти не делает и movnt* там даже и не пахнет, поэтому расчитывать на его nt и приравнивать его к movnt* глупо. Он по возможности старается не засорять кеш, но «старается» и не засоряет - разные вещи.

Ну давай пройдёт по твоим «заблуждениям». Анролл до кешлайна- даёт нереальный буст. Анрол на больше кешлайна - даёт тоже не мало. Префетч - даёт буст. Ничего быстрее mov*'ов в ряд нету, а если нужны не мувы в ряд - там есть мемкопи и +=, а также a = (b + c)?*(m).

Всё эти четыре операции - самые распространённые.

Все считалки считают блоки - ты можешь поставить блоксайз такой, который тебе нужен - распространенно повсеместно.

Если ты начнёшь говорить что-то, аля «штеуд умеет сам иногда раскидывать код вида:

mov b[n] xmm0
mov c[n] xmm1
mul xmm0 xmm1
mov xmm1 a[n]

mov b[n] xmm0
mov c[n] xmm1
mul xmm0 xmm1
mov xmm1 a[n]

и так ещё 100раз.
в
mov b[n] xmm0
...
mov b[n] xmm7

mov c[n] xmm8
...
mov c[n] xmm15

mul xmm0 xmm8
...
mul xmm7 xmm15

mov xmm8 a[n]
...
mov xmm15 a[n]

Мне проще писать сразу 2-й вариант и не надеятся на штеуд. И т.п.

Больше в коде ничего нет, что из этого „заблуждение“?

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

Как любят люди куда-то посылать, там, скажу я тебе prefetcht0, а не prefetchnta. Ой...

ssesp_nt использует nt.

Так ты согласен или нет? Если нет - аргументируй, а если нет аргументов, то что я могу сказать.

Очевидно, что ты хотел померять пропускную способность подсистемы памяти на своём бульдозере. Когда тебя фактами прижали, что выше пиковой пропускной самой памяти не прыгнешь, ты начал вилять, что 32-х мегабайтный паттерн - это то, что тебе надо. Хотя 32 метра - это и не LLC, и не память, а хрен пойми что.

Я жду описания: в чём говно? Нет аргументов, так и запишем - сел в лужу, а из аргументов 2 словосочетания: «тест - говно», «ты не читал/осилил». Детсад.

Ну так ты сам посмотри, там такое ощущение, что ребятки с утра вставали пораньше, чтобы подольше почитать x86-64 instructions set и ещё одну команду к тесту прикрутить. А понимания-то нет. Кроме ISA им стоило читать и MCA, в котором написано, что портов, на которые можно load шедулить, всего два штуки, и поэтому использование ими всех доступных SSE-регистров не только ничего к скорости не добавляет, но и ещё кататонию пайплайна вызывает. И вторая половина регистров кодируется в более жирной форме. И оффсеты больше signed 7-битных кодируются сильно жирнее. И декодер с пайплайном у них получается забиты бесполезными нулями вместо следующих команд. А линейный доступ и NT-префетч для следующего цикла ажно через два килобайта - это каково, а? Ни хардварному префетчеру работать не дают, ни свои хинты правильно не расставлены.

Авторы сего кода слабо разбираются в микроархитектуре современных процессоров, хотя в интернете по этой теме полно информации.

Кроме того, этим тестом мне не удалось протестировать пропускную способности памяти. Какие параметры не крутил, всё равно врёт.

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

Ах, ну и да, movnt* даже на 10килобайтах будет ограничен оперативой, а бустанёт только в рамках кешлайна, либо длинны буфера, если он не равен кешлайну.

Я не понял, что ты тут пробурчал. movnt и prefetchnta нужны, чтобы бороться с cache poisoning за счёт пометки строчки кэша, как evictable. Механизм заполнения кэша всё тот же.

Чтение - там префетч, а как написанно в твоей книге prefetchnta нихрена почти не делает и movnt* там даже и не пахнет, поэтому расчитывать на его nt и приравнивать его к movnt* глупо. Он по возможности старается не засорять кеш, но «старается» и не засоряет - разные вещи.

Ты сам-то свой бред, который тут пишешь, понимаешь?

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

ssesp_nt использует nt.

А ещё 80% функций нет.

Очевидно, что ты хотел померять пропускную способность подсистемы памяти на своём бульдозере. Когда тебя фактами прижали, что выше пиковой пропускной самой памяти не прыгнешь, ты начал вилять, что 32-х мегабайтный паттерн - это то, что тебе надо. Хотя 32 метра - это и не LLC, и не память, а хрен пойми что.

Что ты несёшь? У меня нет бульдозера, какими фактами? Причем тут пиковая пропускная способность памяти? Суть треда в том, что на одной нити штеуд пишет в память в 2раза быстрее, чем амд, что подтверждает даже проприетарщина. На 8-ми нитях амд дотягивает уже до «пиковой пропускной способности», хотя i7 дотягивает уже на 2-х нитях.

Ой как ты юлить начал, прям смешно стало. Ну мерий больше 32-х метров, кто тебе не даёт?

Ну так ты сам посмотри, там такое ощущение, что ребятки с утра вставали пораньше, чтобы подольше почитать x86-64 instructions set и ещё одну команду к тесту прикрутить. А понимания-то нет. Кроме ISA им стоило читать и MCA, в котором написано, что портов, на которые можно load шедулить, всего два штуки, и поэтому использование ими всех доступных SSE-регистров не только ничего к скорости не добавляет, но и ещё кататонию пайплайна вызывает. И вторая половина регистров кодируется в более жирной форме. И оффсеты больше signed 7-битных кодируются сильно жирнее. И декодер с пайплайном у них получается забиты бесполезными нулями вместо следующих команд. А линейный доступ и NT-префетч для следующего цикла ажно через два килобайта - это каково, а? Ни хардварному префетчеру работать не дают, ни свои хинты правильно не расставлены.

Я жду от тебя кода, где ты покажешь скилл. Пока набор несвязных друг с другом мистических выгладок из штеуд мануала.

Они использовали половину регистров, когдаж ты научишься считать и читать. Какая разница какая там жирность - я клал l1i - мне это не интересно. Разницы между 7-ми битными и 20битными оффсетами нет никакой. Декодеру плевать - это тебе не алу, поэтому в декодер мувы никогда не упрутся. Конвейер на это клал, чтож ты не причитаешь над циклом?

Хинты ставятся так, чтобы было наверняка. Твой аппаратный префетч сливает в говно. Я жду от тебя нормальной реализации.

Авторы сего кода слабо разбираются в микроархитектуре современных процессоров, хотя в интернете по этой теме полно информации.

Дак штука в том, что автор сего(на который я отвечаю) комментария уже написал код и увидел, что он в хлам сливает этому и обвинил этот код в вранье, а почему он врёт - вышеупомянутый автор сказать не может.

Кроме того, этим тестом мне не удалось протестировать пропускную способности памяти. Какие параметры не крутил, всё равно врёт.

С чем ты сравнивал? Приведи эталонный тест - я погляжу.

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

Я не понял, что ты тут пробурчал. movnt и prefetchnta нужны, чтобы бороться с cache poisoning за счёт пометки строчки кэша, как evictable. Механизм заполнения кэша всё тот же.

-p1 -b16 - код абсалютно одинаков, за исключением nt.

movntps

51373517 L1-dcache-stores
9644658 L1-dcache-store-misses
328818 L1-dcache-prefetches
738148 LLC-stores
87704 LLC-store-misses  

movaps

8646830855 L1-dcache-stores
5000251996 L1-dcache-store-misses
475194 L1-dcache-prefetches
1343854676 LLC-stores
26990813 LLC-store-misses

Да, да. Помечает строчки как evictable, механизм такой же.

Ты сам-то свой бред, который тут пишешь, понимаешь?

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

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

Да даже в 4 потока там хлам полный. LinX - чисто интеловский бенч.
Есть неофициальный linx-fma, он раза в 2 выше результаты выдает.

devl547 ★★★★★
()
Последнее исправление: devl547 (всего исправлений: 1)
Ответ на: комментарий от devl547

В 4 потока с нормально выставленной affinity он будет раза в два шустрее.

pekmop1024 ★★★★★
()

Посоны - линукс подвёл. На чтении тут баг - я захреначу патч на мемсет, хотя я на чтение и не смотрел.

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

Какой же ты тупой мудак. Как ни логинься твоя тупость бесконечна.

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