Я настраиваю свой код GEMM и сравниваю его с Eigen и MKL. У меня есть система с четырьмя физическими ядрами. До сих пор я использовал количество потоков по умолчанию из OpenMP (восемь в моей системе). Я предположил, что это будет по крайней мере так же хорошо, как четыре потока. Однако сегодня я обнаружил, что, если я запускаю Eigen и свой собственный код GEMM на большой плотной матрице (1000x1000), я получаю лучшую производительность с использованием четырех потоков вместо восьми. Эффективность подскочила с 45% до 65%. Я думаю, что это также можно увидеть на этом графике https://plafrim.bordeaux.inria.fr/doku.php?id=people:guennebahyperthreading и turbo boost в матричном умножении - худшая производительность с использованием гиперпотока
Разница довольно существенная. Однако производительность намного менее стабильна. Производительность скачков вокруг немного выше каждой итерации как с Eigen, так и с моим собственным кодом GEMM. Я удивлен, что Hyperthreading делает работу намного хуже. Наверное, это не вопрос. Это неожиданное замечание, на которое я надеюсь найти отзывы.
Я вижу, что здесь не рекомендуется использовать гиперпотоки.
How to speed up Eigen library's matrix product?
У меня есть вопрос относительно измерения максимальной производительности. Теперь я запускаю CPUz и смотрю на частоту, когда я запускаю свой код GEMM, а затем использую этот номер в своем коде (4.3 ГГц на одной разогнанной системе, которую я использую). Могу ли я доверять этому номеру для всех потоков? Как узнать частоту на поток для определения максимума? Как правильно объяснить турбобус?
Когда я запускаю свой код чертежа Mandelbrot, используя AVX, и все ядра гипер-теадинга дают большой импульс. Гораздо больше, чем я ожидал. Но когда я запускаю свой код GEMM, он дает гораздо большее снижение производительности, чем я ожидал. Хотя это могло только немного улучшить ситуацию - недостаточно, чтобы волноваться. Оказывается, это предположение было неправильным. Я все еще не уверен, почему результаты настолько неустойчивы, хотя и с гиперпотоками. Используя OpenMP, я получаю 45% -ную эффективность, совместимую с гиперпотоком (восемь потоков) и между 35% и 65% (четыре потока) без. – 2013-04-19 15:36:00