1

しばらく前に、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 の邪魔になる内部のどこかでこの信号を使用していますか?

4

2 に答える 2

1

SIGXCPU は、プロセスごとの時間制限を超えたことを意味します。それを超えたら、超えたことになります。プロセスが停止しています。より高い制限を設定するには、ulimit を使用するか、管理者の助けを借りる必要があります。

于 2012-10-30T20:54:54.280 に答える
1

Mono は独自の目的で SIGXCPU を内部的に使用するため、無視すると (または他の理由で発生した場合)、問題が発生します。

于 2012-10-30T21:19:16.450 に答える