2012-06-19 3 views
1

하나의 OpenCL 플랫폼에서 액세스 할 수 있도록 동일한 GPU가 있지만 동일한 공급 업체의 시스템을 사용한다고 가정합니다. 다음 단순화 오픈 CL 코드를 감안할 때 : 실행의 끝에서읽기/쓰기 단일 컨텍스트에서 여러 GPU의 OpenCL 메모리 버퍼

float* someRawData; 

cl_device_id gpu1 = clGetDeviceIDs(0,...); 
cl_device_id gpu2 = clGetDeviceIDs(1,...); 
cl_context ctx = clCreateContext(gpu1,gpu2,...); 

cl_command_queue queue1 = clCreateCommandQueue(ctx,gpu1,...); 
cl_command_queue queue2 = clCreateCommandQueue(ctx,gpu2,...); 

cl_mem gpuMem = clCreateBuffer(ctx, CL_MEM_READ_WRITE, ...); 
clEnqueueWriteBuffer(queue1,gpuMem,...,someRawData,...); 
clFinish(queue1); 

someRawData 메모리 모두 GPU에있을 것입니다 또는 그것은 단지 메모리 gpu1에있을 것입니다?

+1

호스트 데이터가 gpu1에만 복사 될 것이라고 확신합니다 ... 공간이 두 장치 모두에 할당되는지 확실하지 않습니다. 사양은 여기에별로 도움이되지 않습니다. 나는 두 개의 GPU가 작동하는 시스템을 가지고있다 - 나는 시간이 있다면 내일 촬영할 것이다. –

답변

1

clFinish()을 호출 한 후 데이터를 처리하지만 실제로는 대기열에서 참조하는 GPU에있을 가능성이 높습니다. 또한 이런 종류의 추상화는 명시적인 데이터 전송없이 queue2에 시작된 커널에서 gpuMem에 액세스 할 수있게합니다.