問題タブ [jcuda]

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.

0 投票する
1 に答える
785 参照

cuda - CUDA (JCUDA) 共有メモリ (?) の問題 / 未定義の動作

私は自分のゲーム プロジェクト (タワー ディフェンス) に取り組んでおり、共有メモリを使用して JCuda ですべてのクレーターとタワーの間の距離を計算しようとしています。タワーごとに、N スレッドで 1 ブロックを実行します。ここで、N はマップ上の生き物の数に等しくなります。特定のブロックのすべてのクレーターとその塔の間の距離を計算し、これまでに見つかった最小の距離をブロックの共有メモリに保存します。私の現在のコードは次のようになります。

問題は、同じ入力を使用してコードを複数回再実行すると(各実行後にホストとデバイスの両方ですべてのメモリを解放します)、コードがブロック (タワー) 番号 > 27 に対して実行されるたびに異なる出力が得られることです。グローバルメモリを使用するようにコードを書き換えると、コードが実行されるたびに同じ結果が得られるため、共有メモリとそれを処理する方法に関係があると確信しています。何か案は?

0 投票する
2 に答える
1858 参照

java - Windows 7 64 ビット、Sun JDK 7、および IntelliJ 11.1 で CUDA 4.0 を介して JCUDA 0.4.1 を実行できない

質問は、関連するすべてのバージョンをレイアウトします。

http://www.jcuda.orgにあるサンプル ファイルの 1 つ、JCublasMatrixInvert.java を実行しようとしています。

NVIDIA CUDA ドライバーをインストールしました。JCUDA 0.4.1 バインディングをダウンロードし、/lib ディレクトリを java.library.path に追加しました。実行時に設定した JVM パラメータは次のとおりです。

しかし、クラスを実行しようとすると、次のスタック トレースが表示されます。

パスに欠落しているとされる dll が表示されます

私は何を逃したのですか?私は何を間違っていますか?この例の実行に成功した人は誰でも私にアドバイスできますか? ありがとう。

0 投票する
1 に答える
596 参照

cuda - JCuda。既に使用されているポインタの再利用

JCUDA の操作に問題があります。CUFFT ライブラリを使用して 1D FFT を作成するタスクがありますが、結果は 2 で乗算されるはずです。そのため、タイプ CUFFT_R2C で 1D FFT を作成することにしました。これを担当するクラスは次のとおりです。

乗算を担当するメソッドは、cuda カーネル関数を使用します。Java メソッド コード:

カーネル関数は次のとおりです。

しかし、(デバイス メモリ内の) FFT の結果を指すポインターをmultipleOn2 メソッドに渡そうとすると、cuCtxSynchronize() 呼び出しで例外がスローされます。例外:

私は Visual Studion C++ を使用して同じことをしようとしていましたが、これには問題はありません。手伝っていただけませんか。

PS この問題は解決できますが、デバイス メモリからホスト メモリにデータをコピーし、新しい cuda 関数を呼び出す前に毎回新しいポインタを作成してコピーする必要があるため、プログラムの実行が遅くなります。

0 投票する
1 に答える
298 参照

java - gpgpu で多数のベクトル計算を行う最良の方法は?

100 万列 x 100 万行のマトリックスがあります。

私のアルゴリズムは次のことを行う必要があります:

または、次のように言うこともできます。

私の質問: この問題のためにメモリを割り当ててメモリを初期化する適切な方法は何

ですか?
-または、ベクトルのリストにメモリを割り当ててから、このリストをループする必要がありますか?
-それとも??

私の懸念は、GPU への転送時間を最小限に抑えたいということです。JCublas の hello world の例を 2 つのベクトルでの sgemm 操作に変更して、この種の計算を試みましたが、多数のベクトルで実行すると、転送時間がかかり、gpu アクセラレーションの利点が失われました。

どうも!PS: 実装は任意の Java ライブラリにある可能性があります

0 投票する
1 に答える
294 参照

java - cublasSgemmjcuda による一括使用

