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

MemTest 64/128

Страницы: 1 2 3 4 5 Следующая »
#0
(Правка: 11 сен. 2019, 8:28) 20:54, 16 авг. 2019

Всем привет!

Пишу свой модуль работы с памятью и возникла необходимость проверить как работают функции на других машинах. Буду признателен за Ваш результат. AMD также приветствуется.
Иногда с первого раза может выдать низкий результат. С чем связано пока не разобрался.

Мой результат:

+ Показать

Бинарник + исходники теста для Delphi XE6 (x64): MemTest64
Если вдруг вылез Exception (может сбойнуть OLE-server),
то запустите EXE с параметром -WMI или BAT-файл в папке Release.

03.09.2019 — Обновил исходники и BIN (Небольшие дополнения и исправления).

#1
21:02, 16 авг. 2019

Как-то так, на моем ноуте:

+ Показать

#2
22:02, 16 авг. 2019

Вот для таких моментов и тестирую:

Запись QWords: 18,12 Гб/с 
Запись DQWords без кэша (NTH): 14,54 Гб/с

У меня например наоборот. Без кэша быстрее:

Запись QWords: 13,85 Гб/с
Запись DQWords без кэша (NTH): 20,74 Гб/с
В общем надо будет перед запуском тестировать, что быстрее.

#3
22:10, 16 авг. 2019

Я считаю, что твой  тест теряет очень важную информацию. Он не выводит характеристики памяти.

MemSpeed(64/128) by eDmk, 2019

Процессор: AMD FX(tm)-8350 Eight-Core Processor
Материнская плата: 990FX Extreme9 (                      ) ASRock

Всего памяти: 15.95 Гб
Объем для тестов: 5.00 Гб
Кол-во циклов чтения/записи: 10

1. Запись Bytes: 3.06 Гб/с
2. Запись DWords: 3.31 Гб/с
3. Копирование DWords: 2.35 Гб/с
4. Копирование системой: 1.88 Гб/с
5. Запись QWords: 3.50 Гб/с
6. Чтение QWords: 5.60 Гб/с
7. Запись DQWords через кэш (WT): 3.49 Гб/с
8. Запись DQWords без кэша (NTH): 6.90 Гб/с
9. Чтение DQWords без кэша (NTH): 7.75 Гб/с
X. Запись DWords без кэша (NTH): 6.17 Гб/с
R. Скорость регистров общего назначения: 15.09 Гб/с
M. Скорость XMM-регистров: 30.49 Гб/с

Общий объем чтения/записи:  600.00 Гб

Латентность (64 бита):
Чтение (1/8 байт): 0.10/0.84 нс
Запись (1/8 байт): 0.07/0.52 нс

Процессор у меня не плохой, а вот память дерьмо. Частота оперативы 766МГц.

#4
(Правка: 22:31) 22:21, 16 авг. 2019

Vlad2001_MFS
> Он не выводит характеристики памяти
Можно сделать, но не сейчас. Там биос надо читать и свою базу железок создавать.
Через WMI не вся информация видна.

У nes память быстрее работает на ноуте, чем у Вас процессор :) Старичок уже  FX.

#5
22:40, 16 авг. 2019
MemSpeed(64/128) by eDmk, 2019

Процессор: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
Материнская плата: Z77-DS3H (x.x) Gigabyte Technology Co., Ltd.

Всего памяти: 23,96 Гб
Объем для тестов: 9,00 Гб
Кол-во циклов чтения/записи: 10

1. Запись Bytes: 13,77 Гб/с
2. Запись DWords: 14,64 Гб/с
3. Копирование DWords: 5,75 Гб/с
4. Копирование системой: 4,51 Гб/с
5. Запись QWords: 14,83 Гб/с
6. Чтение QWords: 11,12 Гб/с
7. Запись DQWords через кэш (WT): 6,96 Гб/с
8. Запись DQWords без кэша (NTH): 14,39 Гб/с
9. Чтение DQWords без кэша (NTH): 13,05 Гб/с
X. Запись DWords без кэша (NTH): 11,70 Гб/с
R. Скорость регистров общего назначения: 90,00
R. Скорость регистров общего назначения: 25,08
Гб/с
M. Скорость XMM-регистров: 50,17 Гб/с

Общий объем чтения/записи:  1?080,00 Гб

Латентность (64 бита):
Чтение (1/8 байт): 0,12/0,92 нс
Запись (1/8 байт): 0,15/1,23 нс

#6
22:48, 16 авг. 2019

eDmk
> Латентность
Это нихрена не латентность у тебя, настоящая латентность меряется не так.
Ну и величина, соответственно, выглядит странно.

 

@DQ:
  movaps [ADest], xmm0
  add ADest, r9
  dec ACount
  jnz @DQ

Че-то цикл у тебя выглядит слишком сложно.
К тому же, возможно, имеет смысл немного его развернуть.

  rep stosb

