Лучше всего использовать пакет линейной алгебры, который уже хорошо оптимизирован для многоядерной среды, и использовать его для умножения матрицы на вектор.Пакет Atlas , gotoblas (если у вас Nehalem или старше; к сожалению, он больше не обновляется) или реализации поставщика BLAS (например, MKL для процессоров Intel, ACML для AMD или VecLib для яблока, которые все стоят денег), имеют хорошие, хорошо настроенные, многопоточные реализации BLAS.Если у вас нет веских оснований полагать, что вы можете добиться большего успеха, чем те, кто работает на полную ставку, лучше использовать их.
Обратите внимание, что вы никогда не получите параллельное ускорение с DGEMV, которое вы делаете сDGEMM, просто потому, что вектор меньше другой матрицы и поэтому меньше работы;но вы все равно можете делать это неплохо, и вы обнаружите, что с этими библиотеками вы получаете гораздо лучшую производительность, чем с чем-либо, свернутым вручную, если вы не выполняли многоуровневую блокировку кэша.