0

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

4

1 に答える 1

0

これはコンパイラのバグです。うまくいけば、それはいつか修正されるでしょう。今のところ、その特定の最適化のトリックは避けます。

于 2012-08-13T10:34:17.693 に答える