Интел хвалились, что сделали ускоренный микрокод для этого дела, но что-то по результатам не заметно.
#7
(Правка: 23:08) 23:06, 16 авг. 2019

}:+()___ [Smile]
> Че-то цикл у тебя выглядит слишком сложно.
Нормуль. Для реальных задач. Байт код зато короткий.

}:+()___ [Smile]
> Это нихрена не латентность у тебя, настоящая латентность меряется не так.
Нормуль. Это мой вариант.
Тестам типа AIDA и SiSoft Sandra вообще не доверяю. Там синтетика сплошная + маркетинг.
В реальности они пургу измеряют, а мой тест совпадает с данными MemTest86+ под DOS.
Это реальная скорость доступная приложениям.
Мне аида 60 Гб/с показывает скорость записи, а в реальности более 20 Гб/с не выдает и не может выдавать, т.к. предел для DDR4-2666 -> (2666.0 * 8.0) = 20,828125 Гб/c, что мой тест и показывает.

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

#8
23:21, 16 авг. 2019

}:+()___ [Smile]
> Интел хвалились, что сделали ускоренный микрокод для этого дела
По сравнению с LGA1366 и LGA775 префикс повторения, например на моем LGA2011-3, был сильно ускорен. Более чем в 2 раза.

#9
0:22, 17 авг. 2019
MemSpeed(64/128) by eDmk, 2019

Процессор: AMD Ryzen 7 3700X 8-Core Processor
Материнская плата: B450M Pro4 (                      ) ASRock

Всего памяти: 15,93 Гб
Объем для тестов: 5,00 Гб
Кол-во циклов чтения/записи: 10

1. Запись Bytes: 11,51 Гб/с
2. Запись DWords: 11,43 Гб/с
3. Копирование DWords: 7,48 Гб/с
4. Копирование системой: 5,02 Гб/с
5. Запись QWords: 11,51 Гб/с
6. Чтение QWords: 16,93 Гб/с
7. Запись DQWords через кэш (WT): 11,85 Гб/с
8. Запись DQWords без кэша (NTH): 23,35 Гб/с
9. Чтение DQWords без кэша (NTH): 21,33 Гб/с
X. Запись DWords без кэша (NTH): 15,68 Гб/с
R. Скорость регистров общего назначения: 31,39 Гб/с
M. Скорость XMM-регистров: 63,94 Гб/с

Общий объем чтения/записи:  600,00 Гб

Латентность (64 бита):
Чтение (1/8 байт): 0,32/2,52 нс
Запись (1/8 байт): 0,21/1,72 нс
#10
6:50, 17 авг. 2019

eDmk
> Байт код зато короткий.
Разве

loop:
  movaps [rax+rcx], xmm0
  add rcx, 16
  jnz loop
не короче?

> Это реальная скорость доступная приложениям.
Да к скорости претензий нет. Вот то, что ты обратную скорость latency обозвал — это в корне неверно.
Настоящая задержка памяти будет в сотни раз больше.

> Более чем в 2 раза.
Не, это не то. Там специальный микрокод сделали для rep stosb и rep movsb, однако в тестах преимущества над rep stosd не видно. Может, процессоры недостаточно свежие, или код почему-то под шаблон не подошел?

Кстати, вместо non-temporal сомнительной полезности, попробуй префетч делать.

#11
9:30, 17 авг. 2019

}:+()___ [Smile]
> не короче?
Короче, но за счет выкинутого dec.
Ваш цикл не работает, т.к. jnz после dec проверяет флаг ZF,
а прибавляя к rcx 16 ноль не получится и цикл пожет впасть в бесконечность.
Если только задом-наперед писать байты будет работать.
Кроме того прибавлять immediate-значение к регистру на 1 байт длиннее и чуть медленнее.
регистр + регистр = самая быстрая конструкция.
Так что нет, у меня все верно и код короче.

#12
(Правка: 11:41) 10:23, 17 авг. 2019

}:+()___ [Smile]
> попробуй префетч делать
На моем процессоре бесполезная тема. Никакого эффекта.

По ссылке выложил обновленный тест с prefetcht0.
Он просто заталкивает код в кэш L0 и все.
Это компилятор должен делать в общем то, но Delphi игнорирует prefetcht0.
В моем случае процессор сам в кэш L0 все размещает.

#13
20:31, 17 авг. 2019

eDmk
> а прибавляя к rcx 16 ноль не получится и цикл пожет впасть в бесконечность.
Начинаешь с rcx = −N и все получится.

> Кроме того прибавлять immediate-значение к регистру на 1 байт длиннее и чуть медленнее.
> регистр + регистр = самая быстрая конструкция.
Абсолютно одинаково по скорости.
Единственная возможная разница — в промахах к кешу инструкций из-за увеличенного размера, но 1 байт — это ниочем.

> По ссылке выложил обновленный тест с prefetcht0.
Префетч в цикле надо делать, никакого смысла один раз его дергать нет.
И смещение адреса надо экспериментально подбирать.

#14
22:16, 17 авг. 2019

}:+()___ [Smile]
> Префетч в цикле надо делать
Зачем? Это подсказка для загрузки кода. m8 - размер загрузки и адрес с которого начинается код.
Минимум 32 байта. Кроме того в доке написано, что код помещается в L1, а не в L0. Чтобы его использовать надо точный размер кода знать. Для L0 вообще нет подсказок и инструкций. В современных процессорах уже auto-prefetch работает.

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумОбщее