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

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

12
คลาสที่ปิดผนึกมีประโยชน์ด้านประสิทธิภาพหรือไม่?
ฉันได้พบกับเคล็ดลับการเพิ่มประสิทธิภาพจำนวนมากที่บอกว่าคุณควรทำเครื่องหมายคลาสของคุณเป็นผนึกเพื่อรับสิทธิประโยชน์เพิ่มเติม ฉันทำการทดสอบเพื่อตรวจสอบความแตกต่างของประสิทธิภาพและไม่พบสิ่งใดเลย ฉันกำลังทำอะไรผิดหรือเปล่า? ฉันไม่มีกรณีที่คลาสที่ปิดผนึกจะให้ผลลัพธ์ที่ดีกว่าหรือไม่ มีใครทำการทดสอบและเห็นความแตกต่าง? ช่วยฉันเรียนรู้ :)


11
ทำไมวีโอไอพีถึงช้าจัง? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา วีโอไอพีนั้นช้ามาก ๆ หรือ? นี่เป็นประสบการณ์ครั้งแรกของฉันกับมันและพาเนลผู้ดูแลระบบใช้เวลาในการโหลดและบันทึกการเปลี่ยนแปลง เป็นการติดตั้งเริ่มต้นพร้อมกับข้อมูลการทดสอบ เซิร์ฟเวอร์ที่โฮสต์ให้บริการเว็บไซต์อื่น ๆ ที่ไม่ใช่ Magento เร็วสุด ๆ มันเกี่ยวกับโค้ด PHP ที่วีโอไอพีใช้นั้นทำให้ช้ามากและสิ่งใดที่สามารถแก้ไขได้?

3
ดัชนีของ SQL Server - น้อยไปหามากหรือจากมากไปหาน้อย
เมื่อคุณสร้างดัชนีในคอลัมน์หรือจำนวนคอลัมน์ใน MS SQL Server (ฉันใช้รุ่น 2005) คุณสามารถระบุว่าดัชนีในแต่ละคอลัมน์นั้นขึ้นหรือลง ฉันมีความเข้าใจยากว่าทำไมตัวเลือกนี้ถึงที่นี่ การใช้เทคนิคการเรียงลำดับแบบไบนารีการค้นหาจะไม่รวดเร็วเหมือนกันใช่มั้ย ฉันต้องเลือกลำดับใด

11
การวัดเวลาดำเนินการของฟังก์ชันใน C ++
ฉันต้องการที่จะหาวิธีการมากเวลาฟังก์ชั่นบางอย่างต้องใช้เวลาในการฉัน C ++ โปรแกรมที่จะรันบนลินุกซ์ หลังจากนั้นฉันต้องการเปรียบเทียบความเร็ว ฉันเห็นฟังก์ชั่นหลายครั้ง แต่จบลงด้วยสิ่งนี้จากการเพิ่ม Chrono: process_user_cpu_clock, captures user-CPU time spent by the current process ตอนนี้ฉันยังไม่ชัดเจนถ้าฉันใช้ฟังก์ชั่นด้านบนฉันจะได้รับเฉพาะซีพียูที่ใช้ในฟังก์ชั่นนั้นหรือไม่ ประการที่สองฉันไม่พบตัวอย่างการใช้ฟังก์ชั่นด้านบน คนใดคนหนึ่งโปรดช่วยฉันวิธีการใช้ฟังก์ชั่นดังกล่าวข้างต้น? PS: ตอนนี้ฉันใช้std::chrono::system_clock::now()เพื่อรับเวลาในไม่กี่วินาที แต่สิ่งนี้ทำให้ฉันผลลัพธ์ที่แตกต่างเนื่องจากการโหลด CPU ที่แตกต่างกันทุกครั้ง

6
ทำไม Java API จึงใช้ int แทนที่จะเป็น short หรือ byte
เหตุใด Java API จึงใช้งานintเมื่อshortใดถึงbyteจะเพียงพอ ตัวอย่าง: DAY_OF_WEEKข้อมูลในระดับการใช้งานCalendarint หากความแตกต่างน้อยเกินไปทำไมประเภทข้อมูลเหล่านั้น ( short, int) จึงมีอยู่ทั้งหมด