行列の乗算のためにjcudaでcublasSgemmBatched() 関数を使用しようとしてきましたが、ポインターの受け渡しとバッチ処理された行列のベクトルを適切に処理する方法がわかりません。この問題を適切に処理するためにコードを変更する方法を誰かが知っていれば、本当に感謝しています。この例では、cublasGetVector の後、C 配列は変更されません。

0 投票する
1 に答える
182 参照

java - JCuda コンパイラ エラー

JCuda の使用を開始しました。プログラムをコンパイルすると、「jcuda.cuda exception cuda_error_launch_failed」エラーが発生します。インストール ガイドに記載されている手順に従いましたが、機能しません。オンラインで利用できるリソースはほとんどありません。 .これは私のコードです:

nvidia 460 gtx gpu および cuda ドライバーとツールキットがインストールされています。

0 投票する
1 に答える
546 参照

cuda - プログラムで jcuda.driver.JCudaDriver/cuInit を複数回呼び出しても安全ですか?

私は動的言語 (Clojure) を使用して、JCuda を使用したインタラクティブな開発方法で CUDA コンテキストを作成しています。多くの場合、への呼び出しを含む初期化子を呼び出しますjcuda.driver.JCudaDriver/cuInit。cuInit を複数回呼び出しても安全ですか? また、cuInitのdestroyメソッドのようなものはありますか?エラーコードCUDA_ERROR_DEINITIALIZEDが返ってくる可能性があるのでお願いします。

0 投票する
2 に答える
675 参照

java - JavaでCUDAを使用した大きなピン留めされたメモリチャンクの割り当て

すでにJavaで書かれたプログラムにGPU計算を実装しています。その目的のために、私はjcudaバインディングを使用しています。場合によっては、比較的大きなアレイのデバイスへの高速なホストメモリ転送が必要です。ストリームを使用する場合は、固定メモリを使用する必要があります。問題は、cca 600 MbsのRAMを超えるホストに固定されたメモリを割り当てたい場合、「CUDA_ERROR_OUT_OF_MEMORY」例外が発生することです。これは、使用可能な固定メモリのサイズをテストするために使用したコードです。

現在、OSはページングできないため、固定されたメモリを使いすぎるのを防ぐことができることを認識しています。問題は、私には48Gb(45Gbの空き容量)の物理メモリがあり、OSにそれをもっと与えるように強制する方法が必要なことです。これを行う方法はありますか(可能であればエレガントに)?

編集:OSは64ビットのWindows 7ProfessionalSP1です

0 投票する
2 に答える
796 参照

cuda - += 代入によるネストされた for ループ

私はJavaで次のコードを持っています:

せいぜい単純化しただけなので、実際のロジックを検索しないでください:)。

ループ内の += ステートメントのため、CUDA でこれを変換するのに数時間苦労しました。

私はこのようなものから始めました:

しかし、すべてのスレッドが同じ変数を設定しようとしているために機能しないことにすぐに気付きました。

このプレゼンテーションで内積の例を読みましたが、in の 2 次元の必要性にそれを適応させる方法がよくわかりません。

私は完全な解決策を求めているわけではありませんが、どんな方向性も間違いなく歓迎されます.

どうも、

0 投票する
1 に答える
1311 参照

java - Java で動作する CUDA コードを実行する最も簡単な方法は何ですか?

C で作成した CUDA コードがいくつかあり、正常に動作しているようです (C++ ではなく単純な古い C です)。私は Hadoop クラスターを実行していて、コードを統合したかったので、理想的には Java 内で実行することを検討しています (簡単に言えば、システムが複雑すぎるため)。

現在、C プログラムはログ ファイルを解析し、数千行を取得し、GPU で各行を並行して処理し、特定のエラー/トランザクションをリンク リストに保存し、それらをドライブに書き込みます。

これを行うための最良のアプローチは何ですか? JCUDA は C CUDA への完全なマッピングですか、それともまったく異なりますか? または、Java から C コードを呼び出して結果を共有することは理にかなっていますか (リンクされたリストにアクセスできるでしょうか)。