저는 MATLAB에서 3d 행렬의 for-loop를 가지고 있으며, 이것을 arrayfun
으로 바꾸고 싶습니다. 그러면 GPU에서 병렬로 실행될 것입니다.convolutions의 for 루프를 arrayfun으로 대체하는 방법은 무엇입니까?
또한 여기에 전체 루프를 제거하는 방법이 느낌,하지만 확실하지 여기에 :)
내 코드, 어떤 제안이 얼마나? 감사.
for i=1:size(obj.W, 3)
d(:, :, :, i) = convn(prev_delta(:, :, :, i), ...
flipped_W(:, :, i), 'full');
end
이 작업을 위해 GPU를 사용하는 것이 목적이라면, 'parfor'를 사용하여 GPU를 직접 구현할 수 있습니다. http://www.cac.cornell.edu/matlab/TechDocs/Examples/BestPracticesGPU.aspx –
parfor GPU가 아닌 CPU 코어 전반에 걸쳐 for 루프를 병렬 처리합니다. 임의의 경우 parfor로 테스트했는데 성능이 향상되지 않았습니다. CPU에 4 개의 코어가 있습니다. – Ran
'arrayfun' (그리고'gpuArray/arrayfun')은 배열의 각 요소 *에 함수를 적용합니다. 하나의 차원을 반복하면서 전체 배열에'convn '을 적용합니다. 'convn'을 스스로 구현하고 싶지 않다면'arrayfun'이 적용 가능한지 확신 할 수 없습니다. 또한, 나는 모른다. 그러나'gpuArray/convn'은 이미 스스로 병렬화 될 수있다. – horchler