GTX550ti 그래픽 카드에서 Nvidia의 OpenCL dev 소프트웨어를 사용하고 있는데 이상한 문제가 발생했습니다. (저는 OpenCL에 대한 신입생입니다).OpenCL 커널 영향의 데드 코드로 인해 Nvidia GTX550ti가 발생하는 이유는 무엇입니까?
내 커널 코드는 다음과 같다 : 사실
__kernel void kernel_name(...)
{
size_t d = get_local_id(0);
char abc[8];
...
}
의 char abc[8]
이 쓸모가 (죽은 코드) 내 경우에. 그러나 커널 코드에 char abc[8]
이 있으면 결과가 완전히 엉망이되어 커널 실행 시간이 훨씬 길어집니다 (2095712 ns). char abc[8]
을 주석 처리하면 결과가 정확 해지고 커널의 실행 시간이 더 짧아집니다 (697856 ns). 커널 컴파일러는 죽은 코드를 지우지 않을 것인가?
위의 내용은 반복 할 수있는 명백한 예입니다. 또한 한 프로그램이 완전히 다른 환경에서 다른 시간에 실행될 때 다른 결과를 얻는 낯선 경우가 발생합니다.
메모리 할당 또는 ..와 관련이 있습니까? 문제를 찾는 방법에 대해 누구나 저에게 조언을 해 줄 수 있습니까? 다음과 같은 방법으로
는 oclDeviceQuery 출력 정보가 나열됩니다 플랫폼 버전 = 오픈 CL 1.1CUDA 4.2.1,
SDK 개정 = 7027912
내 OS는 윈도우 XP입니다.
오늘은 2012-07-17이며이 문제를 해결했다고 생각합니다.
커널 소스 파일에 #include를 사용하지 마십시오.
커널 소스 파일에서 울트라 길이 라인 (예 : 커널 소스 파일의 일부 라인 데이터를 생성하는 프로그램 작성)을 사용하지 마십시오.
감사합니다. 사실, 내 코드는 Intel과 AMD OpenCL SDK를 사용하여 CPU에서 올바르게 실행됩니다. BTW, 나는 Abc [8]을 사용하지 않고 abs (8)을 사용하지 않는다. 오타가 없습니다. – jxj
당신은 다음과 같이 썼습니다. ""char abs [8] "을 주석 처리하면 결과가 정확 해집니다." 나는 그것을 바로 잡기 위해 그것을 편집했다. –
오, 정말. 미안 해요. 오타입니다. 내 실제 코드에서는 abc [8]입니다. 어쨌든 이것은 매우 이상합니다. – jxj