2012-10-30 1 views
1

얼마 전에 OpenCL 용 Cloo와 OpenGL for OpenGL 출력을 사용하여 OpenCL (학교 지정)을 사용하여 간단한 보이드 시뮬레이션을 작성했습니다. 필자는 Windows 7에서 OpenCL의 AMD CPU 구현과 친구의 NVidia에서이를 테스트했습니다. 이제 Linux (Ubuntu 12.04)에서 시도해 보았습니다. 나는 amd app sdk와 intel sdk를 설치했다. 그것은 괜찮아요, 참조 CPU를 구현 괜찮아요 그래픽 출력과 함께 일하고있다 컴파일 된. 하지만 OpenCL 버전을 실행하려고하면 약 1 초 동안 실행되고 (OpenGL에서 유효한 출력으로 보이는 것) SIGXCPU에 의해 종료됩니다. Google에 알려진 몇 가지 문제를 시도했지만 아무 것도 발견하지 못했습니다. 그래서 나는 그 신호를 잡아 내고 무시하려했지만, 시도 할 때마다 프로그램이 멈 춥니 다. 다른 신호 (예 : SIGPIPE)를 잡기 위해 모노를 설정하면 okcl (빼기 - opencl)을 실행합니다. 모노에서 , 내가Intel CPU OpenCL in Mono SIGXCPU (우분투)로 죽임

Mono.Unix.Native.Stdlib.SetSignalAction (Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Ignore); 

시도 자주 묻는 질문 에 끊지 않는 무언가를 언급 한 바와 같이 Mono.UnixSignal을 시도하지만, 도움이되지 않습니다 중 하나

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) { 
} 

메인에서 다른 모든 것을 제거해도 그 신호를 "만진"후에도 여전히 멈 춥니 다.

하나 더 이상한 것은 : 어딘가에 Application.EnableVisualStyles 후 SIGXCPU와

Mono.Unix.Native.Stdlib.SetSignalAction (Mono.Unix.Native.Signum.SIGXCPU, Mono.Unix.Native.SignalAction.Default); 

킬 응용 프로그램(); 이번에는 OpenCL을 건드리지도 않고 바로 전에 설정했습니다.

내가 모노에서 놓친 것이 있습니까? OpenCl의 한가운데서 내부적으로이 신호를 사용하고 있습니까?

답변

1

Mono는 내부적으로 SIGXCPU를 자체 용도로 사용하므로 무시하면 (또는 다른 이유로 인해 발생) 상황이 깨집니다.

+0

그건 내가 두려워했던거야. 그렇다면 좀 더 간단한 OpenCL을 시도해보아야한다. – jkavalik

1

SIGXCPU는 프로세스 당 제한 시간을 초과했음을 의미합니다. 초과하면 초과했습니다. 프로세스가 중단되었습니다. 높은 한계를 설정하려면 ulimit을 사용하거나 관리자의 도움을 받아야합니다.

+0

나는 이것을 Cuda 응용 프로그램에서 보았습니다. 때때로 Cuda 커널이 비디오 카드에서 실행할 수있는 최대 시간이있는 것으로 보입니다. 이 시간 제한을 초과하면 응용 프로그램이 종료됩니다. – asm

+0

@bmargulies "ulimit -a"를 시도하면 "cpu time (seconds, -t) unlimited"가 발생합니다. 모노 관련 설정이 있습니까? – jkavalik