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

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

3
สิ่งที่โปรแกรมเมอร์ทุกคนควรรู้เกี่ยวกับหน่วยความจำ
ฉันสงสัยว่า Ulrich Drepper เป็นเท่าใดโปรแกรมเมอร์ทุกคนควรทราบเกี่ยวกับหน่วยความจำจากปี 2007 ยังคงใช้ได้ ฉันไม่สามารถหาเวอร์ชั่นที่ใหม่กว่า 1.0 หรือ errata ได้

8
จะดีกว่าถ้าใช้ std :: memcpy () หรือ std :: copy () ในแง่ของประสิทธิภาพ?
จะดีกว่าที่จะใช้memcpyตามที่แสดงด้านล่างหรือดีกว่าที่จะใช้std::copy()ในแง่ของประสิทธิภาพ? ทำไม? char *bits = NULL; ... bits = new (std::nothrow) char[((int *) copyMe->bits)[0]]; if (bits == NULL) { cout << "ERROR Not enough memory.\n"; exit(1); } memcpy (bits, copyMe->bits, ((int *) copyMe->bits)[0]);

7
ทำไมโอเปอเรเตอร์พลั่ว (<<) ต้องการให้มากกว่าบวก - เท่ากับ (+ =) เมื่อสร้างสตริงในรูบี?
ฉันทำงานผ่าน Ruby Koans test_the_shovel_operator_modifies_the_original_stringปริศนาธรรมในabout_strings.rbรวมถึงการแสดงความคิดเห็นต่อไปนี้: โปรแกรมเมอร์ทับทิมมักจะชอบโอเปอเรเตอร์พลั่ว (&lt;&lt;) มากกว่าเครื่องหมายบวก (+ =) เมื่อสร้างสตริง ทำไม? ฉันเดาว่ามันเกี่ยวข้องกับความเร็ว แต่ฉันไม่เข้าใจการกระทำภายใต้ประทุนที่จะทำให้ผู้ปฏิบัติงานพลั่วทำงานเร็วขึ้น ใครบางคนจะสามารถโปรดอธิบายรายละเอียดที่อยู่เบื้องหลังการตั้งค่านี้?

3
ความหมายของคำย่อ SSO ในบริบทของ std :: string
ในc ++ คำถามเกี่ยวกับการเพิ่มประสิทธิภาพและรูปแบบรหัสหลายคำตอบที่เรียกว่า "สปส." std::stringในบริบทของการเพิ่มประสิทธิภาพสำเนาของ SSO หมายถึงอะไรในบริบทนั้น เห็นได้ชัดว่าไม่ใช่ "การลงชื่อเข้าใช้ครั้งเดียว" "การเพิ่มประสิทธิภาพสตริงที่ใช้ร่วมกัน" อาจจะ?
155 c++  string  optimization 

20
ในขณะที่ (1) สำหรับ (;;) มีความแตกต่างความเร็วหรือไม่
รุ่นยาว ... เพื่อนร่วมงานยืนยันในวันนี้หลังจากเห็นการใช้งานของฉันwhile (1)ในสคริปต์ Perl ที่for (;;)เร็วขึ้น ฉันแย้งว่าพวกเขาควรจะเหมือนกันโดยหวังว่าล่ามจะปรับความแตกต่างให้เหมาะสม ฉันตั้งค่าสคริปต์ที่จะเรียกใช้ 1,000,000,000 สำหรับการวนซ้ำวนซ้ำและในขณะเดียวกันก็วนซ้ำและบันทึกเวลาระหว่างกัน ฉันไม่พบความแตกต่างที่เห็นคุณค่า เพื่อนร่วมงานของฉันบอกว่าศาสตราจารย์คนหนึ่งบอกเขาว่าการwhile (1)เปรียบเทียบกำลังดำเนินการอยู่1 == 1และfor (;;)ไม่ใช่ เราทำการทดสอบซ้ำกับ 100x จำนวนการวนซ้ำด้วย C ++ และความแตกต่างนั้นเล็กน้อย อย่างไรก็ตามเป็นตัวอย่างที่แสดงให้เห็นว่าโค้ดที่คอมไพล์ได้เร็วขึ้นสามารถเทียบกับภาษาสคริปต์ได้ เวอร์ชั่นสั้น... มีเหตุผลใดที่จะชอบwhile (1)มากกว่าfor (;;)ถ้าคุณต้องการวงวนไม่สิ้นสุดเพื่อแยกออกจากกัน? หมายเหตุ:หากยังไม่ชัดเจนจากคำถาม นี่เป็นการสนทนาทางวิชาการที่สนุกสนานระหว่างเพื่อนสองคน ฉันรู้ว่านี่ไม่ใช่แนวคิดที่สำคัญอย่างยิ่งที่โปรแกรมเมอร์ทุกคนควรทนทุกข์ทรมาน ขอบคุณสำหรับคำตอบที่ดีทั้งหมดที่ฉัน (และฉันแน่ใจว่าคนอื่น ๆ ) ได้เรียนรู้เล็ก ๆ น้อย ๆ จากการสนทนานี้ ปรับปรุง:เพื่อนร่วมงานดังกล่าวชั่งน้ำหนักด้วยคำตอบด้านล่าง อ้างถึงที่นี่ในกรณีที่ถูกฝังอยู่ มันมาจากโปรแกรมเมอร์แอสเซมบลีของ AMD เขาระบุว่าโปรแกรมเมอร์ C (ผู้ประพันธ์) ไม่ทราบว่ารหัสของพวกเขาไม่มีประสิทธิภาพ เขากล่าวในวันนี้ว่าคอมไพเลอร์ gcc …

