Какой вес для многоэлементного теста? - PullRequest
0 голосов
/ 03 октября 2019

Я пишу эталон для школьного проекта. Это очень просто, но мне интересно, в реальной жизни, какие типичные веса используются для различных типов тестов? Например, если я комбинирую целочисленный тест, тест кеша, тест с плавающей запятой, должны ли они быть одинаково взвешены в итоговом «счете»? Я догадываюсь, что для многих вещей тест кеша важнее, чем простая арифметика, и что для многих вещей скорость оперативной памяти является важным фактором. Есть ли консенсус?

1 Ответ

3 голосов
/ 03 октября 2019

Универсального набора весов не существует.

Различные реальные рабочие нагрузки имеют разные узкие места или разные веса.

Не существует единого числаэто может сказать вам, насколько быстрым является компьютер. Возможно (и происходит в реальной жизни), что программа X работает быстрее на компьютере A, чем B, но программа Y работает быстрее на компьютере B.

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


например, плотныйMatmul обычно может насытить пропускную способность исполнительного блока FMA, потому что он (O ^ 3) работает над N ^ 2 данными. С осторожной блокировкой кеша вы можете получить в основном попадания в кеш L1d и избежать более чем одной векторной нагрузки SIMD на FMA. Пропускная способность DRAM / кеша должна быть достаточно высокой, чтобы поддерживать ее, но большинство хранилищ / перезагрузок попадают в кэш L1d (что, конечно, также должно быть в состоянии поддерживать).

Но другие рабочие нагрузки могут стать узким местомпропускная способность памяти или задержка, и не заботится о пропускной способности FPU вообще. например, AMD Ryzen 1 может выполнять 1x 128-битную FMA за такт, в то время как Intel Haswell и более поздние могут делать 2x 256-битную FMA за такт. Но Ryzen быстрее или почти равен тактовой частоте для некоторых других рабочих нагрузок.

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

...