Подходящее решение будет зависеть от типа вычислений и данных, которые вы хотите обрабатывать, от степени детализации параллелизма, которую вы хотите достичь, и от того, сколько усилий вы готовы вложить в него.
Простейшим было бы просто использовать подходящий решатель / библиотеку, которая поддерживает параллелизм (например,
ScaLAPACK ). Или, если вы хотите развернуть свои собственные решатели, вы можете выжать некоторую параллелизацию из вашего текущего кода, используя OpenMP или компиляторы, которые обеспечивают автоматическое распараллеливание (например, компилятор Intel C / C ++). Все это даст вам разумное повышение производительности без необходимости масштабной реструктуризации вашего кода.
На другом конце спектра у вас есть опция MPI . Это может позволить вам максимально повысить производительность, если ваш алгоритм хорошо распараллеливается. Однако для этого потребуется немало реинжиниринга.
Еще одна альтернатива - пойти по маршруту. Есть библиотеки инструментов, которые сделают это менее кошмарным. Это стоит посмотреть: Библиотека параллельного программирования Boost C ++ и Строительный блок Threading