OpenCL カーネルで #include ステートメントを使用したいのですが、Apple の OpenCL コンパイラがカーネルをキャッシュしているようです。そのため、インクルード ファイルの内容を変更し、インクルードを実行するファイルを変更しない場合、プログラムは実行間で変更されません。
これを説明する例をコード化しました: http://github.com/enjalot/adventures_in_opencl/tree/master/experiments/inc/
コンパイルして実行すると、正常に動作するはずです。次に、inc.cl の構造体定義をコメントアウトしても、問題なく実行されます (または lvl2.cl の何かを変更します)。
Ubuntu で NVIDIA コンパイラを使用すると、期待どおりの動作が得られます。
では、clBuildProgram にカーネルを再コンパイルさせる方法はありますか?