1
this question과 비슷하게 GPU에서 실행중인 cellfun 스레드간에 행렬을 공유하려고합니다.GPU의 cellfun 스레드간에 메모리를 공유 할 수 있습니까?
GPU 실행은 전역을 지원하지 않으므로 공유 행렬에 대한 참조로 핸들 클래스 객체 배열을 정의 할 수 있으므로 핸들이 각 cellfun 인스턴스로 전달됩니다.
classdef VarByRefContainer < handle
properties
val = [];
end
end
handle = VarByRefContainer;
handle.val = SharedMatrix;
cellfun(@myfun, {handle, handle, handle});
matlab에
는 이것을 받아 들일 것 같다,하지만 몇 가지 질문이 남아 :이 안전한가요- 은? 나는. 요소 [1,3,5]와 [2,4]에 값을 병렬로 할당하면 할당이 충돌 할 가능성이 있습니까?
- 이것이 효율적입니까? 나는. 핸들러 클래스가 호스트에 저장 될 수 있으며 GPU의 메모리를 참조하는 데 시간이 많이 소요될 수 있습니다. 나는 그것을 피하고 싶습니다.
사운드 좋은! 이것은 안전하고 효율적입니다. –
up-level 변수를 수정할 수 없기 때문에 안전합니다. 효율성 여부는 일반적으로 말하기 어렵습니다. 얼마나 많은 데이터를이 방식으로 액세스하는지에 달려 있습니다. – Edric
요점은 내가 상위 레벨 변수를 수정해야한다는 것입니다 ... 저는 방금 MATLAB에서 이것을 시도해 보았습니다. 그리고 그것은 작동하는 것 같습니다. 그것은 상위 레벨 변수를 변경하지 못하게합니다. GPU에서 아직 테스트되지 않은 CPU에서 테스트되었습니다. –