Ну, так как MKL специально написан конкретным производителем ЦП для собственных продуктов, я предполагаю, что они могут использовать немного больше знаний о базовой машине, чем эталонная реализация.
Первыми соображениями может быть то, что они используют оптимизированную сборку и всегда сохраняют текущую сумму в стеке с плавающей запятой x87 80 бит без округления до 32 бит на каждой итерации. Или, может быть, они используют SSE (2) и вычисляют всю сумму в двойной точности (что не должно иметь большого значения для добавления и умножения, по производительности). Или, может быть, они используют совершенно другое вычисление или какие-то черные волшебные трюки.
Дело в том, что эти подпрограммы гораздо более оптимизированы для конкретного оборудования, чем базовая эталонная реализация, но не видя их реализации, мы не можем сказать, в каком направлении. Вышеупомянутые идеи - это просто простые подходы.
Не могли бы вы объяснить, как вы определили, что MKL более точен, чем ссылка fortran BLAS для 'sdot'? – talonmies
Я использовал эти два 'sdot' в решении bicgstab, оказывается, что MKL сходится намного быстрее. –