몇 가지 기본 구성 (컨텍스트, 명령 대기열 등)을 제공하는 라이브러리 (Windows 시스템의 공유 라이브러리)를 만들고 싶습니다. 문제는 응용 프로그램이 종료하려고 할 때 액세스 위반이 발생한다는 것입니다. 내 첫 번째 추측은 내 래퍼 구현에 문제가 될 수 있지만 공식 C++ 래퍼 (cl.hpp
)를 사용하는 테스트 사례를 작성한 것입니다. 공유 라이브러리 applcation 측OpenCL - C++ 래퍼 - 동적 라이브러리의 컨텍스트 초기화가 액세스 위반으로 연결됩니다.
int main(int argc, char** argv) {
cpu();
}
그래서 아주 간단 물건에
boost::optional<cl::Context> cpuContext;
void cpu() {
cpuContext = cl::Context(CL_DEVICE_TYPE_CPU);
}
에서
...
이흥미로운 것은이 만에 발생되는 인텔 런타임 (인텔 GPU는 테스트 할 수 없음)이 제공하는 런타임은 지원되지 않습니다. 엔비디아. 또한 응용 프로그램에서 cpuContext
변수가 선언 된 경우에도 발생하지 않습니다.
내 질문은 :
이것은 인텔 런타임의 버그입니까, 아니면 뭔가를 놓치고 정의되지 않은 동작이 발생 했습니까?
cl.hpp 내에서 실제 OpenCL API 호출을 중단하고 이들이 합법적인지 (생성 또는 보관할 때마다 릴리스 됨) 볼 수 있습니다. – Dithermaster