OpenCL API を介して実行中の OpenCL カーネルを強制終了する方法はありますか? 仕様には何も見つかりませんでした。
私が思いつく唯一の解決策は、1) ホストがカーネルを停止したいときに書き込むカーネル内のフラグを定期的にチェックするか、2) 別のプロセスでカーネルを実行してプロセス全体を強制終了することです。どちらも非常にエレガントなソリューションではないと思います。また、#1 が確実に機能するかどうかもわかりません。
OpenCL API を介して実行中の OpenCL カーネルを強制終了する方法はありますか? 仕様には何も見つかりませんでした。
私が思いつく唯一の解決策は、1) ホストがカーネルを停止したいときに書き込むカーネル内のフラグを定期的にチェックするか、2) 別のプロセスでカーネルを実行してプロセス全体を強制終了することです。どちらも非常にエレガントなソリューションではないと思います。また、#1 が確実に機能するかどうかもわかりません。
いいえ、OpenCL API では、実行中のカーネルを中断することはできません。一部のシステムでは、数秒以上実行されているカーネルがドライバーによって強制終了されます。
参考文献 Windows の場合: WDDM による GPU のタイムアウト検出と回復、および Linux+NVidia の場合: CUDA と X の使用。
標準には、オプション 1 が機能することを保証するものは何もありません。ほぼ確実にそうはなりません。オプション 2 は機能しますが、他のプロセスと通信する必要があります。
コメントで提案されているように、カーネルを小さなカーネルに分割することがおそらく最良のオプションです。