問題タブ [pycuda]
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.
cuda - pycudaのグローバル関数からデバイス関数を呼び出す
私はPyCUDAの初心者です。__device__
で宣言された関数からで宣言された関数を呼び出したい__global__
。pyCUDAでこれを行うにはどうすればよいですか?
上記のコードは私に次のエラーを与えています
cuda - PyCUDA でメッセージを出力する
単純な CUDA プログラムでは、cuPrintf.h をインクルードすることでスレッドごとにメッセージを出力できますが、PyCUDA でこれを行うことはどこにも説明されていません。PyCUDAでこれを行う方法は?
cuda - cuda-メモリ不足(スレッドとブロックの問題)-アドレスが範囲外です
私は63個のレジスタ/スレッドを使用しているので(最大32768)、約520個のスレッドを使用できます。この例では現在512個のスレッドを使用しています。
(並列処理は、グローバルcomputeEHfields関数関数内の関数 "computeEvec"にあります。)問題は次のとおりです。
1)以下のmemチェックエラー。
2)numPointsRp> 2000を使用すると、「メモリ不足」と表示されますが、(間違っていない場合は)グローバルメモリを計算して問題ありません。
- - - - - - - - - - - - - - - -更新しました - - - - - - - - - ---------
cuda-memcheckを使用してプログラムを実行すると、(numPointsRs> numPointsRpの場合のみ)次のようになります。
=========サイズ4の無効なグローバル読み取り
=========computeEHfieldsの0x00000428
=========ブロック(0,0,0)のスレッド(2,0,0)による
=========アドレス0x4001076e0は範囲外です
==================サイズ4の無効なグローバル読み取り
=========computeEHfieldsの0x00000428
=========ブロック(0,0,0)のスレッド(1,0,0)による
=========アドレス0x4001076e0は範囲外です
==================サイズ4の無効なグローバル読み取り
=========computeEHfieldsの0x00000428
=========ブロック(0,0,0)のスレッド(0,0,0)による
=========アドレス0x4001076e0は範囲外です
エラーの概要:160エラー
- - - - - -編集 - - - - - - - - - - - - - -
また、たとえば、numPointsRs=1000およびnumPointsRp=100があり、numPointsRp = 200を変更してから、numPointsRp =を再度変更する場合は、(ブロックではなくスレッドのみを使用する場合(ブロックについてはテストしていません))。 100私は最初の結果をとっていません!
--------------------GPUモデル---------------------------- --------------------
cuda - pycuda のみ block(N,1,1) が機能します
以下のプログラムが block=N,1,1 に対して正常に実行されるのに、1,1,N (結果が無効な値) または 1,N,1 (結果が 0,1,0...) に対しては正常に実行されない理由がわかりません。 ..0) または 10,50,1 (結果は 0,1,0..0) (N=500)。
- - - - - - - 編集 - - - - - - - - - - - - - - - - - - -----
わかりました、 int idx=threadIdx.y を使用すると、 block(1,N,1) を使用できることを忘れていました。
しかし、それでは、常にこの配置 block(N,1,1) を使用する必要がありますか?
私はそれを理解しなければなりません!ありがとうございました!
python - 実行時の PyCuda エラー
これはローテーション用のpycudaコードです。最新のcudaドライバーをインストールし、cudaをサポートするnvidia gpuを使用しています。cudaツールキットとpycudaドライバーもインストールしましたが、この奇妙なエラーが発生します。
これは私の間違いです。
これを修正するのを手伝ってください。
python - pycuda.driver.Eventを使用して時間を測定すると、間違った結果が得られます
PyCudaの例からSimpleSpeedTest.pyを実行して、次の出力を生成しました。
最初の4回の測定は妥当ですが、最後の1回(0.000002s)はかなり離れています。CPUの結果は最も遅いものになるはずですが、最も速いGPU方式よりも桁違いに高速です。したがって、明らかに測定された時間は間違っているに違いありません。同じタイミング方法が最初の4つの結果でうまく機能するように見えるので、これは奇妙です。
そこで、SimpleSpeedTest.pyからいくつかのコードを取得し、小さなテストファイル[2]を作成しました。これにより、次のようになります。
オプション1pycuda.driver.Event.record()
は(SimpleSpeedTest.pyのように)を使用して期間を測定し、オプション2はを使用しtime.clock()
ます。この場合も、オプション1はオフですが、オプション2では妥当な結果が得られます(テストファイルの実行にかかる時間は約6秒です)。
なぜこれが起こっているのかについて誰かが考えを持っていますか?
SimpleSpeedTest.pyではオプション1の使用が承認されているので、問題の原因は私のセットアップでしょうか?GTX 470、ディスプレイドライバー301.42、CUDA 4.2、Python 2.7 64、PyCuda 2012.1、X5650Xeonを実行しています
[2]テストファイル:
pycuda - PyCudaマルチスレッド実行エラー
これは私のpycudaコードです。実行するとスレッドエラーが発生します。これにpycudaスレッドを実装しようとしています。googleを検索しましたが、答えが見つかりませんでした。pycudaのリソースも非常に限られています。私はインターネットです。みんな助けてください。
cuda - pycuda は非決定的なようです
私はcudaに奇妙な問題を抱えています。
以下のスニペットでは、
(pycuda 経由で) コードをコンパイルして実行すると、期待どおりに動作します。printf を削除すると、結果は奇妙になります。ほとんどの配列は正しく設定されていますが、一部は完全にランダムに見えます。
完全な python コードは次のとおりです。
基本的に、カーネルに printf を使用すると、エラーは 0 になります。それがないと、ランダムなエラーが出力されます (私のマシンでは、約 2452 (最大の場合)、および -2583 (最小の場合))。
理由がわかりません。
Geforce 570 を使用して pycuda 2012.2 (Windows 7 64 ビット) で cuda 4.2 を実行しています。
ありがとう。
cuda - pycuda::complex 配列の要素ごとの関数
大規模な 2D 複雑な配列 (最終的には 2* 12x2 *12 データポイント)で関数を実行したいと考えています。ただし、pycuda は期待どおりに動作しません。ElementWise 関数は 2 次元配列では機能しないため、SourceModule 関数をブロック サイズで使用しました。
問題は、GPU 上の C コードが CPU 上の numpy 計算と同じ結果を返さないことです。非常に大きく奇妙な数値が得られます。
次のコードを使用しています。何がうまくいかないのですか?