13
การเพิ่มประสิทธิภาพใด ๆ สำหรับการเข้าถึงแบบสุ่มในอาร์เรย์ขนาดใหญ่มากเมื่อค่าใน 95% ของเคสเป็น 0 หรือ 1?
มีการเพิ่มประสิทธิภาพที่เป็นไปได้สำหรับการเข้าถึงแบบสุ่มในอาร์เรย์ขนาดใหญ่มากหรือไม่ (ปัจจุบันฉันใช้uint8_tและกำลังถามว่ามีอะไรดีกว่า) uint8_t MyArray[10000000]; เมื่อค่าที่ตำแหน่งใด ๆ ในอาร์เรย์คือ 0หรือ1สำหรับ95%ของทุกกรณี 2ใน4%ของกรณี ระหว่าง3ถึง255ในอีก1%ของกรณี? มีอะไรดีไปกว่าuint8_tอาร์เรย์ที่จะใช้สำหรับสิ่งนี้หรือไม่? ควรเร็วที่สุดเท่าที่จะเป็นไปได้ในการวนซ้ำอาร์เรย์ทั้งหมดตามลำดับแบบสุ่มและนี่หนักมากกับแบนด์วิดท์ RAM ดังนั้นเมื่อมีเธรดมากกว่าสองสามเธรดที่ทำเช่นนั้นในเวลาเดียวกันสำหรับอาร์เรย์ที่แตกต่างกันปัจจุบันแบนด์วิดท์ RAM ทั้งหมด อิ่มตัวอย่างรวดเร็ว ฉันถามเนื่องจากรู้สึกว่าไม่มีประสิทธิภาพมากที่จะมีอาร์เรย์ขนาดใหญ่ (10 MB) เมื่อทราบว่าค่าเกือบทั้งหมดนอกเหนือจาก 5% จะเป็น 0 หรือ 1 ดังนั้นเมื่อ 95% ของค่าทั้งหมดในอาร์เรย์ ต้องการเพียง 1 บิตแทนที่จะเป็น 8 บิตซึ่งจะลดการใช้หน่วยความจำลงเกือบจะเป็นลำดับความสำคัญ รู้สึกว่าจะต้องมีโซลูชันที่มีประสิทธิภาพหน่วยความจำมากกว่าซึ่งจะช่วยลดแบนด์วิดท์ RAM ที่จำเป็นสำหรับสิ่งนี้ได้อย่างมากและเป็นผลให้การเข้าถึงแบบสุ่มเร็วขึ้นอย่างมาก

9
ฟังก์ชัน Coalesce สำหรับ PHP?
ภาษาโปรแกรมจำนวนมากมีฟังก์ชันการรวมกัน (ส่งกลับค่าที่ไม่ใช่ค่า NULL ตัวแรกเช่น ) PHP น่าเศร้าในปี 2009 ไม่มี อะไรจะเป็นวิธีที่ดีในการนำ PHP ไปใช้จนกว่า PHP จะได้รับฟังก์ชัน coalesce

2
ในโหมดเผยแพร่ลักษณะการทำงานของโค้ดไม่เป็นไปตามที่คาดไว้
รหัสต่อไปนี้สร้างผลลัพธ์ที่แตกต่างกันภายใต้โหมดดีบักและโหมดเผยแพร่ (โดยใช้ Visual Studio 2008): int _tmain(int argc, _TCHAR* argv[]) { for( int i = 0; i < 17; i++ ) { int result = i * 16; if( result > 255 ) { result = 255; } printf("i:%2d, result = %3d\n", i, result) ; } return 0; } ผลลัพธ์ของโหมดดีบักซึ่งเป็นไปตามที่คาดไว้: …

3
เหตุใดการวนซ้ำแบบง่ายจึงได้รับการปรับให้เหมาะสมเมื่อขีด จำกัด คือ 959 แต่ไม่ใช่ 960
พิจารณาลูปง่ายๆนี้: float f(float x[]) { float p = 1.0; for (int i = 0; i < 959; i++) p += 1; return p; } หากคุณคอมไพล์ด้วย gcc 7 (snapshot) หรือ clang (trunk) ด้วย-march=core-avx2 -Ofastคุณจะได้สิ่งที่คล้ายกับ. .LCPI0_0: .long 1148190720 # float 960 f: # @f vmovss xmm0, dword ptr [rip + .LCPI0_0] # …
131 c  gcc  optimization  clang 

