問題タブ [jocl]

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 投票する
0 に答える
273 参照

java - joclニューラルネットワーク

私はJavaでニューラルネットワークを作成しましたが、パフォーマンスの問題のためにGPUで計算を行うのは良い考えのように見えました。私が抱えている問題は、遅すぎるということです...私はそうするためにjoclを使用しました。ここでのカーネルがコードであるかどうかはわかりません。

重みを__constantにすると、プログラムがさらに遅くなります(重み配列が大きすぎるため、グローバルメモリとローカルメモリの間でデータを永続的に切り替える必要があるかもしれません)

ほとんどの時間はこの行にかかるようです:

tmp + = gewichte [pos + i] * input [i];

1つのカーネル呼び出しは1つのニューラルネットワークレイヤーの計算を表し、レイヤーのすべてのニューロンに対して1つのシェーダーが実行する必要があります(tanh(weightsOnThisNeuron + OutputFromAllNeuronsOfPreviousLayer)。

私はすべてのカーネルを準備して保存し、実行したい場合に何度も準備する必要がないようにします。

GPUとCPUの間の唯一のIOは、出力を取得するときの最初と最後です。

ネットワークを初期化してカーネルを実行するコードは次のとおりです。

それがメインです:

誰かが私がこれをより速くすることができる方法について何か考えがありますか?

出力は次のとおりです。

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

java - 予期しない結果をもたらすOpenCLスクリプト

この単純なコードブロックがありOpenCL、予期しない結果が得られています。パラメータimageはfloatの配列でありvalue、-255から+255までの数値です。Javaを使用して、JSliderを使用してを変更しvalueます。デフォルト値は0で、スライダーを0より大きく動かすと画像が黒くなります。0より小さく動かすと画像が白くなりますが、これは発生しないはずです。これは、各ピクセルを個別にチェックし、そのピクセルを調整する必要があります。なんらかの理由ではないようです。

このコードブロックは、画像のしきい値を変更する必要があります。赤、緑、青がしきい値よりも大きいピクセルはどれですか。それ以外の場合は黒である必要があります。

if/else真ん中のステートメントをこれに置き換えると:

画像の明るさを調整するという操作で、探している結果が得られます。

私はOpenCL間違って使用していますか?私が理解していることkernelから、リターンがヒットするまで呼び出されます。これを行うためにJavaでJOCLを使用しています。これを呼び出すために使用しているコードは、次のとおりです。

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

java - JOCL/OPENCLによる強度和計算の高速化

こんにちは、JOCL (opencl) は初めてです。画像ごとの強度の合計を取るために、このコードを書きました。カーネルは、相互に配置されたすべての画像のすべてのピクセルの 1D 配列を取ります。画像は 300x300 であるため、画像あたり 90000 ピクセルです。現時点では、これを順番に行う場合よりも遅くなります。

私のコード

回答の提案の後、CPU を介した並列コードは、順次コードとほぼ同じ速さです。他にできる改善点はありますか?

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

java - pow の呼び出しがあいまいです

JOCl (java バージョンの opencl) を使用しているときに、このエラーに遭遇しました。

私のカーネルコード:

xとyのデータ型が原因だと思いました。しかし、単純な pow(1,1) を実行すると、同じエラーが発生します。

どうすればこれを修正できますか?

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

java - JOCLのカーネル引数としてintを渡します

だから私はこのように見えるカーネルを持っています:

バッファを作成して配列(Javaではバイト配列)を渡す方法を理解しました。

そしてそれを設定します:

私が理解できないのは、数値パラメータを設定する方法です...これはJavaの単純なintですか?

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

java - JOCLでのデータ転送と実行のタイミング

JOCL ライブラリ (JOGAMP による) を使用していますが、ホストからデバイスへのデータ転送にかかった時間、カーネルにかかった時間、および結果を取得するのにかかった時間を別々に測定できるかどうか疑問に思っていました。

現在、次のようにカーネルを呼び出しています。

queue.putReadBuffer(...).put1DKernel(...).putWriteBuffer(...)

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

java - Jocl とデバイスの分裂

編集:問題は解決しました!rzymek の回答は役に立ちました。

質問: JOCL の場合、デバイスの分裂を伴う opencl の計算から CPU の一部のコアを除外するにはどうすればよいですか? (cl_device_partition_property の Java ポートが 0.1.9 バージョンで破損しているようです)

編集:私はこれを見つけました:

しかし、java/jocl はこれを受け入れません:

エラーは次のとおりです。

null の初期化を試してから、変数独自のメソッドを使用してプロパティを設定しました。

編集:今それは与える

エラー。

IT は unsigned int (cl_device_partition_property ではない) である必要がありますが、Java にはありません。

コンストラクターでの新しい試み:

エラー:

別の試み:

エラー:

これもうまくいきませんでした:

編集:問題が解決しました!ありがとう。CPUを今すぐパーティション分割できます:

ここに画像の説明を入力

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

java - Java アプレット: jocl 操作は java3d を停止します

Jocl(opencl wrapper) カーネルを実行すると、java3d の出力が無効になります。opencl が終了すると、java3d は引き続き動作します。

Opencl(jocl) と opengl(java3d) を連携させるにはどうすればよいですか? 「そのopencl時間」を通知し、終了すると「現在のopengl時間」を通知するある種のコマンドが必要です。

opencl が動作していると、どういうわけか java3D Jpanel がフリーズして灰色になります。

私はいくつかのトレースを行い、java3D が opencl(jocl) に嫌がらせをしていることがわかりました。jmonkey エンジン 3.0 はそれを行いません。別の試行では、jmonkey が同じことを行っていることが示されました。突然、opencl によるすべてのパーティクル位置の更新が停止し、すべての位置が 0,0,0 になります。

デバイスごとに一意のコンテキスト、プログラム、ID などを使用します。

どのようにエラーが見えるか: 銀河がスムーズにレンダリングされている間、突然すべての粒子が私が作成していない平面に投影され、平面が線に投影されてから数秒後に、その線がスポットに投影されます。これらはすべて、バッファー x[] y[] z[] がすべての要素に対してゼロになり始めるためです。

編集:GPUの動作周波数が低いと、エラーの頻度が低くなります。これは、ローカルで計算を実行して高速に動作させるため、ファーマークよりも GPU を強く押している可能性がありますか? それとも、これは jocl/jmonkey/java3d 間のタイミング/アクセス優先度の問題ですか? furmark を含む他のすべてのプログラムは 1225MHz (hd7870 hawk) で安定していますが、これはおそらく 1000MHz (hd7870 の AMD デフォルト) でのみより安定しているか、ガベージ コレクション障害によってバッファが破壊されるため不安定に見えます ??

Aparapi (java 用の opencl ラッパー) は問題なく、1200MHz で正常に動作しました。「ドライバーが機能を停止し、回復しました」というエラーが発生しました。Catalyst 13.3 ベータ版。Jocl 1.5.1 と疲れた 1.5.2。Catalyst 13.4 whql も同じことを行います。

System.gc(); を置く カーネルの繰り返しループがすぐに間違ったことをする直前に、私が見逃したガベージコレクションがあるはずです

一部のトレース: clCreateBuffer メソッドにガベージ コレクションの問題がある

編集:問題を解決しました。CL.CL_MEM_USE_HOST_PTR プロパティが使用されている場合、メイン スレッドで clCreateBuffer によって作成されたバッファーは、サブスレッドのガベージ (収集される) のように見えます。CL.CL_MEM_COPY_HOST_PTR は、%1-%2 のパフォーマンス低下と引き換えに問題を解決します

ありがとう。