2017-12-03 4 views
0

내부 스크립팅 언어 호출 인 VEX (vector expression의 약어)를 사용하여 OpenCL 커널 코드를 SideFX Houdini로 이식하려고합니다.OpenCL get_global_id

그러나 임은 색인이하는 일과 작동 방식을 이해하는 데 문제가 있습니다. get_global_id()은 주어진 작업 항목 (어딘가에 읽음)에 대한 작업으로 색인을 반환했지만 실제로는 그것이 무엇인지 정확하게 이해하지 못한다는 것을 알고 있습니다. (아마도 컴퓨터 코어와 관련이있을 것입니다.)

입력을 허용하는 것은 x와 y가 500 픽셀이고, 인 모든 픽셀에 몇 가지 특성이 있다고 가정하는 2D 그리드입니다 (커널로 전달한 것). 인수는 name_in이고, name_out은 동일한 속성 값을 업데이트해야 함), 이러한 인덱스 작업으로 무엇을하고 있습니까?

정확히 어떻게 작동합니까? 예를 들어 c에서 어떻게 똑같이 할 수 있습니까? 많은

사전에 알레산드로 감사합니다

__kernel void rd_compute(__global float4 *a_in, __global float4 *b_in, __global float4 *c_in, __global float4 *d_in, __global float4 *e_in, __global float4 *f_in, __global float4 *g_in, __global float4 *h_in, __global float4 *i_in, __global float4 *a_out, __global float4 *b_out, __global float4 *c_out, __global float4 *d_out, __global float4 *e_out, __global float4 *f_out, __global float4 *g_out, __global float4 *h_out, __global float4 *i_out) 
{ 
    const int index_x = get_global_id(0); 
    const int index_y = get_global_id(1); 
    const int index_z = get_global_id(2); 
    const int X = get_global_size(0); 
    const int Y = get_global_size(1); 
    const int Z = get_global_size(2); 
    const int index_here = X*(Y*index_z + index_y) + index_x; 

답변

2

큰 입문 튜토리얼의 많은 연구하십시오. 당신은 루프를 사용하여 시리얼 코드에서

(예를 들어, for (int i=0; i<10; i++)는) 다음 int i = get_global_id(0) 그래서 당신은 현재 작업 항목의 인덱스를 얻을 수 있음을 대체합니다. 런타임은 모든 작업 항목이 실행되도록합니다. 병렬, 직렬 또는 그룹 (일부 조합) 일 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 답장을 보내 주셔서 감사합니다. –