web-dev-qa-db-ja.com

並列プログラミングライブラリ? (+いくつかの機能)

:質問はスタックオーバーフローフォーラムに適さないと見なされ、ここに投稿されているはずなので、これは再投稿です。元のトピックは there です。

その作業を実現するために、マルチスレッド、並列処理、および現在利用可能なライブラリについてお話ししたいと思います。特に、この概念を実現するための使いやすいライブラリ(以下を参照)が既に存在するのか、それとも作成する必要があるのか​​、そしてそれがどれほど難しいのかと思います。

ライブラリの目的私が探しているのは:

  • エンジニアや高度な卒業生だけでなく、ほとんどの開発者がアクセスできます(これは、開発者がそれを恐れずに使用したいことを意味します)。
  • c ++開発者が利用可能
  • ポータブル(Windows、Mac OS X、Linuxから始めて、モバイルデバイスに拡張)
  • 軽量
  • 使いやすい(アクセシビリティに関連)

最も重要な機能私が探しているもの:

  • タスクの並列処理
  • タスクのキャンセル(ソフトで突然の方法)
  • タスクの依存関係

既存の関連ライブラリ

  • スレッドビルディングブロック:使用が非常に複雑で、かなり制限されたライセンス(GPL /コマーシャル)、それは私が見つけた唯一のライブラリであり、すべてが含まれています私が探している機能の
  • Grand Central Dispatch:現在移植不可、複雑すぎず、タスクのキャンセルなし(開始後)、タスクの依存関係なし、自動依存関係サポートなし(手動のみ)
  • PFunc:Unixのみ、まだ少し複雑、タスクの依存関係なし、タスクのキャンセルなし
  • Microsoft Task Parallel Library:MSプラットフォームと.NETのみ、ハードキャンセルなし、制限された手動のタスク依存関係(1つのタスクが他の複数のタスクを起動できない) )
  • OpenCL:現在、すべてのプラットフォームで使用できるわけではありません。GPU並列タスクライブラリほどではありません(希望するほど高レベルではありません)。
  • OpenMP:Visual Studioの無料バージョンを除いて広くサポートされており、タスクのキャンセルや自動タスクの依存関係はありません

これらすべてについてどう思いますか?これらのニーズに対応するライブラリが少ないのはなぜだと思いますか?それとも私はいくつかの素晴らしい図書館を見逃しましたか?そして、それはそれを達成するにはあまりにも多くの仕事を意味すると思いますか?それとも十分に面白くないですか?私が書いた不足は、いくつかの検索で判明したものであることに注意してください。私はこれらのライブラリの専門家ではありません。

このライブラリの最終的な目的は、たとえそれが夢であったとしても、シーケンシャルプログラミングで通常行うのと同じくらい簡単に並列化された方法でプログラミングすることです。

セイロ

8
Ceylo

TBBはほぼすべてがそれに近づいています。 boost::threadはレベルが低すぎます。ちなみに、TPLの間違った場所を探しているのですが、Microsoftは、ネイティブコード用のPPL)という別のライブラリを出荷しています。もちろん、これはWindowsのみをサポートしています。

ただし、TBBの使用が複雑であると思われる場合は、検討している開発者が実際に並列アプリケーションを作成できるかどうかを質問します。 TBBには、parallel_for_each。いくつかのラムダに対応できない場合、同時実行性にどのように対応するかを理解するのは難しいと思います。

6
DeadMG