私はAMDビデオカードでOpenCLを使用しており、Linuxには最新のドライバを持っています。私のような何か行うとOpenCLを使用したAMDハードウェアで間違った答え
は:
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
を私が間違った結果を取得します。この後にbarrier(CLK_LOCAL_MEM_FENCE);
を使用すると、正しい結果が得られます。
どうしてですか?
Ps1:LinuxまたはWindowsの両方でNVIDIAビデオカードを使用すると、障壁を使用せずに正しい答えが得られます。私は128ワークグループサイズを使用してい
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
int b = get_group_id(0) > 0 ? c + a : a;
output[b + id] = input[ d + id ]; //Last kernel line
:
ブロックは、(*入力、__global *出力を__global使用)されています。私は、HD 6790で試してみた - linuxの
おかげ
それが割り当てられた後、あなたが値をどのように行うのですか?どのワークグループのサイズを使用していますか?どの特定のビデオカードを試してみましたか? – mfa