Данные параллельные библиотеки в C / C ++ - PullRequest
1 голос
/ 05 июня 2010

У меня есть прототип C #, который в значительной степени параллелен данным, и у меня был чрезвычайно успешный порядок ускорения на порядок с использованием конструкции Parallel.For в .NETv4.Теперь мне нужно написать программу на нативном коде, и мне интересно, каковы мои варианты.Я бы предпочел что-то переносимое между различными операционными системами и компиляторами, но если толчок наступит, я могу пойти с чем-то Windows / VC ++.

Я посмотрел на OpenMP, который выглядит интересно, но у меня нетИдея, считается ли это хорошим решением для других программистов.Я также хотел бы предложения для других переносимых библиотек, на которые я могу смотреть.

Ответы [ 4 ]

2 голосов
/ 05 июня 2010

Если вас устраивает уровень параллелизма, который вы получаете от Parallel.For, OpenMP, вероятно, является довольно хорошим решением для вас - он делает примерно такие же вещи. Также есть работа и исследование , проводимое на распараллеленных реализациях алгоритмов в стандартной библиотеке. Код, который в значительной степени использует стандартные алгоритмы, может получить от этого еще меньшую работу.

Некоторые из них выполняются с использованием OpenMP, а другие используют рукописный код для (обеспечения) большей выгоды. В долгосрочной перспективе мы, вероятно, увидим больше последних, но сейчас маршрут OpenMP, возможно, немного более практичен.

1 голос
/ 05 июня 2010

Если вы используете Parallel.For в .Net 4.0, вам также следует обратить внимание на Parallel Pattern Library в VS2010 для C ++; многие вещи похожи и основаны на библиотеках.

Если вам нужно работать на другой платформе, кроме Windows, PPL также реализован в Intel Building Building Blocks с версией с открытым исходным кодом.

Что касается другого комментария о сходствах / различиях по сравнению с .Net 4.0, параллельные циклы в PPL (parallel_for, parallel_for_each, parallel_invoke) практически идентичны циклам .Net 4.0. Модель задачи немного отличается, но она должна быть простой.

1 голос
/ 05 июня 2010

Вы должны проверить блоки сборки потоков Intel.Visual Studio 2010 также предлагает встроенную среду параллелизма.Библиотеки .NET 4.0 и ConcRT спроектированы очень схожим образом, если не идентично.

0 голосов
/ 05 июня 2010

Если вы хотите что-то универсальное, например, переносимое в различные ОС и среды, было бы очень трудно не учитывать Java. И они очень похожи на C #, поэтому это будет очень простой переход.

Если вы не хотите вытащить свой скальпель-ниндзя и сделать свой код чрезвычайно эффективным, я бы сказал, java поверх VC ++ или C ++.

...