15
ฟังก์ชันและประสิทธิภาพเสมือนจริง - C ++
ในการออกแบบชั้นเรียนของฉันฉันใช้คลาสนามธรรมและฟังก์ชันเสมือนอย่างกว้างขวาง ฉันรู้สึกว่าฟังก์ชันเสมือนมีผลต่อประสิทธิภาพ นี่คือเรื่องจริง? แต่ฉันคิดว่าความแตกต่างของประสิทธิภาพนี้ไม่สามารถสังเกตเห็นได้และดูเหมือนว่าฉันกำลังทำการเพิ่มประสิทธิภาพก่อนกำหนด ขวา?

2
เหตุใด Clang จึงเพิ่มประสิทธิภาพออกไป x * 1.0 แต่ไม่ใช่ x + 0.0
เหตุใด Clang จึงเพิ่มประสิทธิภาพการวนซ้ำในโค้ดนี้ #include <time.h> #include <stdio.h> static size_t const N = 1 << 27; static double arr[N] = { /* initialize to zero */ }; int main() { clock_t const start = clock(); for (int i = 0; i < N; ++i) { arr[i] *= 1.0; } printf("%u ms\n", …

15
ค้นหาได้อย่างรวดเร็วว่ามีค่าอยู่ในอาร์เรย์ C หรือไม่
ฉันมีแอปพลิเคชั่นฝังตัวที่มี ISR ที่สำคัญตามเวลาซึ่งจำเป็นต้องวนซ้ำผ่านอาร์เรย์ขนาด 256 (ควรเป็น 1024 แต่ 256 เป็นค่าต่ำสุด) และตรวจสอบว่าค่าตรงกับเนื้อหาอาร์เรย์หรือไม่ A boolจะถูกตั้งค่าเป็นจริงในกรณีนี้ ไมโครคอนโทรลเลอร์คือ NXP LPC4357 แกน ARM Cortex M4 และคอมไพเลอร์คือ GCC ฉันได้รวมการเพิ่มประสิทธิภาพระดับ 2 ไว้แล้ว (3 ช้ากว่า) และวางฟังก์ชันใน RAM แทนแฟลช ฉันยังใช้เลขคณิตตัวชี้และการforวนซ้ำซึ่งทำการนับลงแทนการขึ้น (ตรวจสอบว่าi!=0เร็วกว่าการตรวจสอบว่าi<256) สรุปแล้วฉันจบลงด้วยระยะเวลา 12.5 ซึ่งจะต้องลดลงอย่างมากเพื่อให้เป็นไปได้ นี่คือรหัส (หลอก) ที่ฉันใช้ตอนนี้: uint32_t i; uint32_t *array_ptr = &theArray[0]; uint32_t compareVal = 0x1234ABCD; bool validFlag = …

3
การใช้ตัวชี้นี้ทำให้เกิดการลดประสิทธิภาพแบบแปลก ๆ ใน hot loop
ฉันเพิ่งเจอการลดประสิทธิภาพแบบแปลก ๆ (หรือค่อนข้างพลาดโอกาสในการเพิ่มประสิทธิภาพ) พิจารณาฟังก์ชันนี้เพื่อการคลายอาร์เรย์ของจำนวนเต็ม 3 บิตเป็นจำนวนเต็ม 8 บิตอย่างมีประสิทธิภาพ มันคลาย 16 ints ในการวนซ้ำแต่ละครั้ง: void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast<uint64_t*>(source); target[0] = t & 0x7; target[1] = (t >> 3) & 0x7; target[2] = (t >> 6) & 0x7; target[3] = (t >> …

22
ตำแหน่งของบิตที่มีนัยสำคัญน้อยที่สุดที่ตั้งค่าไว้
ฉันกำลังมองหาวิธีที่มีประสิทธิภาพในการกำหนดตำแหน่งของบิตที่มีนัยสำคัญน้อยที่สุดที่กำหนดเป็นจำนวนเต็มเช่นสำหรับ 0x0FF0 ซึ่งจะเป็น 4 การใช้งานที่ไม่สำคัญคือ: unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) { value >>= 1; ++pos; } return pos; } มีความคิดอย่างไรที่จะบีบบางรอบออกจากมัน? (หมายเหตุ: คำถามนี้มีไว้สำหรับคนที่ชอบสิ่งนั้นไม่ใช่สำหรับคนที่บอกว่า xyzoptimization นั้นชั่วร้าย) [แก้ไข] ขอบคุณทุกคนสำหรับแนวคิด! ฉันได้เรียนรู้สิ่งอื่น ๆ ด้วยเช่นกัน เย็น!

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