2012-03-23 9 views
2

私は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の

おかげ

+0

それが割り当てられた後、あなたが値をどのように行うのですか?どのワークグループのサイズを使用していますか?どの特定のビデオカードを試してみましたか? – mfa

答えて

0

は、私が以前に報告されたこのバグに似ているようだ:だから私はそれがコンパイラのバグだ怖い、あなたがあまりありできませんhttp://devgurus.amd.com/thread/158479

あなたの地元の障壁を使用し、AMDが自分のものを修正するまで待ってください。

(リンクトピックで提案されているように、ローカルmem_fenceが実際にこのエラーをするから、コンパイラを防ぐのに十分でなければならないことに注意してください。)

関連する問題