4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AMD OpenCL コンパイラにはバグがある(Version 2348.3, 2442.8)

Last updated at Posted at 2017-09-15

AMD OpenCL でとあるカーネルをコンパイルしようとしたところ

LLVM ERROR: cannot lower memory intrinsic in address space 1

とだけ出力してコンパイラがエラーを出すという現象に会いました.
(Linux(amdgpu-pro) ver 2348.3 および Windows ドライバ 2442.8 で確認しました. 2017/09/15 での概ね最新 AMD GPU ドライバ)

いろいろカーネルコードを取捨選択してデバッグしてみたところ, global memory から大きめの構造体をローカル変数領域にコピーすることで発生することがわかりました.

以下のような感じです.

typedef struct {
  float large_data[4096];
} MyStruct;

__kernel void main(__global MyStruct *s)
{
  MyStruct local_s = *s;
}

で, たぶん原因はこれっぽそうです.

Partially fix memcpy / memset / memmove lowering in SelectionDAG construction if address space != 0.
https://reviews.llvm.org/D7241

x86 でも大きめの構造体をローカル変数領域(スタック領域)に持つとダメというのは昔ありましたが, なにかしらもうちょっと原因がわかるようにレポートしてほしいところ.

AMD OpenCL コンパイラは, フロントエンド周りはしばらくアップデートされていないのかな?

回避策

  • 構造体の大きさを減らすように設計しなおす.
  • 自前で struct をコピーする関数を用意する.
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?