しばらく前に、OpenCL (学校の課題でした) を使用して、C#、OpenCL 用の Cloo、および OpenGL 出力用の OpenTK を使用して、簡単なボイド シミュレーションを作成しました。AMD CPU に OpenCL を実装した Windows7 と、友人の NVidia でテストしました。Linux(Ubuntu 12.04)で試してみました。amd app sdk と intel sdk をインストールしました。正常にコンパイルされました。リファレンス CPU の実装は、グラフィック出力で正常に動作しています。しかし、OpenCL バージョンを実行しようとすると、約 1 秒間実行され (OpenGL で有効な出力のように見える)、SIGXCPU によって強制終了されます。いくつかの既知の問題をグーグルで検索しようとしましたが、何も見つかりませんでした。そのため、そのシグナルをキャッチして無視しようとしましたが、試行するたびにプログラムがハングします。いくつかの異なるシグナル(SIGPIPEなど)をキャッチするようにモノを設定すると、正常に実行されます(openclのときにkillされることを除いて)。Mono では、FAQ に記載されているように Mono.UnixSignal を試してみました
Mono.Unix.Native.Stdlib.SetSignalAction ( Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Ignore);
次に、ハングしないが、どちらも役に立たないもの:
Mono.Unix.Native.Stdlib.SetSignalAction ( Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Error);
そしてさえ
ignore (0);
Mono.Unix.Native.Stdlib.signal(Mono.Unix.Native.Signum.SIGXCPU, new Mono.Unix.Native.SignalHandler (ignore));
と
static void ignore(int signal) {
}
メインから他のすべてを削除しても、そのシグナルに「触れた」後でもハングします。
もう1つの奇妙なこと:
Mono.Unix.Native.Stdlib.SetSignalAction ( Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Default);
Application.EnableVisualStyles(); の後のどこかで SIGXCPU を使用してアプリケーションを強制終了します。今回はOpenCLにも触れずに、直前に設定したとき。
Monoで見逃したものはありますか?OpenCl の邪魔になる内部のどこかでこの信号を使用していますか?