2013-08-05 3 views
1

또는 Parfor 루프를 gpuArray 작업으로 변환하는 방법은 무엇입니까?Matlab - CPU 작업자 또는 GPU 프로세서에서 매우 유사한 작업

문제 : parfor를 통해 여러 CPU (작업자)에게 배포되는 대형 데이터 행렬에 대한 열 단위 작업.

data = 1000 x 200 matrix 
[nrows, ncols] = size(data) 
parfor ix = 1:ncols 
    workerData = data(:,ix); 
    colwiseResult(ix) = function(workerData,params); 
end 

어떻게 GPU를 효율적으로 활용할 수 있습니까? 문제가 1000x1000 행렬 (& 이상)

dataGPU = gpuArray(data); 

까지 확장해야하지만, 특히 이후는 GPU에 열 현명한 작업을 수행하는 쉬운 방법을 찾을 수 없습니다. arrayfun이나 bsxfun과 같은 함수는 관심이없는 요소별로 작동합니다. 이들은 병렬 작업이므로 GPU에서 여러 프로세서를 사용하는 것이 이상적 일 수 있습니다 (&은 parfor 등을 사용하지 마십시오)

(실제로는 행렬 대각 화를 수행하는 우도 계산을 수행하고 있으며, 근로자 내부의 for 루프를 사용하여 열 벡터의 각 데이터 요소에 대해 누적 적으로 지수가 & 개임). 이 모든 작업에는 GPU가 오버로드되어 있음을 확인했습니다.)

답변

0

이 자습서를 보았습니까?

http://www.mathworks.ch/videos/introduction-to-gpu-computing-with-matlab-68770.html

모든 GPU를 지원하고 있기 때문에 당신이 당신의 GPU를 사용할 수 있는지 여부를 먼저 확인하시기 바랍니다. 그 후 당신이 당신의 GPU에 변수를 전달하거나이처럼 parfor 루프로의 GPU를 포함 할 수 있습니다 :

parfor ix = 1:10 
gd=gpuDevice; 
end 

를 하나 개의 GPU를 사용하여 하루의 끝에서하는 것은 큰 장점이 아니다. 자세한 정보는 워크 스테이션에 대한 자세한 정보를 제공하십시오.

+0

감사합니다. 추가 정보를 제공해 드리겠습니다. –

+0

와우, 이것은 내가 세부적인 세부 사항으로 제기 한 매우 구체적인 질문에 대한 대답이 아닙니다. 물론 Matlab Intros, help 등을 살펴 보았습니다. gpuArray 컨텍스트에서 arrayfun, bsxfun의 사용법에 대해 읽었을 때도 제가 질문에 제공 한 정보에서도 분명해야합니다. 어쨌든, 귀하의 시도에 감사드립니다. 2 Teslas c2050은 워크 스테이션입니다. 나는 일상적으로 병렬 계산을 수행하는 ~ 144 코어의 실행 클러스터를 가지고있다. 이 질문은 유스 케이스에 대해 매우 구체적이며, GPU가 적합한 지 아닌지 전반적인 논의는 NOT *입니다. – nahsivar

관련 문제