5
วิธีการ 'คัดลอก' เมทริกซ์โดยไม่ต้องสร้างเมทริกซ์ชั่วคราวในหน่วยความจำที่ทำให้หน่วยความจำล้น
โดยการกำหนดเมทริกซ์ให้กับหน่วยความจำที่จัดสรรให้มากขึ้น 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เพิ่มขึ้น