問題タブ [opencl]
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.
opencl - OpenCLのカーネル引数の数の制限
OpenCLでカーネル関数に設定される引数の数に制限があるかどうか知りたいと思いました。引数の設定中にINVALID_ARG_INDEXとしてエラーが発生します。カーネル関数に9つの引数を設定しています。この点で私を助けてください。
opencl - OpenCLでローカルメモリを使用するにはどうすればよいですか?
私は最近OpenCLで遊んでいて、グローバルメモリのみを使用する単純なカーネルを書くことができます。ここでローカルメモリの使用を開始したいのですが、一度に1つの「チャンク」の出力を使用get_local_size()
および計算する方法がわからないようです。get_local_id()
たとえば、AppleのOpenCLHelloWorldサンプルカーネルをローカルメモリを使用するものに変換したいとします。どうしますか?元のカーネルソースは次のとおりです。
この例をローカルメモリの使用方法を示すものに簡単に変換できない場合は、他の簡単な例で十分です。
mapreduce - opencl で古典的な map-reduce の問題を解決しますか?
私は、古典的なマップ削減の問題 (MPI とうまく並列できる) を OpenCL、つまり AMD 実装と並列化しようとしています。しかし、結果が気になります。
最初に問題について簡単に説明させてください。システムに流れ込むデータには、機能セット (それぞれに 30 個のパラメーター) とサンプル セット (それぞれに 9000 以上のディメンション) の 2 種類があります。これは、すべてのサンプル (マップ) のすべての機能のスコアを計算する必要があるという意味で、古典的なマップ削減問題です。そして、すべての機能の全体的なスコアを合計します (削減)。約 10,000 の機能と 30,000 のサンプルがあります。
問題を解決するためにさまざまな方法を試しました。まず、問題を特徴ごとに分解してみました。問題は、スコア計算がランダム メモリ アクセスで構成されていることです (9000 以上のディメンションのいくつかを選択し、プラス/マイナス計算を行います)。メモリアクセスを合体できないのでコストがかかります。次に、問題をサンプルごとに分解してみました。問題は、全体的なスコアを合計すると、すべてのスレッドがいくつかのスコア変数をめぐって競合することです。間違っていることが判明したスコアを上書きし続けます。(10k * 30k * 4バイトが必要なので、最初に個別のスコアを実行して後で合計することはできません)。
最初に試した方法では、8 スレッドの i7 860 CPU でも同じパフォーマンスが得られました。ただし、この問題が解決できないとは思いません。レイ トレーシングの問題 (数百万の三角形に対して数百万のレイを計算する) と非常によく似ています。何か案は?
さらに、私が持っているコードのいくつかを投稿しています:
機能ごとに分解します(機能しますが、遅いです):
サンプルごとに分解しますが、機能しません:
linux - LinuxQTOpenCLの基本設定
LinuxがOpenCLSDKのC/C ++の例をコンパイルするための基本的なセットアップは何ですか?
opencl - 私のOpenCLカーネルは、より高速なハードウェアでは遅くなります。しかし、なぜですか?
マルチコアプログラミングクラスのプロジェクトのコーディングを終えているときに、あなたと話し合いたいと思っていた本当に奇妙なことに気づきました。
マルチコアプラットフォーム向けにプログラムすることで大幅な改善が見られるプログラムを作成するように依頼されました。OpenCLを試すために、GPUで何かをコーディングしてみることにしました。私はマトリックス畳み込み問題に精通しているので、それを選択しました(以前、open_mpiを使用して並列化し、大きな画像を大幅に高速化しました)。
これが、大きなGIFファイル(2.5 MB)[2816X2112]を選択し、シーケンシャルバージョン(元のコード)を実行すると、平均15.3秒になります。
次に、MBP統合GeForce 9400Mで作成したばかりの新しいOpenCLバージョンを実行すると、平均で1.26秒のタイミングが得られます。これまでのところ、12倍のスピードアップです。
しかし、今度は省エネパネルに移動して「グラフィックパフォーマンスモード」をオンにします。このモードでは、GeForce 9400Mがオフになり、システムに搭載されているGeforce9600MGTがオンになります。Appleによれば、このカードは統合されたカードの2倍の速度です。
何だと思いますか、キックアスグラフィックカードを使用したタイミングは平均3.2秒です…私の9600MGTは9400Mより2倍以上遅いようです。
OpenCLに傾倒している方のために、開始する前にすべてのデータをリモートバッファーにコピーするので、実際の計算ではメインRAMへのラウンドトリップは必要ありません。また、OpenCLがそのパラメーターを理解するのにかなり良い実装を行ったことを読んだので、OpenCLに最適なローカルワークサイズを決定させました。
誰か手がかりがありますか?
編集:ここにmakefilesを含む完全なソースコードhttp://www.mathieusavard.info/convolution.zip
java - JavaでのGPGPU/CUDA / OpenCLの最良のアプローチは?
グラフィックスプロセッシングユニット( GPGPU )での汎用コンピューティングは、あらゆる種類のコンピューティングにGPUのパワーを活用するための非常に魅力的なコンセプトです。
画像処理、パーティクル、高速の幾何学的操作にGPGPUを使用したいと思います。
現在、この分野での2つの候補はCUDAとOpenCLのようです。知りたいのですが:
- OpenCLはWindows/MacのJavaからまだ使用できますか?
- OpenCL / CUDAに接続するためのライブラリの方法は何ですか?
- JNAを直接使用するオプションはありますか?
- 私は何かを忘れていますか?
実世界の経験/例/戦争の話は大歓迎です。
c++ - OpenCL または CUDA どちらに行くべきか?
ストリーミング データを処理するために GPU を使用する方法を調査しています。2つの選択肢がありましたが、どちらに行くか決められませんでしたか?
私の基準は次のとおりです。
- 使いやすさ (優れた API)
- コミュニティとドキュメント
- パフォーマンス
- 未来
Linux の下で C および C++ でコーディングします。
opencl - OpenCL を学ぶのに適したプロジェクトは何ですか?
大学でゲーム開発を勉強している私の友人は、現在 OpenCL でプログラミングを学んでいます。OpenCL の最も重要な側面を教え、約 50 時間から 100 時間以内に完了することができる単純なプロジェクトは何でしょうか?
c - OpenCL+NVidia による排他的計算モード
NVidia+OpenCL の排他的コンピューティング モードについて質問があります。
nvidia-gpu で nvidia-smi を使用して、排他的計算モード (cuda プログラミング ガイド 3.0 の 74 ページ) を設定できます。つまり、GPU で計算できるプログラムは 1 つだけです。
cuda ランタイムは、アプリよりも自動的にスケジュールされます。
しかし、この場合、opencl-programs に問題があります。1 つのアプリケーションが排他的計算モードが設定された GPU で実行さclGetDeviceInfo(..., CL_DEVICE_AVAILABLE, ...)
れ、同じ GPU での2 番目の opencl-program 呼び出しがresult == CL_TRUE
. その後、opencl-app がこのデバイスでコンテキストを作成しようとすると、実行中のアプリがクラッシュします (両方)。
OpenCL で利用可能な GPU を見つけるにはどうすればよいですか?
ありがとう。