OpenCL™ カーネルでハードウェアの生成に失敗した場合、推定リソースが少ないにもかかわらず、このエラーはグローバルメモリーにアクセスするループの過剰なアンアリングが原因である可能性があります。
グローバル・メモリーにアクセスするループは、BSP のメモリー・インターフェイスよりも読み取りまたは書き込みがグローバルメモリーの方が広い場合に、アンキャスを使用しないでください。 これにより、競合、配線輻輳が発生し、コンパイルエラーが発生する可能性があります。
外部メモリー・インターフェイスの幅は、OpenCL™ BSP の board_spec.xml ファイルにあります。 以下は、Arria 10 GX 開発キット BSP のboard_spec.xml の例です。(a10_ref)
」width=「512」maxburst=「16」 アドレス=「0x00000000」サイズ=「0x80000000」レイテンシー=「240」/>
< / global_mem>
ご覧のように、この BSP の外部メモリー・インターフェイスの幅は 512 ビットです。(width="512")したがって、ループがグローバルな 32 ビット整数にアクセスする場合、ループは 16 以上アンアリングしないでください。(512 / 32 = 16)
元のループ数が 16 のマルチカウントでない場合:
1. 新しいループ数を 16 のマルチプルに切り上げる。
2. ループ内のオンチップメモリーを、新しいループ数に対応できるほど大きくします。
3. 条件を使用して、新しいループカウントが元のループカウントを超えた場合の読み取りまたは書き込みを防止します