30
ตั้งทุกเซลล์ในเมทริกซ์เป็น 0 หากแถวหรือคอลัมน์นั้นมี 0
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ รับเมทริกซ์ NxN ด้วย 0s และ 1s ตั้งแถวที่มีทุก0ทุก0s และตั้งคอลัมน์ที่มีทุก0ทุก0วินาที ตัวอย่างเช่น 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 ผลลัพธ์ใน 0 0 0 0 0 0 0 0 0 0 0 0 …

5
คอมไพเลอร์ C ++ ใดที่มีการปรับให้เหมาะสมแบบเรียกซ้ำ
ดูเหมือนว่าสำหรับฉันแล้วมันจะทำงานได้อย่างสมบูรณ์แบบดีในการปรับการเรียกซ้ำแบบหางทั้งใน C และ C ++ แต่ในขณะที่การดีบั๊กฉันไม่เคยเห็นเฟรมสแต็คที่ระบุการเพิ่มประสิทธิภาพนี้ นั่นเป็นสิ่งที่ดีเพราะกองซ้อนบอกฉันว่าการเรียกซ้ำนั้นลึกซึ้งเพียงใด อย่างไรก็ตามการเพิ่มประสิทธิภาพจะเป็นสิ่งที่ดีเช่นกัน คอมไพเลอร์ C ++ มีการเพิ่มประสิทธิภาพนี้หรือไม่? ทำไม? ทำไมจะไม่ล่ะ? ฉันจะบอกให้คอมไพเลอร์ทำอย่างไร สำหรับ MSVC: /O2หรือ/Ox สำหรับ GCC: -O2หรือ-O3 วิธีการตรวจสอบว่าคอมไพเลอร์ได้ทำในกรณีที่แน่นอนหรือไม่ สำหรับ MSVC ให้เปิดใช้งานเอาต์พุต PDB เพื่อให้สามารถติดตามรหัสจากนั้นตรวจสอบรหัส สำหรับ GCC .. ฉันยังคงแนะนำวิธีการตรวจสอบว่าฟังก์ชั่นบางอย่างได้รับการปรับให้เหมาะสมเช่นนี้โดยคอมไพเลอร์ (แม้ว่าฉันจะพบว่ามันมั่นใจว่า Konrad บอกให้ฉันสมมติมัน) มันเป็นไปได้เสมอที่จะตรวจสอบว่าคอมไพเลอร์ทำสิ่งนี้ด้วยการเรียกซ้ำแบบไม่สิ้นสุดและตรวจสอบว่ามันส่งผลให้เกิดการวนซ้ำไม่สิ้นสุดหรือสแต็กล้น (ฉันทำสิ่งนี้กับ GCC และพบว่า-O2เพียงพอ) แต่ฉันต้องการ สามารถตรวจสอบฟังก์ชั่นบางอย่างที่ฉันรู้ว่าจะยุติได้ ฉันชอบที่จะมีวิธีง่ายๆในการตรวจสอบเรื่องนี้ :) หลังจากการทดสอบบางอย่างฉันพบว่า destructors ทำลายความเป็นไปได้ของการเพิ่มประสิทธิภาพนี้ บางครั้งมันก็คุ้มค่าที่จะเปลี่ยนการกำหนดขอบเขตของตัวแปรและเทมเพลตบางอย่างเพื่อให้แน่ใจว่าพวกเขาออกนอกขอบเขตก่อนที่แถลงผลตอบแทนจะเริ่มต้น หาก destructor ใด ๆ …

