2012-03-14 3 views
3

우선 openCL에 비교적 익숙하고 C++에서는 좀 녹슬 었음을 말하는 것으로 시작하고 싶습니다. 또한 이것은 내가 질문을하는 첫 번째 시간이므로 나를 교정하거나 게시물에서 향상시킬 수있는 것을 지적하십시오.Visual Studio 10에서 OpenCL을 사용하는 C++/CLI

CLR Form 응용 프로그램에서로드하여 사용하는 혼합 모드 어셈블리 dll (CLR Library Project)을 만드는 프로젝트를 만드는 데 관심이 있습니다. DLL은 openCL 정적 라이브러리 C++ 헤더 파일 (원시 코드)을 가져오고이를 관리되는 래퍼 클래스를 사용하여 CLR에 표시합니다.

그러나 나는 계속 지나치지 않는 치명적인 오류 C1001의 함정에 빠져들고 있습니다. 나는 오픈 CL 1.2 사양과 AMD APP SDK의 V2.6, 비주얼 스튜디오 2010 얼티밋을 사용하고 SDK가 제공하는 헤더/lib에 연결하고

cl_int enqueueNativeKernel(
void (CL_CALLBACK *userFptr)(void *), 

가리키는

1>C:\Program Files (x86)\AMD APP\include\cl\cl.hpp(1270): warning C4290: C++ exception  specification ignored except to indicate a function is not __declspec(nothrow) 
1>C:\Program Files (x86)\AMD APP\include\cl\cl.hpp(3708): fatal error C1001: An internal error has occurred in the compiler. 
1>(compiler file 'msc1.cpp', line 1420) 
1>To work around this problem, try simplifying or changing the program near the locations listed above. 
1>Please choose the Technical Support command on the Visual C++ 

. 이론적으로 관리되지 않는 코드와 관리되지 않는에서 교차은 문제가되지해야 buut가 /의 CLR 컴파일 이후 나는 무서운 C1001 오류와 항상 관리되지 않는 통과 어쨌든

#pragma once 
#pragma managed(push,off) 
#define __NO_STD_STRING 
#define __NO_STD_VECTOR 
#include <cl\cl.hpp> 

#pragma comment(lib,"OpenCL.lib") 
#pragma managed(pop) 

//rest of code 

및 컴파일러를 나타 내기 위해 #pragmas 포함 크래시 (CL.exe는 c1xx.dll 때문에)와 내가 스위치를 가지고 노는 것에 상관없이 나는 손실에 처해있다.

스위치는/CLR,/MDd, 최적화 사용 안 함, 예외 처리를위한 EHa와 같습니다. #defines 나 wrapping 코드를 없애거나 #pragma를 제거하지 않습니다.

프로젝트는 C API (CL \ cl.h) 대신 포함되어 잘 컴파일된다는 점에 유의해야하며 그 대신 사용할 수 있습니다.

누구든지이 문제가 발생 했습니까? 아니면 내가 끔찍한 일을하고있는 것일까? 그 문제에 대한 정보를 정말 고맙게 생각한다.

+1

당신이 시도해 볼 수있는 것은'/ clr'없이 컴파일 된 비 관리 코드에서 OpenCL을 사용하고 관리 코드와 링크시키는 것입니다. 가장 쉬운 방법은 관리되지 않는 코드가 포함 된 정적 라이브러리를 사용하는 것입니다. 프로젝트 종속성을 사용하여이를 관리되는 프로젝트로 가져옵니다. –

+0

가능성이 있습니다 : [Visual Studio 2010 베타 2의 대상 .NET 3.5 C++/CLI] (http://stackoverflow.com/questions/2106163/target-net-3-5-c-cli-in-visual-studio- 2010-beta-2) 특히 프로젝트의 모든 임시 파일을 지우고 .NET Framework의 올바른 버전을 대상으로하고 있는지 확인하십시오. 참조 : [C1001 - VS2010의 C++/CLI 프로젝트의 컴파일러 충돌 (대상 프레임 워크가 3.5 인 경우)] (https://connect.microsoft.com/VisualStudio/feedback/details/560606/c1001-compiler-crash-on-c- cli-project-in-vs2010-when-target-framework-is-3-5) –

+0

@CodyGray 나는 그것을 시도했지만 변화가 없었다. 그리고 나는 항상 net 4.0을 겨냥하고 있는지 확인했습니다. 문제는 쉽게 재현 될 수 있습니다. 제안을 주셔서 감사합니다 :) – phoenix

답변

2

내부 컴파일러 오류는 컴파일러가 인 것을 의미합니다.입니다. 코드에서 오류를 찾지 못했습니다. 컴파일러 자체 을 깨뜨렸다. 이는 컴파일러의 버그로 인한 것이지만 코드가 잘못 되었다면 버그를 유발하는 데 도움이 될 수 있습니다.

이 경우 "your code"는 코드인데 실제로는 코드가 아니지만 OpenCL의 코드이기 때문에 C++/CLI 컴파일러에서 컴파일 할 수없는 경우 일 수 있습니다.

+0

그건 사실 일 겁니다. 나는 비슷한 생각을하고있었습니다. 어쩌면 나는 누군가가 이전에 그것을 보았는지, 그리고 컴파일러가 충돌하게 만드는 C++ 헤더가 무엇인지 잘못 알고 있는지 궁금해 할 것입니다. 순수한 C API에는 아무런 문제가 없으므로 필자는 놓쳤거나 알지 못하는 전 처리기 지시문으로 해결할 수 있는지 궁금해했습니다. 헤더는 어쨌든 공개 소스이므로 누구나 볼 수 있습니다. 어쨌든 도움을 주셔서 감사합니다 :) Microsoft가 더 좋은 대답을 해줄 지 궁금합니다. – phoenix

관련 문제