2014-02-24 2 views
1

나는 말한다 오픈 CL에 대한 책을 읽고있다클래스 구성원의 OpenCL 컨텍스트 범위는 무엇입니까?

플랫폼과 장치, clCreateContextFromType 및 오류 코드 대신 clCreateContext 반환 cl_contexts을 만드는 기능과는 달리. 즉, 구조에 대해 메모리를 할당하고 할당을 해제 할 필요가 없습니다. cl_context가 로컬 변수로 선언되면 동봉 된 함수가 종료되면 해당 메모리가 자동으로 해제됩니다.

컨텍스트를 클래스 멤버로 유지합니다.

class MyOpenCL 
{ 
    private: 
     cl_context context; 
}; 

그래서 클래스가 파괴 될 때까지 메모리에 남아 있습니까? 아니요 그렇다면이 대안은 무엇입니까? 참조 계산 메커니즘이 마음에 들지 않습니다.

+0

C++을 처음 사용하는 경우 일반 cl.h 메소드 대신 "cl.hpp"를 사용하십시오. 그들은 다른 C++ 클래스처럼 할당 해제됩니다. 이러한 문제에 신경 쓰지 않아도됩니다. – DarkZeros

+0

cl.hpp를 사용하려고했지만 내 환경에서 작동하지 않는 것 같습니다. AMD APP SDK를 사용하는 Win7 64 비트 OS에서 MinGW 32 비트 컴파일러. 문제는 일부 Visual C++ 헤더 파일입니다. –

+0

@Cool_Coder Boost.Compute (https://github.com/kylelutz/compute)를 확인하십시오. 그것은 OpenCL 용 OpenGL C 인터페이스 (예 :'cl.h')에만 의존하는 OpenCL 용 C++ API (IMHO)와 많은 상위 레벨 기능을 제공합니다. 이 유스 케이스의 경우, Boost.Compute'context' 객체는 클래스 멤버로서 저장 될 수 있고 그 메모리는 자동으로 처리 될 것이다. –

답변

3

예, cl_context 변수가 클래스 멤버 인 경우이 변수를 보유하는 데 사용 된 메모리는 클래스 인스턴스의 수명 동안 유지됩니다. 실제로 cl_context은 실제 컨텍스트 개체에 대한 포인터 일 뿐이므로 clReleaseContext()을 호출 할 때까지 cl_context 변수를 할당 해제 한 메모리가 언제 할당 해제되는지에 관계없이 컨텍스트 자체는 삭제되지 않습니다. 컨텍스트를 완료하면 clReleaseContext()으로 전화해야합니다 (예 : 클래스 소멸자 또는 기타 적절한 장소).

관련 문제