問題タブ [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.
opencl - CPU の OpenCL で浮動小数点数、小数部分が表示されない
私はOpenCLでこのコードを持っています:
GPU で実行すると、変数 C の戻り値は 3.5 なので、問題ありません。しかし、CPU で実行すると、戻り値は 3.0 です。これは、任意の float 値で発生します。
しかし、このコードを実行すると:
そして、変数 A に 3.5 の値を渡しました。これは CPU と GPU で正常に実行されます。
なぜこれが起こるのですか?
opencl - バリアを使用すると CL_INVALID_WORK_GROUP_SIZE エラーが発生する
カーネルでバリアを使用すると (CLK_LOCAL_MEM_FENCE
またはに関係なく)、エラーが発生します。グローバル ワーク サイズは 512、ローカル ワーク サイズは 128、65536 個のアイテムを計算する必要があります。デバイスの最大ワーク グループ サイズは 1024 です。使用するディメンションは 1 つだけです。Java バインディングには JOCL を使用します。カーネルは非常に単純です。CLK_GLOBAL_MEM_FENCE
CL_INVALID_WORK_GROUP_SIZE
でカーネルを実行し、Intel(R) Xeon(R) CPU X5570 @ 2.93GHz
OpenCL 1.2 を使用できます。呼び出し方法は次のようになります
しかし、エラーは常に同じです:
私が間違っていることは何ですか?
floating-point - opencl カーネル float4 の問題
Fruchtermon と Reingold のレイアウト アルゴリズムの OpenCL 実装に取り組んでいます。既に実装した CPU バージョンと比較すると、ほとんど機能しています。repel
ただし、大きなグラフの場合、グラフ内の頂点のすべてのペア間の反発力を計算する関数にボトルネックがあることに気付きました。このボトルネックを軽減するために OpenCLfloat4
構造を使用することにしましたが、結果はまちまちです。
を使用できるようにコードを設定しましたがfloat4
、実際には (デバッグ用に) 1 つの位置のみを使用します。単一の位置 ( float_workers = 1
) のみを使用すると、関数は正しく動作します
ただし、設定するfloat_workers > 1
と、ますます奇妙な動作になります。
コードの何が問題なのかわかりません。カーネル全体が Java クラスの文字列に含まれているため、JOCL を使用してい gid *= " + String.valueOf(float_workers) + ";
ます。
行マーカー(1)から(2)は、正しい数のアイテム(float_workersに応じて1〜4アイテム)でfloat4を設定しています。このループは、GID をノードのペア (float_workers = 1 の場合) にマップするか、float_workers の方が高い場合は 2、3、または 4 つのノードのペアにマップします。ライン マーカー (2) から (3) は、実行されている実際の作業 (ノードをはじく量の計算) です。終了する行マーカー (3) は、結果を「変位」配列に設定しているため、後でノードの位置を更新できます。明らかに、カーネルをキューに入れるときにワーカーの数を正しく調整するので、それは問題ではないようです。
xPos[...]
それぞれが正確に 1 回しか設定できないと仮定するのは正しいですか? それがこれを壊すと私が考えることができる唯一のことです。他に何か見逃したことがありますか?
java - OpenCLでtxtファイルを読む方法
私はOpenCLが初めてです。OpenCL を介してテキスト ファイルを読み取る方法を知っている人はいますか? ファイルを読み取って、コンテンツをいくつかの配列に分割できるようにしたいからです。例として、txt ファイルは1010101 1 1010111で構成されています。配列 a として 1010101 を、配列 b として 1010111 を取得したいと考えています。ここでは、タブ/スペースが表示されています。これには「1」のタブ区切り文字があるため、区切り文字「\t1」でも分割する必要があります。
ここに私のメインコードがあります:
しかし、calcDistanceCs() と calcDistanceRs() の場合、どちらも txt ファイルを読み取る必要があります。次に、そのファイルから、次のような配列 (stateArray[]) を取得しました。
読む必要があるテキスト ファイルの例を次に示します。 00010000000000000000000000001000000000000000000000110000000001000000000010010111000000000000000000100000000000000001001000000000000000000000000000000001000000000000000000000000100000100000000000001000000000000001010000000000010000000000000000001000000000000001000000001000001100101000000000000010000000000010000000000000000000000000010000000000000110000000000001000000000000000000000100000000001001001110010000000000000000100000000000000000001000000000010000000010000000010000000000000000000010000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100 1 00010000000000000000000000001000000000000000000000010000000001000000000000010011000000000000000000100000000000000001001000000000000000000000000000000001000000000000000000000000100000100000000000001000000000000001010000000000010000000000000000001000000000000001000000001000001100001000000000000010000000000010000000000000000000000000010000000000000110000000000001000000000000000000000100000000001001001110000000000000000000100000000000000000001000000000010000000010000000010000000000000000000000000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100
上記の例から、次のように分割します: 1 番目の配列:2 番目の配列:00010000000000000000000000001000000000000000000000110000000001000000000010010111000000000000000000100000000000000001001000000000000000000000000000000001000000000000000000000000100000100000000000001000000000000001010000000000010000000000000000001000000000000001000000001000001100101000000000000010000000000010000000000000000000000000010000000000000110000000000001000000000000000000000100000000001001001110010000000000000000100000000000000000001000000000010000000010000000010000000000000000000010000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100000100101110000000000000000001000000000000000010010000000000000000000000000000000010000000000000000000000001000001000000000000010000000000000010100000000000100000000000000000010000000000000010000000010000011001010000000000000100000000000100000000000000000000000000100000000000001100000000000010000000000000000000001000000000010010011100100000000000000001000000000000000000010000000000100000000100000000100000000000000000000100000000001001100000010000000000000000000000000010000000000000001000000000001000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000100000000000000001000001100000000000000000000000000000000100000000000000000000100000000000000000000001000001001011100000000000000000010000000000000000100100000000000000000000000000000000100000000000000000000000010000010000000000000100000000000000101000000000001000000000000000000100000000000000100000000100000110010100000000000001000000000001000000000000000000000000001000000000000011000000000000100000000000000000000010000000000100100111001000000000000000010000000000000000000100000000001000000001000000001000000000000000000001000000000010011000000100000000000000000000000000100000000000000010000000000010000000000000000000001000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000001000000000000000010000011000000000000000000000000000000001000000000000000000001000000000000000000000010000100000000000001000000000000001010000000000010000000000000000001000000000000001000000001000001100101000000000000010000000000010000000000000000000000000010000000000000110000000000001000000000000000000000100000000001001001110010000000000000000100000000000000000001000000000010000000010000000010000000000000000000010000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100001000000000000010000000000000010100000000000100000000000000000010000000000000010000000010000011001010000000000000100000000000100000000000000000000000000100000000000001100000000000010000000000000000000001000000000010010011100100000000000000001000000000000000000010000000000100000000100000000100000000000000000000100000000001001100000010000000000000000000000000010000000000000001000000000001000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000100000000000000001000001100000000000000000000000000000000100000000000000000000100000000000000000000001001001000000000000000010000000000000000000100000000001000000001000000001000000000000000000001000000000010011000000100000000000000000000000000100000000000000010000000000010000000000000000000001000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000001000000000000000010000011000000000000000000000000000000001000000000000000000001000000000000000000000010010010000000000000000100000000000000000001000000000010000000010000000010000000000000000000010000000000100110000001000000000000000000000000001000000000000000100000000000100000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000100000110000000000000000000000000000000010000000000000000000010000000000000000000000100
各配列は 800 バイト (配列 0 ~ 799) で構成されます。セパレーター(区切り文字)、太字にします1 .