더 큰 할당 된 메모리에 매트릭스를 할당하면 matlab은 어떻게 든 '복사'하는 동안이를 복제하고 복사 할 매트릭스가 충분히 큰 경우 메모리 오버 플로우가 발생합니다. 이것은 샘플 코드입니다.
main_mat=zeros(500,500,2000);
n=500;
slice_matrix=zeros(500,500,n);
for k=1:4
parfor i=1:n
slice_matrix(:,:,i)=gather(gpuArray(rand(500,500)));
end
main_mat(:,:,1+(k-1)*n:1+(k-1)*n+n-1)=slice_matrix; %This is where the memory will likely overflow
end
단지 '분쇄'를 할 수있는 방법 slice_matrix
을 위에 main_mat
오버 헤드없이? 미리 감사드립니다.
편집하다:
main_mat
사전에 할당 할 때 오버 플로우가 발생했습니다 . 경우 main_mat
에 초기화된다 main_mat=zeros(500,500,1);
(작은 크기), 오버 플로우가 발생하지 않겠지 만 행렬은 그것으로 할당되기 전에 할당이 수행되지 않기 때문에 감속한다. 범위가 k
증가함에 따라 성능이 크게 저하됩니다 .
memory
기능 을 사용하고 있습니까? 작업 관리자? Matlab의 메모리 오류? 어떤 코드 라인에서 발생합니까?
main_mat(:,:,1+(k-1)*n:1+(k-1)*n+n-1)
메모리 오버플로 문제가 발생합니다. main_mat
미리 할당 할 때 확인되며 오버플로가 발생하지 않으면 오버플로가 발생합니다. Matlab은 '메모리 부족 오류'를 반환합니다.
h=h+slice_matrix(end)
이전을 삽입하고 main_mat(:,:,1+(k-1)*n:1+(k-1)*n+n-1)=slice_matrix;
0으로 h를 초기화 할 수 있습니까? 새로 추가 된이 줄이 이미 메모리 문제를 일으킬 것으로 의심됩니다.
parfor
. 또한parfor
데이터를 각 개별 작업자에게 복사하여 4 명의 작업자가 데이터를 RAM에 4 번 복제한다고 가정합니다.