問題タブ [cilk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parallel-processing - Cilk または Cilk++ または OpenMP
Linux でマルチスレッド アプリケーションを作成しています。シナリオは次のとおりです。
クラスの x インスタンスがあり、BloomFilter
y GB のデータ (使用可能なメモリよりも大きい) があるとします。各ブルーム フィルター インスタンスで、この y GB のデータのメンバーシップをテストする必要があります。さらに、すべてのプロセスまたはスレッド間でデータを共有できるようにデータを読み取るだけなので、並列プログラミングがタスクの高速化に役立つことは明らかです。
現在、Cilk、Cilk ++、または OpenMP のどれを使用するか (どちらが優れているか) について混乱しています。また、マルチスレッドとマルチプロセッシングのどちらを使用するかについて混乱しています
gcc - cilkのgccブランチをビルドできません
次のコマンドでsvnからダウンロードしたブランチからcilkブランチを構築しようとしています。
svn co http://gcc.gnu.org/svn/gcc/branches/cilkplus-4_7-branch/
インストールに使用しているチュートリアルは次のとおりです:これ
ステップ5の9行目で、次のエラーが発生します。
ar: elem-function-common.o: No such file or directory
エラー自体はかなり説明的ですが、make -j3のコマンドのログにそのようなファイル「elem-function-common.o」の作成を見つけることができませんでした(ステップ5の9行目)。誰かがこれで私を助けることができますか?
gcc - gcc-4.7でcilkplusをコンパイルする際のエラー
次のエラーが発生します
関連する行は次のとおりです。
Line 107
cilk_forループの閉じ中括弧に対応します。
どんな助けでも大歓迎です!
thrust - cilk::reducer_list_append と同等の推力
n 個の間隔またはドメインのリストがあります。各間隔を並行して k 個の部分に分割し、新しいリスト (順序なし) を作成したいと思います。ただし、ほとんどのサブディビジョンは特定の基準を満たしていないため、新しいリストに追加する必要はありません。
cilk::reducer_list_append は、push_back を使用してリストを形成する並列リダクションの考え方を拡張します。このようにして、有効なサブインターバルのみを並行して収集できます。
タスクを達成するための推進方法は何ですか? 1つの方法は、大きなnxkリストを作成してから、並列フィルターとストリーム圧縮を使用することだと思いますか? しかし、 nxk は実際には非常に大きくなる可能性があるため、リダクションリストの追加操作があることを本当に望んでいます。
c - マルチスレッド プログラムでのファイル ポインタへのアクセス エラー
私が聞きたいのは大きなコードの一部ですが、できるだけ短くしようと思います。最初にコードから関連するコード スニペットを説明し、次にエラーについて説明します。
main.c
メイン関数内から:
bf_dup_eleminate
bloom-filter.c
ファイルからの関数:
bf_dup_eleminate_read
bloom-filter.c
ファイルから:
これはマルチスレッド アプリケーションであり (2 つのスレッドを使用するように強制して実行しました)、最初のスレッドがprintf
ステートメントに到達することを確認できます (スレッド情報と共に出力されるため)。gdb
次のエラーがあることがわかりました
0x0000000000406fc4 in bf_dup_eleminate_read (bf=<error reading variable: Cannot access memory at address 0x7ffff7edba58>,
fp=<error reading variable: Cannot access memory at address 0x7ffff7edba50>,
j=<error reading variable: Cannot access memory at address 0x7ffff7edba4c>) at bloom-filter.c:536
Line 536
はint bf_dup_eleminate_read ( const bloom_filter *bf, FILE *fp, int j )
エラーメッセージはかなり明確ですが、なぜそれが起こっているのかわかりません。これが起こっている理由は考えられません。ファイルが開かれたことは確かです (関数内のエラー メッセージが出力bf_dup_eleminate
されなかったため)。また、2 つのスレッドが同じコード行を実行している場合、すべてのローカル変数に対して個別のインスタンス化が行われると考えています。何が問題になる可能性があるかを考えると。
どんな助けでも大歓迎です!!
PS:cilk_for
キーワードは、実行時にスレッドを生成するための単なる構成要素です。
使用するスレッド数を 1 にするとプログラムが実行されます。
c - 並列プログラミングの奇妙なケース
時々実行され、時にはセグメンテーション違反が発生する並列プログラムがあります。実行可能ファイルは、3 つのスレッドで強制的に実行すると正常に実行されます (基本的には、単一のシリアル スレッドでも実行されます) が、他のスレッド値で強制的に実行すると、セグメンテーション エラーが発生します。シナリオは次のとおりです。
main.c
メイン関数内から:
bf_dup_eleminate
bloom-filter.c
ファイルからの関数:
bf_dup_eleminate_read
bloom-filter.c
ファイルから:
このエラーはintel inspector
次の場所から報告されました。
コールスタックは次のとおりです。
同様gdb
に、同じ場所でエラーを報告します。それは次のとおりです。
gdb
次のエラーがあることがわかりました
0x0000000000406fc4 in bf_dup_eleminate_read (bf=<error reading variable: Cannot access memory at address 0x7ffff7edba58>,
fp=<error reading variable: Cannot access memory at address 0x7ffff7edba50>,
j=<error reading variable: Cannot access memory at address 0x7ffff7edba4c>) at bloom-filter.c:536
Line 536
はint bf_dup_eleminate_read ( const bloom_filter *bf, FILE *fp, int j )
追加の詳細:
今、私のブルームフィルターは次のように定義された構造です
そのためのメモリは次のように割り当てられます。
のコピーは 1 つだけありbloom_filter
、各スレッドは同じものにアクセスすることになっています (読み取りのみを変更していないため)。
過去4日間ここで立ち往生していて、抜け道が思いつかないので、誰か助けてください。最悪の部分は、3 つのスレッドで実行されていることです!!!
注: cilk_for は、cilk でスレッドを生成するための単なるキーワードです。
c++ - libstdc++.so.6: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません
cilk++ プログラムで Cilkscreen コマンドを実行したいのですが、このエラーが発生しました
/usr/local/cilk/bin/../lib32/pinbin: 共有ライブラリのロード中にエラーが発生しました: libstdc++.so.6: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません
助けてください
multithreading - LLVM でのマルチスレッド
多くのスレッド/タスク (数十万) を処理する LLVM コードを生成する必要があります。これらのスレッドは、Intel TBB のタスク、golang gorutines などのように軽量である必要があります。もちろん、前述の Intel TBB などの外部 C++ ライブラリを使用して実装することもできます (LLVM と互換性がある場合)。
LLVM でのスレッド化に関する情報を長い間探していましたが、あまり見つかりませんでした。LLVM のドキュメントにはいくつかの API 呼び出しが記載されていますが、私が探しているものではないと思います。
したがって、いくつか質問があります。
- Intel の TBB や Cilk などのテクノロジを LLVM と併用することはできますか?
- この状況では、どのスレッド ライブラリを使用すればよいですか?
linux - Linux の cilk と glibc
Linux マシン (Ubuntu 12.04 LTS) に Cilk をインストールしたいのですが、README ファイルでは、マシンに glibc が必要であると書かれており、2.16 バージョンをダウンロードしました。多数のエラーがありましたが、インストールしましたmake check
(それらを解決しようとして何度も失敗した後、とにかくインストールしました)。マシンに Ubuntu を再インストールしたので、マシンにインストールせずに glibc コードをコンパイルしてビルドできますか (なしですべてmake check
を実行しますmake install
)、Cilk をビルドするときに、glibc フォルダー (既にコンパイルおよびビルドされている) を使用するように指示できますか? )たとえば、デスクトップにあるのは?
c++ - pthreadでのCilk++の採用
私はしばらくの間この質問をしました。Cilk++に関するMITオープンコースウェアの講義を見ました。
スレッドを使用するためのインターフェースは単純明快であり、ツールは便利であるように見えました。講師は、pthreadやOpenMPの代わりにCilk++を使用することの長所を説明しました。一般的な書店のブラウジングを通して、私は一度Cilk++に関する本に出くわしました。
しかし、現在Intelが所有しているCilk ++についてMITが言うすべての良いことにもかかわらず、それはほとんど採用されていないようです。
これの証拠は、それがどんなに小さくても歪んでいても、出版された本の欠如と、SOに関するフォロワーまたはタグ付きの質問の数です。(執筆時点)
Amazon検索では
1.Cilk++2の結果
2.pthreads166の結果3.OpenMP278の結果が得られ
ます
SOタグ
1.Cilk11フォロワー2.OpenMP242
フォロワー
3.pthreads258フォロワー
Cilk ++の採用が遅い/少ない理由として考えられるものは何ですか?