คำถามติดแท็ก optimization

การปรับให้เหมาะสมคือการปรับปรุงวิธีหรือการออกแบบ ในการเขียนโปรแกรมการปรับให้เหมาะสมมักจะอยู่ในรูปแบบของการเพิ่มความเร็วของอัลกอริทึมหรือลดทรัพยากรที่ต้องการ ความหมายของการเพิ่มประสิทธิภาพก็คืออัลกอริธึมการเพิ่มประสิทธิภาพเชิงตัวเลขที่ใช้ในการเรียนรู้ของเครื่อง

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เพิ่มขึ้น

4
เหตุใด C คอมไพเลอร์จึงปรับสวิตช์ให้เหมาะสมและหากต่างกัน
ฉันกำลังทำงานในโครงการส่วนบุคคลเมื่อเร็ว ๆ นี้เมื่อฉันเจอปัญหาแปลก ๆ ในวงที่แน่นมากฉันมีจำนวนเต็มที่มีค่าระหว่าง 0 ถึง 15 ฉันต้องได้รับ -1 สำหรับค่า 0, 1, 8, และ 9 และ 1 สำหรับค่า 4, 5, 12, และ 13 ฉันหันไปใช้ godbolt เพื่อตรวจสอบตัวเลือกสองสามตัวและรู้สึกประหลาดใจที่ดูเหมือนว่าคอมไพเลอร์ไม่สามารถปรับคำสั่งสวิตช์ให้เหมาะสมเช่นเดียวกับโซ่ถ้า ลิงก์อยู่ที่นี่: https://godbolt.org/z/WYVBFl รหัสคือ: const int lookup[16] = {-1, -1, 0, 0, 1, 1, 0, 0, -1, -1, 0, 0, 1, 1, 0, 0}; …

3
รายการ :: empty () พฤติกรรมแบบมัลติเธรด?
ฉันมีรายการที่ฉันต้องการให้เธรดต่าง ๆ หยิบองค์ประกอบ เพื่อหลีกเลี่ยงการล็อก mutex ที่ป้องกันรายการเมื่อว่างฉันempty()จะตรวจสอบก่อนล็อก ไม่เป็นไรหากการโทรไปlist::empty()ไม่ถูกต้อง 100% ของเวลา ฉันเพียงต้องการหลีกเลี่ยงการหยุดทำงานหรือรบกวนการทำงานพร้อมกันlist::push()และการlist::pop()โทร ฉันปลอดภัยempty()ไหมที่จะสมมติว่า VC ++ และ Gnu GCC บางครั้งจะผิดพลาดและไม่มีอะไรเลวร้ายไปกว่านี้ if(list.empty() == false){ // unprotected by mutex, okay if incorrect sometimes mutex.lock(); if(list.empty() == false){ // check again while locked to be certain element = list.back(); list.pop_back(); } mutex.unlock(); }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.