짧은 버전 : CL_PLATFORM_VENDOR
과 같은 문자열의 크기를 쿼리하는 공식/올바른 방법이 있습니까?clGetPlatformInfo (및 friends)를 사용하여 문자열 길이를 쿼리하는 방법은 무엇입니까?
긴 버전 : 는 오픈 CL의 기능을 보면은 clGetPlatformInfo처럼 나는 결과에 할당하는 방법을 많은 공간을 발견하고 싶다. 기능이 서명이 :
cl_int clGetPlatformInfo(cl_platform_id platform,
cl_platform_info param_name,
size_t param_value_size,
void *param_value,
size_t *param_value_size_ret)
는 문서 말 :
param_value_size
Specifies the size in bytes of memory pointed to by
param_value. This size in bytes must be greater
than or equal to size of return type specified in the
table below.
모든 반환 형식의이 char[]
으로 나열됩니다. 내가 기대했던대로
size_t size = 0;
l_success = clGetPlatformInfo(platform_id,
CL_PLATFORM_VENDOR, 0, NULL, &size);
if(l_success != CL_SUCCESS)
{
printf("Failed getting vendor name size.\n");
return -1;
}
printf("l_success = %d, size = %d\n", l_success, size);
char* vendor = NULL;
vendor = malloc(size);
if(vendor)
{
l_success = clGetPlatformInfo(platform_id,
CL_PLATFORM_VENDOR, size, vendor, &size);
if(l_success != CL_SUCCESS)
{
printf("Failed getting vendor name.\n");
return -1;
}
printf("Vendor name is '%s', length is %d\n", vendor, strlen(vendor));
} else {
printf("malloc failed.\n");
return -1;
}
그것은 행동
: 나는 param_value_size_ret
에서 올바른 크기의 수익을 얻을 수 있었으면, 그래서 내가 param_value_size
및 param_value
에 대한 NULL
에 대한 0
을 통과 곳,처럼 전화 예약 얼마나 많은 공간이 알고 싶어 , "NVIDIA Corporation"(null terminator가 포함 된 크기) 및 strlen
반환 값은 19의 크기를 반환합니다.이 값은 매개 변수 크기를 쿼리하는 "올바른"방법입니까 아니면 내 공급 업체의 구현에 대해 운이 좋았습니까? 이 관용구를 본 사람이 벤더에서 실패한 적이 있습니까?
편집 : 나를 트립되는 비트가 이것이다, "바이트이 크기보다 크거나 반환 형식의 크기와 동일해야합니다", 내가 0
및 NULL
호출이 있기 때문에 실패를 통과 할 때처럼 보인다 이는 반환 된 값의 크기보다 크거나 같지 않습니다. 나는 왜 그들이 "반환 유형"을 말하는지 잘 모르겠다.
위대한 답변! 매우 감사. Khronos 예제를 그리는 것이 도움이된다고 생각합니다. –