7
ตรวจสอบว่าแท็บเบราว์เซอร์โฟกัสหรือไม่
มีวิธีข้ามเบราว์เซอร์ที่เชื่อถือได้ในการตรวจสอบว่าแท็บมีโฟกัสหรือไม่ สถานการณ์คือเรามีแอปพลิเคชันที่สำรวจความคิดเห็นเป็นประจำสำหรับราคาหุ้นและหากหน้าเว็บไม่ได้ให้ความสำคัญเราสามารถหยุดการสำรวจและบันทึกเสียงการจราจรทุกคนโดยเฉพาะอย่างยิ่งเมื่อผู้คนเป็นแฟนของการเปิดแท็บต่างๆ คือwindow.onblurและwindow.onfocusตัวเลือกสำหรับการนี้อยู่แล้ว?

8
ผู้ประกอบการที่สามใน JavaScript โดยไม่ต้อง "อื่น"
ฉันมักจะต้องใส่nullในเงื่อนไขอื่นที่ไม่มีอะไรเลย มีอยู่รอบ ๆ มันไหม? เช่น condition ? x = true : null; โดยพื้นฐานแล้วมีวิธีทำอย่างไร: condition ? x = true; ตอนนี้มันปรากฏขึ้นเป็นข้อผิดพลาดทางไวยากรณ์ FYI นี่คือตัวอย่างโค้ดจริงบางส่วน: !defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;

19
Beyond Stack Sampling: C ++ Profilers
เรื่องของแฮกเกอร์ วันที่คือ 12/02/10 หลายวันก่อนวันคริสต์มาสกำลังจะหายไปและฉันก็โดนบล็อกถนนสายสำคัญในฐานะโปรแกรมเมอร์หน้าต่าง ฉันใช้ AQTime ฉันพยายามง่วงนอนเป็นประกายและง่วงนอนมากและเมื่อเราพูด VTune กำลังติดตั้ง ฉันได้ลองใช้ตัวสร้างโปรไฟล์ VS2008 และมันก็ถูกลงโทษในทางบวกเช่นกัน ฉันใช้เทคนิคการหยุดชั่วคราวแบบสุ่ม ฉันตรวจสอบต้นไม้ต้นสาย ฉันไล่ออกจากฟังก์ชั่นการติดตาม แต่ข้อเท็จจริงที่เจ็บปวดอันน่าเศร้าของเรื่องนี้ก็คือแอปที่ฉันใช้งานอยู่นั้นมีโค้ดมากกว่าหนึ่งล้านบรรทัดโดยอาจมีแอพของบุคคลที่สามอีกกว่าล้านบรรทัด ฉันต้องการเครื่องมือที่ดีกว่า ฉันอ่านหัวข้ออื่นแล้ว ฉันลองแต่ละโปรไฟล์ที่ระบุไว้ในแต่ละหัวข้อ จะต้องมีสิ่งที่ดีกว่าตัวเลือกขยะและราคาแพงเหล่านี้หรือจำนวนงานที่น่าหัวเราะจนแทบไม่มีกำไร เพื่อให้เกิดความซับซ้อนยิ่งขึ้นรหัสของเรามีการใช้เธรดอย่างหนักและเรียกใช้ลูป Qt Event จำนวนหนึ่งซึ่งบางส่วนมีความเปราะบางจนเกิดความผิดพลาดภายใต้เครื่องมือหนักเนื่องจากความล่าช้าของเวลา อย่าถามฉันว่าเหตุใดเราจึงเรียกใช้ลูปหลายเหตุการณ์ ไม่มีใครสามารถบอกได้ มีตัวเลือกเพิ่มเติมตามแนวของ Valgrind ในสภาพแวดล้อมของ windows หรือไม่? มีอะไรดีไปกว่าเครื่องมือที่ชำรุดอันยาวเหยียดที่ฉันได้ลองไปแล้วหรือไม่? มีอะไรที่ออกแบบมาเพื่อรวมเข้ากับ Qt หรืออาจจะมีการแสดงกิจกรรมที่เป็นประโยชน์ในคิว? รายการทั้งหมดของเครื่องมือที่ฉันลองด้วยเครื่องมือที่มีประโยชน์จริง ๆ ในตัวเอียง: AQTime:ค่อนข้างดี! มีปัญหากับการเรียกซ้ำแบบลึก แต่กราฟการโทรนั้นถูกต้องในกรณีเหล่านี้และสามารถใช้เพื่อกำจัดความสับสนที่คุณอาจมี ไม่ใช่เครื่องมือที่สมบูรณ์แบบ แต่ควรลองใช้ดู มันอาจเหมาะกับความต้องการของคุณและมันก็ดีพอสำหรับฉันเกือบตลอดเวลา หยุดการโจมตีแบบสุ่มชั่วคราวในโหมดดีบั๊ก:มีข้อมูลไม่เพียงพอ เครื่องมือที่ดี แต่ไม่ใช่โซลูชันที่สมบูรณ์ Parallel Studios: ตัวเลือกนิวเคลียร์ …


