インテル® SDK for OpenCL™™ を使用すると、カーネルのコンパイル中に以下のような「エラー: ACLMemUtils.cpp(510) でアサートに失敗しました」と表示されることがあります。
> aoc kernel.cl -rtl
aoc: OpenCL パーサーを実行しています....
aoc: OpenCL™ パーサーが正常に完了しました。
aoc: オブジェクトファイルをリンクしています...
aoc:コードの最適化と静的分析の実行...
エラー: ACLMemUtils.cpp(510) でアサートに失敗しました *******
このエラーは、オンチップ・メモリーのサイズが (2**n) 1 の場合、n >= 5 の場合に発生します。
説明のためにカーネルコードの例を次に示します。
#define n 5
#define サイズ (2**n) 1
__kernel void kernel(__global char * 制限入力) {
int mem[size];
for (int i=0; i<size-1; i )
mem[i]=mem[i 1];
mem[size-1] = 入力 i;
}
この問題を回避するには、
(2**n) 1 以外のサイズを使用する
または
ループ上で展開 #pragma を使用する
この問題は、インテル® Quartus® Prime ソフトウェア・バージョン 18.1 以降で修正されています。