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)

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

Для того чтобы все тесты были доступны надо править build.sh. Впиши arch руками x86_64 и заработает.

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

Почему не в тактах?

Хм, по-моему, очень разумно указывать в наносекундах. Очень удобно сравнивать между собой системы без заморочек с пересчётом с учётом частоты камня.

PS тоже интересно как был получен тест. Меня удивляет цифра 15ns для топового решения. Как-то это нереально быстро, имхо.

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

Хорошо, а на бульдозерах есть (un)ganged как на атлонах, или где там оно есть? На 8-ми вёдрах оно где-то на уровне i7, но вот на одном-двух вёдрах сливает в такой хлам.

Непонятки немного ушли.

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

А зачем что-то пересчитывать - время в тактах отражает реальную суть, а вот ns какой-то бред. Взависимости от частоты оно будет плавать, а время в тактах нет, поэтому наносекунды надо пересчитывать.

100тактов будет 100тактов и на 5ггц, и на 2.5 и на 1.25, а вот 10нс на 5ггц, будут 5на на 2.5 и 2.5 на 1.25.

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

а на бульдозерах есть (un)ganged как на атлонах, или где там оно есть?

Вот не помню :(. Я не видел в настройках биоса gigabyte GA-970A-UD3 .

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

Взависимости от частоты оно будет плавать, а время в тактах нет

Ты совсем не прав. Скорость памяти лимитируется _главным образом_ задержкой row address strobe (если не путаю), там нужно совершенно конкретное время чтобы произошла выборка нужной строки и частота ЦПУ тут ни при чём.

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

Уже. Чуть позже выложу полную версию результатов.

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

Я говорил про «в целом». Считать что-то в нс глупо.

Для примера: ТТ*sizeof(mov). Для 1ггц и 64битных интов - это 8 предельных гигов, для sse 16предельных гигов. Если там тест на 64битных интах, то его предел 16гигов на 2ггц, хотя реально это не предел памяти. Поэтому всё это плывёт, кривит и косит.

Поэтому норм пацаны, чтобы не путать людей пишут код своего бенча и считают в тактах.

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

RAS не привязан к тактам. Если посмотришь тайминги памяти то увидишь что он растёт пропорционально росту частоты.

Ты же не считаешь, например, random seek time у харда в тактах процессора.

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

Мув-то у тебя минимум 1 так, вот посчитай сколько процессор может сделать мувов. Почему мериют sse( я даже не уверен, что в этой кривой проприетарщине кто-то что-то нормально мериет), а не 64битными интами.

Ты же не считаешь, например, random seek time у харда в тактах процессора.

Это совершенно не то. Скорость памяти привязана не только к скорости самой памяти(таймингам), но и к скорости мувов, поэтому все операции процессора логичней записывать в тактах, даже если то, что стоит под ними не зависит от процессора.

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

AMD FX(tm)-8350 Eight-Core Processor (Без разгона, без турбо)
DDR3 1600MHz 9-9-9-24.

for bench in 7 8 9 10 11 12 13 14 15 16 17 18; do
    for cores in 1 2 3 4; do
        echo "bench $bench, cores - $cores";
        ./ramsmp -b $bench -p $cores;
    done;
done > ramsmp_full.out

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

Jurik_Phys ★★★★★
()

В общем, судя по всему, разницы между Core i* и AMD FX-* в этом плане нет.

fragmentor
()

В общем, нормальный тест упрётся в количество каналов к планкам памяти, помножить на максимальную пропускную памяти. Мерять пропускную имеет смысл только в несколько тредов (у одного ядра load/store портов меньше, чем у интерфейса к памяти), на AVX на Nehalem и SSE на всех остальных. На штеудах HT должен быть отключен, или софт должен про HT знать и биндить потоки на разных ядрах.

В этом комменте глупый тест, похоже, не смог заставить процессор выйти из кэшей.

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

В этом комменте глупый тест, похоже, не смог заставить процессор выйти из кэшей.

В данном случае при сборке теста не определилась архитектура системы, может это дало эффект.

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

Так это у тебя же FX есть, у меня интелы кругом :)
Я память на AMD толком не тестил, но подобные приколы припоминаю...

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

Мерять пропускную имеет смысл только в несколько тредов (у одного ядра load/store портов меньше, чем у интерфейса к памяти), на AVX на Nehalem и SSE на всех остальных.

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

Суть треда в том, какого хрена так происходит.

В этом комменте глупый тест, похоже, не смог заставить процессор выйти из кэшей.

В этом тесте глупый mv просто не осилил прочитать то, что там написанно. На r/w тестах - он перебирает степени двойки до 32метров, а там, где он бенчит умножение/сложение/сложение+умножение - там он бенчит 32-мя метрами.

Если тебе мало 32-х метров, то там есть ключик -m -ставь сколько хочешь, ибо мне 32-х метров хватит за глаза. На тестах с nt записью - там на кеши вообще кладётся.

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

Оператива не задействует гипертранспорт же.

А что касательно настроек - по сути только одна есть (увеличивать частоту cpu_nb при увеличении частоты памяти).

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

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

Я тоже не верю, что такая пичаль имеет место быть.

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

Методом чтения тематических веток на руоверах и экспериментов, думаю, решаемо.

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

Сорри, но ты с дуба рухнул?

HT_Link там идет только с проца до северника.
А память напрямую к процессору цепляется отдельной шиной.

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

У нехалемов QPI, у сандиков-ивиков DMI. А тут?

А тут HT.

Но! Обмен контроллера памяти с самими планками идет по отдельной независимой шине у всех.

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

Явно же узкое место - это связь процессора с контроллером, ибо от планок до контроллера у всех всё одинаковое и работает со скоростью планок.

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

Явно же узкое место - это связь процессора с контроллером

И сам контроллер. ЕМНИП, его частота у Интела сильно повыше.

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

Если честно, то я понял, что в FX-ах с работой разных частей процессора полный шлак.

В реальных задачах от частот HT_Link и CPU_NB ничего не зависит, как и от повышения частот памяти 1866->2400.

Синтетика да, реагирует. А на деле - пшик.

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

Спасибо, всё как обычно 12 на первую нить, и потом по 2 с каждой нити.

SSE (nt)  Copy:      19715.21 MB/s  [NTA prefetch]
SSE (nt)  Scale:     19707.36 MB/s  [NTA prefetch]
SSE (nt)  Add:       15130.34 MB/s  [T0 prefetch]
SSE (nt)  Triad:     15176.87 MB/s  [T0 prefetch]

А вот это очень странно. Попробуй пожалуйста:

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

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

В данном случае при сборке теста не определилась архитектура системы, может это дало эффект.

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

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

Глупый mv сходил на вики, посмотрел пиковую пропускную способность планки DDR3, помножил на количество планок (это если планок меньше, чем каналов, и система в полный интерливинг сконфигурирована). В данном случае, у ТС две планки DDR3-1600, т.е. всё, что выше 2 * 12800 = 25.6 G/s - это гон.

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