BLAS подпрограммы в профилировщике?

Я пытаюсь профилировать некоторый код Фортрана, который вызывает GEMM сделать матричное умножение.

Я использовал двойную точность и видел dgemm звонки, как я и ожидал, но теперь, когда я переключился на одинарную точность, я не вижу sgemm вообще где угодно в профилировщике.

Если честно, я не понимаю, как даже dgemm появился. Не нужно ли скомпилировать библиотеки BLAS -pgсоздать необходимые символы?

Это использует intel MKL для библиотек BLAS и gprof для профилировщика.

1 ответ

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

Я использую случайную паузу. Вот подробное обсуждение проблемы, похожей на вашу. Суть DGEMM в том, что он работает настолько быстро, насколько это возможно, учитывая, что он разработан, чтобы быть гибким, прежде всего, не быстрым. Так, например, если ваша программа тратит большую часть своего времени на умножение маленьких матриц, таких как 3x3, процедура DGEMM может фактически тратить 2/3 своего времени на проверку своих флагов аргументов и только 1/3 фактически умножения. Если вы знаете это, то вы можете легко написать свой собственный специальный множитель и получить значительное ускорение. Это то, что случайная пауза и выборка стека вызовов скажут вам.

Другие вопросы по тегам