Я пытаюсь вычислить следующее:
Y = Y0 - (Un. (A * Y0) + Vn. (Y0 * Z)) * dt
самым быстрым / наиболее эффективным способом, где Y0, Un, Vn, A и Z - матрицы, размер которых порядка 300 X 300, "." является произведением матрицы, а «*» представляет умножение матрицы.
Мои вопросы:
Вычисляет независимые в вычислительном отношении подматрицы A2 = A * Y0 и Z2 = Y0 * Z, затем Un2 = Un. * A2 и Vn2 = Vn. * Z2 параллельно быстрее, чем вычисляя их последовательно что Y = Y0 - (Un2 + Vn2) * dt? Если да, то каков хороший пример того, как будут выполняться эти параллельные вычисления?
Есть ли какой-нибудь другой лучший / рекомендуемый подход (например, с использованием ATLAS)?
Язык C ++, и он должен работать на платформе Linux или Windows с многоядерными (как минимум, двухъядерными) процессорами. В настоящее время я использую BOOST UBLAS в качестве пакета BLAS.