Лучший подход для параллельных вычислений в C

Я пишу код C в Linux (возможно, позже в Windows), и этот код включает массивные вычисления линейной алгебры с параллельной обработкой. Я использую GotoBLAS2, который выполняет множество задач. Тем не менее, есть некоторые вычисления матриц (особенно разреженных матриц), которые следует выполнять вручную. Я поискал в Интернете и нашел некоторые библиотеки, такие как Open MP. Кроме того, кажется, что многопоточность может быть полезной. Каким будет лучший подход для параллельных вычислений на C? Спасибо

Дополнительная информация о моем коде: меня особенно беспокоит умножение разреженной матрицы на вектор. Кроме того, у меня есть большой набор векторов {v1, v2, v3, v4, ...}, и эти векторы нужно умножить на разные числа, что может быть выполнено с использованием параллельных вычислений. Спасибо


person Pouya    schedule 26.01.2013    source источник
comment
Возможно, вам стоит предоставить пример кода того, что вы собираетесь делать, или того, что у вас есть сейчас. Это довольно расплывчато.   -  person hyde    schedule 27.01.2013
comment
вычисления разреженных матриц могут выполняться подпрограммами BLAS - так почему же они должны выполняться вручную?   -  person Floris    schedule 27.01.2013
comment
Как я могу выполнить вычисление разреженной матрицы-вектора с помощью BLAS? Это было бы отлично, поскольку GotoBLAS сильно оптимизирован.   -  person Pouya    schedule 27.01.2013
comment
См. предыдущий ответ   -  person Floris    schedule 27.01.2013


Ответы (1)


Это действительно вопрос типа «дискуссия», а не «вот проблема; кто может помочь мне ее решить?» тип. «Лучший подход» - это субъективно. Мне очень нравится OMP - он выполняет большую часть управления потоками за вас. В конце концов, «лучшее» - это то, что можно эффективно использовать. Сильный инструмент в плохих руках никуда не годится. Вы можете выучить достаточно OMP за день, чтобы ускорить некоторые ключевые циклы почти за счет количества процессоров на вашей машине - это мой голос.

person Floris    schedule 26.01.2013