CLAPACK f2c vs MKL: проблема производительности матричного умножения
Я ищу решение для ускорения работы моей программы с большим количеством матричных умножений. Поэтому я заменил библиотеки CLAPACK f2c на MKL. К сожалению, результаты выступлений не оправдали ожиданий.
После исследования я столкнулся с блочной треугольной матрицей, которая в принципе дает плохие результаты, когда я пытаюсь умножить ее на ее транспонирование.
Чтобы упростить задачу, я провел тесты с единичной матрицей из 5000 элементов (я нашел то же поведение).
- Здесь отметим, что умножение плотного и тождества очень оговорено с точки зрения производительности, и сейчас MKL показывает лучшие характеристики.
- Умножение MKL кажется быстрее, чем CLAPACK f2c, но только с таким же количеством ненулевых элементов.
У меня есть две идеи по поводу этих результатов:
Оптимизация 0 не активирована по умолчанию в MKL
MKL не может видеть значения 0 (двойные) внутри моих разреженных матриц.
Можете ли вы сказать мне, почему MKL показывает проблемы с производительностью? Есть ли у вас какие-либо советы, как обойти умножение нулевых элементов с помощью dgemm?
Я сделал консервацию в CSR, и она показывает лучшую производительность, но в этом случае lapacke_dgemm хуже, чем f2c_dgemmm.
Спасибо за помощь :)
MKL_VERBOSE Intel(R) MKL 2021.0 Обновление 1 Сборка продукта 20201104 для архитектуры Intel(R) 64 Процессоры с поддержкой Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2), Lnx 3,50 ГГц lp64 gnu_thread