30
การมองโลกในแง่ร้ายที่ไร้สาระที่สุดคืออะไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม &amp; คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา เราทุกคนรู้ว่าการเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมดเพราะมันนำไปสู่รหัสที่อ่านไม่ได้ / ไม่สามารถทำได้ ยิ่งแย่ลงคือการมองดูในแง่ร้ายเมื่อมีคนใช้ "การเพิ่มประสิทธิภาพ" เพราะพวกเขาคิดว่ามันจะเร็วขึ้น แต่มันก็ช้าลงเรื่อย ๆ ?

5
ทำไม (a% 256) แตกต่างจาก (a & 0xFF)
ฉันมักจะสันนิษฐานว่าเมื่อทำเพิ่มประสิทธิภาพธรรมชาติจะใช้การดำเนินการที่มีประสิทธิภาพค่าที่เหมาะสมเช่นถ้าผมเขียน(a % 256)(a &amp; 0xFF) เมื่อทำการทดสอบกับคอมไพเลอร์ explorer gcc-6.2 (-O3): // Type your code here, or load an example. int mod(int num) { return num % 256; } mod(int): mov edx, edi sar edx, 31 shr edx, 24 lea eax, [rdi+rdx] movzx eax, al sub eax, edx ret และเมื่อลองรหัสอื่น: // Type …
145 c++  optimization 

10
เวลาเริ่มต้น Profiling Vim
ฉันมีปลั๊กอินจำนวนมากที่เปิดใช้งานเมื่อใช้ Vim - ฉันได้รวบรวมปลั๊กอินมาหลายปีแล้ว ฉันรู้สึกเบื่อหน่ายกับระยะเวลาที่ Vim เริ่มต้นในตอนนี้ดังนั้นฉันจึงต้องการสร้างโปรไฟล์การเริ่มต้นและดูว่าปลั๊กอินใดที่ฉันมีส่วนรับผิดชอบ มีวิธีใดบ้างในการกำหนดโปรไฟล์การเริ่มต้นหรือการเรียกใช้สคริปต์ของ Vim ตามหลักการแล้วฉันต้องการทราบว่า Vim ใช้เวลานานเท่าใดในการโหลดสคริปต์ Vim แต่ละครั้ง

5
การจัดการกับจำนวนมากใน Python
ฉันได้พิจารณาการประเมินมือโป๊กเกอร์อย่างรวดเร็วใน Python สำหรับฉันแล้ววิธีหนึ่งที่จะทำให้กระบวนการเร็วขึ้นคือการแสดงหน้าไพ่ทั้งหมดและเหมาะสมเป็นจำนวนเฉพาะและคูณเข้าด้วยกันเพื่อแสดงถึงมือ เพื่อเล็กน้อย: class PokerCard: faces = '23456789TJQKA' suits = 'cdhs' facePrimes = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 53, 59, 61] suitPrimes = [2, 3, 5, 7] และ def HashVal(self): return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit] สิ่งนี้จะให้ค่าตัวเลขแต่ละมือซึ่งโมดูโลสามารถบอกได้ว่ามีกษัตริย์ในมือกี่องค์หรือกี่หัวใจ ตัวอย่างเช่นมือใด ๆ ที่มีห้าไม้ขึ้นไปในนั้นจะหารเท่า ๆ กันด้วย 2 ^ 5; มือใด …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.