問題タブ [offloading]
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.
openmp - Intel MIC オフロードによる異種 OpenMP 並列ループ
私は多くの繰り返し (~10^6-10^7) を含むループを含むコードに取り組んでおり、配列 (「myresult」としましょう) が多くの貢献の合計を介して計算されています。OpenMP を使用する Fortran 90 では、次のようになります。
コードはインテル Xeon コプロセッサーを搭載したシステムで実行されますが、もちろん、可能であればその存在から恩恵を受けたいと考えています。OpenMP で MIC オフロード ステートメント (!dir$ offload target ...) を使用して、ループがコプロセッサだけで実行されるようにしましたが、コプロセッサが終了するのを待っている間、ホストの CPU 時間を無駄にしています。理想的には、ホストとデバイスの間でループを分割できるので、次のようなことが実現可能かどうか (またはより良いアプローチがあるかどうか) を知りたいです。ループはホスト上の 1 つのコアでのみ実行されます (ただし、おそらく OMP_NUM_THREADS=2 を使用しますか?):
caching - 負荷のピーク時にキャッシュされた (Redis) データの大規模なセット (50K+ キー) を更新する最良の方法は?
環境: 複数の Web (30)、キャッシュ (8) サーバー、および 1 つの専用データベース サーバー。
データベースをオフロードするために、中央の Redis キャッシュとローカル メモリ キャッシュが用意されています。
- 大規模な共通イベント データがキャッシュされ、スケジュールに基づいて更新されます
- ユーザー固有のデータは、アクセス時に個別にキャッシュされます
イベントによってユーザー固有のデータ ニーズの大規模なセットがすべて更新されると、問題が発生します。
約 20 万人の登録ユーザーがいて、イベントが発生すると約 10K ~ 20K がサイトに (同時に) 訪れます。ユーザーあたり平均 5 個のキャッシュ キーを使用すると、更新が必要なユーザー固有のデータを含む合計 50K ~ 100K のキャッシュ キーになります。
現在のソリューションは失敗します:
- ユーザーキャッシュをフラッシュすると、データベースが過負荷になります (30 Web サーバー)
- すべてのデータをキャッシュにロードするのに時間がかかる (10% しか使用されない)
- KEYS と SCAN はキャッシュをブロックできます (まだ試していません...これは問題ですか?)
この状況でのベストプラクティスは何ですか?
c++ - map, double> used in this offload region is not bitwise copyable
I am using Intel C++ Compiler v14.0.3. This following code troubles me:
Compiler gives this message:
I've read this page. But I could not think of how to transfer this data. What can I do?
Sorry for my poor english. Thank you.
gcc - GCC 5.1 と OpenMP を使用して作業を Xeon Phi にオフロードする方法
バックグラウンド
新しいGCC 5.1リリースを使用して、OpenMP ブロックを Intel MIC (つまり、Xeon Phi) にオフロードしようとしましたが、うまくいきませんでした。GCCオフロードページに続いて、"intelmic" およびホスト コンパイラ用の "accel" ターゲット コンパイラをビルドするスクリプトをまとめましたbuild.sh。コンパイルは正常に完了したようです。
次に、スクリプトを使用して、以下にリストされている単純なプログラムenv.shをコンパイルしようとします。hello.cただし、このプログラムはホスト上でのみ実行され、ターゲット デバイスでは実行されないようです。
GCC のコンパイルだけでなく、一般的なオフロードにも慣れていないため、間違っている可能性があることが複数あります。ただし、既に言及されているリソースに加えて、次のことを調査しました (リンクを投稿するのに十分な担当者がいません)。
- Xeon Phi のオフロード
- Xeon Phi チュートリアル
- インテル Xeon Phi オフロード プログラミング モデル
最大の問題は、通常 Intel コンパイラを参照していることです。コピーを購入する予定ですが、現在コピーはありません。さらに、開発パイプラインの大部分はすでに GCC と統合されており、(可能であれば) その状態を維持したいと考えています。
最新の MPSS 3.5 ディストリビューションをインストールし、Ubuntu で動作するように必要な変更を加えました。システム内の Xeon Phis のステータスを正常に通信して確認できます。
私たちの努力では、コードがマイク エミュレーション モードで実行されている兆候も見られませんでした。
質問
- 実際に Xeon Phi にオフロードするホスト/ターゲット GCC コンパイラの組み合わせを構築した人はいますか? もしそうなら、どのリソースを使用しましたか?
- ビルド スクリプトに欠けているものはありますか?
- テストソースコードに問題はありますか? それらはエラーなしでコンパイルされ (以下で説明するものを除く)、48 スレッド (つまり、ホスト システムの論理スレッドの数) で実行されます。
- Google 検索ではあまり情報が得られないため、次のステップについて提案がある人はいますか (GCC オフロードをあきらめること以外に)。これはバグですか?
ありがとう!
build.sh
env.sh
hello.c (バージョン 1)
このコードを次のようにコンパイルしました。
hello_omp.c (バージョン 2)
ほとんど同じことですが、代わりに
構文。実際、micでは問題が発生しますが、任意のデバイス番号 (つまり 0) を使用すると、ホスト上でコンパイルおよび実行されます。このコードは、同じ方法でコンパイルされました。
c++ - インテル Xeon Phi オフロード コード + STL ベクトル
STL ベクトルに格納されたデータをインテル Xeon Phi コプロセッサーにコピーしたいと考えています。私のコードでは、計算に必要なデータを含むベクトルを含むクラスを作成しました。ホストでクラスオブジェクトを作成し、ホストでもデータを初期化してから、このオブジェクトをコプロセッサーに送信したいと考えています。これは、私がやりたいことを示す簡単なコードです。オブジェクトをコプロセッサー・ベクターにコピーした後、空になります。何が問題になる可能性がありますか? どのように正しく行うのですか?