2016-11-22 1 views
0

CL 프로그램 내의 모든 커널/기능에 대한 읽기 액세스 권한이있는 변수를 갖고 싶습니다. 이를 위해 File의 맨 위에 변수를 만들고 __global 접두사를 붙입니다.OpenCL 쓰기 __ 전역 변수

typedef struct{ 
    /* whatever */ 
} GlobalParameters; 

__global GlobalParameters params; 

이제 호스트 코드에서 해당 구조체 내의 값을 어떻게 설정할 수 있습니까? 그게 가능한가, 아니면 내가 어떻게 편집 할 수 있을까? 아니면 필요할 때마다 매개 변수로 커널에 전달해야합니까?

답변

0

프로그램 범위 변수는 상수이기 때문에 초기화해야합니다.

typedef struct{ 
    float whatever; 
} GlobalParameters; 

__constant GlobalParameters params=(GlobalParameters){3.14f}; 

다음 어디서든 사용할 수 있습니다 :

그래서,이처럼 작동합니다. 오픈 CL-컴파일 시간이 그것에 대한 확인의 경우, 당신은 호스트 측 일정한 버퍼 preaparing 후 문자열 교체와 함께 변경할 수 있습니다이이 변화 당 분 동안 사용하는 경우

typedef struct{ 
    float whatever; 
} GlobalParameters; 

__constant GlobalParameters params=(GlobalParameters){##replace_0##}; 

을, 당신은 그것을 다시 컴파일 할 수 있습니다 장치 - 커널 컴파일 전에 새로운 문자열 교체 사용. 변경되지 않는 세트가있는 경우, 다른 커널 프로그램에 대해 N 번 컴파일하고 다른 컨텍스트를 사용하여 N 개 전환 할 수 있습니다.