단일 CPU 계산과 병렬 계산을 계산 시간과 비교해야하는 다음 짧은 스크립트에서 문제를 파악할 수 없습니다. 전체 이미지에MATLAB에서 병렬화 관련 문제
링크 : LINK
코드는이 :
n = 700;
ranksSingle = zeros(1,n);
tic
for ind = 1:n
ranksSingle(ind) = rank(magic(ind));
end
toc
matlabpool local 4
tic
ranks = zeros(1,n);
parfor (ind = 1:n)
ranks(ind) = rank(magic(ind));
end
toc
isequal(ranksSingle, ranks)
matlabpool close
또한 matlabpool 2
그것을 시도했다. 프로세스 창에서 분명히 알 수 있듯이 병렬 계산 (빨간색으로 표시)을 실행하면 모든 코어가 100 % 사용 중입니다.
단일 CPU 계산 (파란색으로 표시)을 실행하면 이상하게도 4 코어가 이전보다 사용량이 많습니다. 나는 하나의 코어 만 올라갈 것으로 기대했을 것이다. 아마도 magic()
이나 rank
함수가 내장되어 있고, 여기에서 읽을 수 있듯이 인터넷을 검색했습니다 : http://www.walkingrandomly.com/?p=1894 그렇지 않습니다. 그래서 4 개의 코어가 완전히 바쁘지는 않지만, 여전히 모든 코어가 왜 올라가는지 궁금합니다.
둘째, 병렬화 된 버전의 계산 시간이 정말 궁금합니다. 싱글 코어에 작업을 분산시킴으로써 오버 헤드가 발생한다는 것을 알지만, 결국 그렇게 많은 정보가 없어야합니다. (
아마도 누구나 그것에 대해 뭔가를 말할 수 있습니다. 두 번째 질문은 컴퓨터에있는 물리적 코어 수에 항상 작업자 크기를 설정하라는 명령이 있다면 (또한 Hyper (하이퍼 링크)를 사용하는 것입니다. 즉, 추가 혜택의 경우 스레딩?)
감사합니다 많이!
수정.예를 들어'rank'는 다중 스레드 된'svd'를 사용합니다. –
감사합니다. 내일 좀 더 값 비싼 작업을 시도해 보겠습니다. :) – tim
@Jonas :'matlabpool open'은 저에게 "로컬 설정을 사용하여 matlabpool을 시작합니다 ... 2 개의 실험실에 연결되었습니다."라고합니다. 위의 스크린 샷에서 분명히 볼 수 있듯이 4 코어가 있으므로 예상 결과가 아닙니다. 편집 : 어떻게 든'matlabpool (4)'를 시작할 수 없습니다. 최소 4 명의 작업자를 요청했지만 스케줄러의 ClusterSize 속성은 현재 최대 2 명의 작업자를 허용하도록 설정되었습니다. 이보다 더 많은 작업자에 대해 병렬 작업을 실행하려면 구성 관리자 [...]를 사용하여 '로컬'구성에서 ClusterSize 속성 설정을 늘리십시오. – tim