問題タブ [nvidia]
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.
sdk - NVIDIAのSDKテンプレートでOpenCLとCUDAを混在させようとしています
デバイスのCUDAでメモリを割り当て、そのポインタをデバイスのメモリに取得し、OpenCLで使用して、結果を返すという実験を設定するのに苦労していました。これが可能かどうか見たいです。CUDAプロジェクトを機能させるのに苦労したので、SDKでNvidiaのテンプレートプロジェクトを使用しました。makefileで、common.mkのlibsセクションに-lOpenCLを追加しました。#include <CL/cl.h>
それを行うとすべて問題ありませんが、 openCL呼び出しを開始できるようにtemplate.cuに追加すると、100を超えるエラーが発生します。それらはすべてこれに似ていますが、最後に異なる関数名が付いています。
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334):エラー:識別子「__builtin_ia32_cmpeqps」が未定義です
理由がわからない。できれば助けてください。また、CUDAおよびOpenCL APIを呼び出すことができるプロジェクトを設定する簡単な方法がある場合は、私に知らせてください。
cuda - Compute Prof (Cuda/OpenCL) でブロックごとに静的に割り当てられた共有メモリのサイズ
Nvidia のコンピューティング プロフには、「ワーク グループごとの静的プライベート メモリ」という列があり、そのツールチップには「ブロックごとに静的に割り当てられた共有メモリのサイズ」と表示されます。私のアプリケーションは、ブロックごとに 64 (私が想定するバイト数) を取得していることを示しています。それは、私がそれらのバイトの 1 から 64 の間のどこかを使用していることを意味するのでしょうか、それともプロファイラーは、この量の共有メモリが割り当てられ、それがまったく使用されたかどうかを誰が知っていると私に言っているのでしょうか?
opengl - GPU を使用したビットマップ変換
これが適切なフォーラムかどうかはわかりません。とにかくここで質問です。アプリケーションの 1 つで、医用画像を表示し、その上にアルゴリズムで生成されたビットマップを表示します。実際のビットマップは 16 ビットのグレー スケール ビットマップです。これから、ルックアップテーブルに基づいてカラービットマップを生成します。
ディスプレイは、256x256 の小さな画像でうまく機能しています。しかし、表示領域が 1024x1024 のように大きくなると、グレー スケールからカラー ビットマップへの変換に時間がかかり、インタラクションがスムーズではなくなります。最近、汎用 GPU プログラミングについてよく耳にします。私たちの展開では、ハイエンド (Nvidia QuadroFX) グラフィックス カードを使用しています。
私たちのアプリケーションは、必要に応じて .Net/C# を使用して構築されています。C++/CLI も少し追加できます。ここで私の質問は、このビットマップ変換をグラフィック プロセッサにオフロードできるかどうかです。さらに読むにはどこを探すべきですか?
.net - GPUを頼りにするためのATIとNvideaAPIの違いを明確にする.NetLib\ Wrapper?
カウント目的でGPUを使用したい。GPUが見つからない場合は、CPUにフォールオンして、統合APIを提供する必要があります。(たとえば、№4などの.netに関心があります)
memory - OpenCL/CUDAでホストとデバイスのメモリ転送のボトルネックを軽減する方法
私のアルゴリズムがホストからデバイスおよびデバイスからホストへのメモリ転送によってボトルネックになっている場合、唯一の解決策は異なるまたは改訂されたアルゴリズムですか?
c - CUDA カーネルが 2 つの異なる GPU で異なる結果をスローする (GeForce 8600M GT と Quadro FX 770M)
私は AES CUDA アプリケーションに取り組んでおり、GPU で ECB 暗号化を実行するカーネルを持っています。並列実行時にアルゴリズムのロジックが変更されないようにするために、NIST から提供された既知の入力テスト ベクトルを送信し、ホスト コードから出力を NIST から提供された既知のテスト ベクトル出力と比較します。8600M GT である NVIDIA GPU でこのテストを実行しました。これは Windows 7 で実行されており、ドライバーのバージョンは 3.0 です。このシナリオでは、すべてが完璧に機能し、アサートが成功します。
ここで、Quadro FX 770M でアプリケーションを実行すると、. 同じアプリケーションが起動され、同じテスト ベクトルが送信されますが、得られた結果は正しくなく、アサートは失敗します!!. これは、同じドライバー バージョンの Linux で実行されます。カーネルは 256 スレッドで実行されます。カーネル内で演算をスキップするために、事前に計算された 256 要素のルックアップ テーブルが使用されます。これらのテーブルはもともとグローバル メモリにロードされ、カーネルを起動する 256 のスレッドのうちの 1 つのスレッドが連携してルックアップ テーブルの 1 つの要素をロードし、その要素を共有メモリ内の新しいルックアップ テーブルに移動するため、アクセス レイテンシが減少します。
もともと、GPU 間のクロック速度の違いによる同期の問題について考えていました。そのため、スレッドが共有メモリにまだロードされていない値を使用していたり、何らかの形でまだ処理されていない値を使用していたりして、出力が混乱し、最終的に正しくなくなった可能性があります。
ここでは、既知のテスト ベクトルが宣言されているため、基本的には、カーネルのセットアップを担当する AES_set_encrption に送信されます。
ここでは、setup 関数がメモリの割り当て、カーネルの呼び出し、結果のホストへの送信を担当します。ホストに送り返す前に同期していることに注意してください。その時点ですべてが終了するはずです。これにより、問題はカーネル内にあると思われます..
最後に、カーネル内で一連の AES ラウンドを計算します。同期の問題はカーネル内にあると考えていたので、__syncthreads(); を設定しました。各ラウンドまたは計算操作の後、すべてのスレッドが同時に移動していることを確認して、計算されていない値が評価されないようにします..しかし、それでも問題は解決しませんでした..
正常に動作する 8600M GT GPU を使用した場合の出力は次のとおりです。
AES 256 ビットキー
NIST テスト ベクトル:
平文: 6bc1bee22e409f96e93d7e117393172a
キー: 603deb1015ca71be2b73aef0857d7781
暗号文: f3eed1bdb5d2a03c64b5a7e3db181f8
GPU 暗号化: f3eed1bdb5d2a03c64b5a7e3db181f8
テストのステータス: 合格
そして、Quadro FX 770M を使用して失敗した場合がこれです!!
AES 256 ビット キー NIST テスト ベクトル:
平文: 6bc1bee22e409f96e93d7e117393172a
キー: 603deb1015ca71be2b73aef0857d7781
暗号文: f3eed1bdb5d2a03c64b5a7e3db181f8
GPU 暗号化: c837204eb4c1063ed79c77946893b0
Generic assert memcmp (out, testCipherText, 16) == 0 はエラーをスローしました
テスト ステータス: 失敗
2 つの GPU が同じカーネルを処理しても異なる結果を計算する理由は何でしょうか? この問題を解決するためのヒントやトラブルシューティング、または手順を教えていただければ幸いです
前もって感謝します!!
sdk - OpenCLベクトル追加NvidiaSDKの例で非同期書き込みを使用するのはなぜですか?
ベクトル加算の例には、次のコードがあります。
直後にカーネルを起動します。これはどのように問題を引き起こさないのですか?カーネルが正しく起動したときに、グラフィックメモリバッファが完全に書き込まれることを保証していませんか?
memory - 1GBのVRAMで200万のフロートのCL_OUT_OF_RESOURCES?
200万のフロートは大したことではないようです。1GBのGPURAMは8MBだけです。時々それ以上、時にはそれ以上を問題なく割り当てることができます。clEnqueueReadBufferを実行すると、CL_OUT_OF_RESOURCESが発生しますが、これは奇妙に思えます。トラブルが実際にどこから始まったのかを嗅ぎ分けることはできますか?OpenCLはclEnqueueReadBufferでこのように失敗するべきではありませんか?データを正しく割り当てたときのはずですか?エラーコードだけでなく、より詳細な情報を取得する方法はありますか?OpenCLがCL_OUT_OF_RESOURCESを宣言したときに、どれだけのVRAMが割り当てられたかを確認できれば素晴らしいと思います。
c++ - Cgを使用してオフスクリーンフレームバッファオブジェクトにレンダリングする例
nVidiaCgを使用してオフスクリーンフレームバッファオブジェクトにレンダリングする例を見てみたいと思います。
私がアクセスできるコンピューターにはグラフィックカードがありますが、モニター(またはXサーバー)はありません。だから私は自分のものをレンダリングしてディスク上の画像として出力したいと思います。グラフィックカードはGTX285です。
c - 大きな行列の CUDA 行列乗算の中断
CUDA 3.2 と VS 2008 を使用して実装された次の行列乗算コードがあります。Windows サーバー 2008 r2 エンタープライズで実行しています。Nvidia GTX 480 を実行しています。次のコードは、約 2500 程度までの「幅」(マトリックス幅) の値で正常に動作します。
「幅」を 3000 以上に設定すると、黒い画面の後に次のエラーが表示されます。
オンラインで調べたところ、カーネルが 5 秒以上ハングした後、ウォッチドッグがカーネルを強制終了していたため、一部の人々がこの問題を抱えていることがわかりました。レジストリの「TdrDelay」を編集してみましたが、これにより、黒い画面と同じエラーが表示されるまでの時間が遅れました。したがって、これは私の問題ではないと結論付けました。
コードをデバッグしたところ、次の行が原因であることがわかりました。
これは、行列乗算カーネル関数が呼び出された後にデバイスから結果セットを返すために使用するものです。この時点までのすべてが正常に実行されているようです。メモリを正しく割り当てていると思いますが、なぜこれが起こっているのかわかりません。カードに十分なメモリがなかったのではないかと思いましたが、cudaMalloc がエラーを返すべきではないでしょうか? (デバッグ中にそうでないことを確認しました)。
どんなアイデア/支援も大歓迎です!...どうもありがとうございました!!
カーネルコード:
共有メモリを使用するこの他の関数もあり、同じエラーが発生します。
電話:
カーネルコード: