OpenCL 1.1、Cloo0.9.1.0を使用。
特定のCLモジュールの場合、次の行でクラッシュします。
program.Build(null, null, null, IntPtr.Zero);
Visual Studio 2010は私にこれを教えてくれます:
タイプ'System.AccessViolationException'の未処理の例外がCloo.dllで発生しました
追加情報:保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。
エラーを特定のコード行まで追跡しました。
int offset = 1000000 * (input == 0); // This is the culprit!
const sampler_t smp = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST;
int4 pixel = read_imagei(image, smp, (int2)(offset + x, y));
分岐を避けるために上記のトリックを使用しています。これは、上記がコンパイル時にアクセス違反を引き起こす1つの状況を除いてすべて完全に機能します。条件付き乗算を削除すると、機能します。例えば
int offset = 1000000;
// -or-
int offset = (input != 0 ? 0 : 1000000);
ここでコンパイラのバグに直面していますか?このエラーを回避するにはどうすればよいですか?
グラフィックカード/ドライバに関する詳細:
ドライバーパッケージバージョン:8.85.7.2-110901a1-125827C-Fujitsu Technology
ソリューションプロバイダー:ATI Technologies Inc. 2Dドライバーバージョン:8.01.01.1152