Cilk Plus は、Intel による Cilk の現在の実装です。どちらもマルチスレッド環境です。つまり、実行中に複数のスレッドが生成されます。
並列プログラミングに慣れていない場合は、すでに開発された順次コードの並列化が容易になるため、おそらく OpenMP の方が適しています。コードのシーケンシャル バージョンは既にありますか?
OpenMP は、プラグマを使用して、コードのどの部分を並列で実行する必要があるかをコンパイラーに指示します。あなたの問題を正しく理解していれば、おそらく次のようなものが必要です。
#pragma omp parallel for firstprivate(array_of_bloom_filters)
for i in DATA:
check(i,array_of_bloom_filters);
データがスレッド間で共有されている間の競合を避けるために、異なるブルーム フィルターのインスタンスがすべてのスレッドで複製されます。
更新:
この論文では、実際には非常に不均衡なアプリケーションを考慮しています。つまり、(異なるスレッドに割り当てられた) 異なるタスクが非常に異なるワークロードで発生する可能性があります。あなたが言及した論文を引用して、「スケジューリング、負荷分散、終了検出、およびタスクの粗大化戦略に挑戦する非常に不均衡なタスクグラフ」。スレッド間で計算のバランスをとるには、タスクのサイズを小さくして、同期にかかる時間を増やす必要があることを考慮してください。つまり、適切な負荷分散には常に代償が伴います。あなたの問題の説明はあまり詳細ではありませんが、あなたが抱えている問題はかなりバランスが取れているようです。そうでない場合は、Cilk を使用してください。そのワーク スティール アプローチは、おそらく不均衡なワークロードに対する最良のソリューションです。