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

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

6
ฉันจะเพิ่มดัชนีลงในตาราง MySQL ได้อย่างไร
ฉันมีตาราง MySQL ที่มีขนาดใหญ่มากพร้อมข้อมูลประมาณ 150,000 แถว ขณะนี้เมื่อฉันลองและเรียกใช้ SELECT * FROM table WHERE id = '1'; รหัสทำงานได้ดีเนื่องจากฟิลด์ ID เป็นดัชนีหลัก อย่างไรก็ตามสำหรับการพัฒนาล่าสุดของโครงการฉันต้องค้นหาฐานข้อมูลตามฟิลด์อื่น ตัวอย่างเช่น: SELECT * FROM table WHERE product_id = '1'; ฟิลด์นี้ไม่ได้จัดทำดัชนีไว้ก่อนหน้านี้ อย่างไรก็ตามฉันได้เพิ่มเข้าไปแล้วดังนั้นตอนนี้ mysql จะสร้างดัชนีฟิลด์ แต่เมื่อฉันพยายามเรียกใช้แบบสอบถามข้างต้นมันจะทำงานช้ามาก คำค้นหาอธิบายเปิดเผยว่าไม่มีดัชนีสำหรับฟิลด์ product_id เมื่อฉันได้เพิ่มไปแล้วและด้วยเหตุนี้แบบสอบถามจึงใช้เวลาตั้งแต่ 20 นาทีถึง 30 นาทีในการส่งคืนแถวเดียว ผลการสำรวจอย่างสมบูรณ์ของฉันคือ: | id | select_type | table | type | possible_keys| …

23
ตัวเลือกใดดีกว่าที่จะใช้สำหรับหารจำนวนเต็ม 2
เทคนิคใดต่อไปนี้เป็นตัวเลือกที่ดีที่สุดสำหรับการหารจำนวนเต็ม 2 และทำไม เทคนิค 1: x = x >> 1; เทคนิค 2: x = x / 2; นี่xคือจำนวนเต็ม

20
ควรนำเข้าข้อความสั่งที่ด้านบนของโมดูลเสมอหรือไม่
PEP 08ระบุ: การนำเข้าจะถูกวางไว้ที่ด้านบนของไฟล์เสมอหลังจากที่โมดูลข้อคิดเห็นและเอกสารใด ๆ และก่อนโมดูลกลมและค่าคงที่ อย่างไรก็ตามหากคลาส / วิธี / ฟังก์ชั่นที่ฉันนำเข้าใช้เฉพาะในกรณีที่หายากแน่นอนว่ามันมีประสิทธิภาพมากกว่าในการนำเข้าเมื่อจำเป็น? นี่ไม่ใช่: class SomeClass(object): def not_often_called(self) from datetime import datetime self.datetime = datetime.now() มีประสิทธิภาพมากกว่านี้ไหม? from datetime import datetime class SomeClass(object): def not_often_called(self) self.datetime = datetime.now()

24
เรียงลำดับที่เร็วที่สุดของอาร์เรย์ความยาวคงที่ 6 int
ตอบคำถาม Stack Overflow (อันนี้ ) ฉันพบปัญหาย่อยที่น่าสนใจ วิธีที่เร็วที่สุดในการจัดเรียงอาร์เรย์ของ 6 จำนวนเต็มคืออะไร? เนื่องจากคำถามอยู่ในระดับต่ำมาก: เราไม่สามารถสมมติว่ามีไลบรารี (และการโทรเองมีค่าใช้จ่าย) เพียงธรรมดา C เพื่อหลีกเลี่ยงการล้างท่อส่งคำสั่ง (ที่มีค่าใช้จ่ายสูงมาก ) เราควรจะลดกิ่งกระโดดและการควบคุมการไหลอื่น ๆ ทุกชนิด (เช่นที่ซ่อนอยู่หลังจุดลำดับใน&&หรือ||) ห้องมีข้อ จำกัด และการลดการลงทะเบียนและการใช้หน่วยความจำก็เป็นปัญหา คำถามนี้เป็นคำถามประเภทกอล์ฟที่เป้าหมายไม่ได้ลดความยาวของแหล่งที่มา แต่ลดระยะเวลาดำเนินการลง ผมเรียกรหัสมัน Zening 'ที่ใช้ในชื่อของหนังสือเล่มนี้เซนของการเพิ่มประสิทธิภาพรหัสโดยไมเคิล Abrashและต่อมา ทำไมมันถึงน่าสนใจมีหลายเลเยอร์: ตัวอย่างนั้นง่ายและเข้าใจง่ายและวัดผลไม่เกี่ยวข้องกับทักษะ C มากนัก มันแสดงผลของการเลือกอัลกอริทึมที่ดีสำหรับปัญหา แต่ยังมีผลกระทบของคอมไพเลอร์และฮาร์ดแวร์พื้นฐาน นี่คือการดำเนินการอ้างอิงของฉัน (ไร้เดียงสาไม่เหมาะ) และชุดทดสอบของฉัน #include <stdio.h> static __inline__ int sort6(int * d){ char j, i, …

4
ตัวเลือกการคัดลอกและการเพิ่มประสิทธิภาพค่าตอบแทนคืออะไร?
การคัดลอกข้อมูลคืออะไร? การเพิ่มประสิทธิภาพค่าที่ส่งคืนคืออะไร พวกเขาหมายถึงอะไร พวกเขาสามารถเกิดขึ้นได้ในสถานการณ์ใด ข้อ จำกัด คืออะไร หากคุณได้รับการอ้างอิงกับคำถามนี้คุณอาจจะมองหาการแนะนำ สำหรับภาพรวมทางเทคนิคดูมาตรฐานอ้างอิง ดูกรณีทั่วไปที่นี่

29
วิธีที่มีประสิทธิภาพมากที่สุดในการเพิ่มค่า Map ใน Java
ฉันหวังว่าคำถามนี้จะไม่ถือว่าเป็นพื้นฐานสำหรับฟอรัมนี้ แต่เราจะเห็น ฉันสงสัยว่าจะสร้างรหัสใหม่อีกครั้งเพื่อประสิทธิภาพที่ดีขึ้นซึ่งเริ่มขึ้นหลายครั้ง สมมติว่าฉันกำลังสร้างรายการความถี่คำโดยใช้แผนที่ (อาจเป็น HashMap) โดยที่แต่ละคีย์คือสตริงที่มีคำที่ถูกนับและค่านั้นเป็นจำนวนเต็มที่เพิ่มขึ้นทุกครั้งที่พบโทเค็นของคำ ใน Perl การเพิ่มค่าดังกล่าวอาจเป็นเรื่องง่าย: $map{$word}++; แต่ใน Java มันซับซ้อนกว่ามาก นี่คือวิธีที่ฉันกำลังทำอยู่: int count = map.containsKey(word) ? map.get(word) : 0; map.put(word, count + 1); หลักสูตรใดขึ้นอยู่กับฟีเจอร์ autoboxing ในเวอร์ชั่น Java ที่ใหม่กว่า ฉันสงสัยว่าคุณสามารถแนะนำวิธีที่มีประสิทธิภาพมากขึ้นในการเพิ่มมูลค่าดังกล่าวหรือไม่ มีเหตุผลด้านประสิทธิภาพที่ดีในการละทิ้งเฟรมเวิร์กของ Collections และใช้อย่างอื่นแทนหรือไม่? อัปเดต: ฉันได้ทำการทดสอบคำตอบหลายข้อ ดูด้านล่าง

7
ทำไมลำดับของลูปจึงมีผลต่อประสิทธิภาพเมื่อทำการวนซ้ำในอาร์เรย์ 2 มิติ
ด้านล่างนี้เป็นสองโปรแกรมที่เกือบเหมือนกันยกเว้นว่าฉันได้เปลี่ยนiและjตัวแปร พวกเขาทั้งสองทำงานในเวลาต่างกัน มีคนอธิบายได้ไหมว่าทำไมสิ่งนี้ถึงเกิดขึ้น รุ่น 1 #include <stdio.h> #include <stdlib.h> main () { int i,j; static int x[4000][4000]; for (i = 0; i < 4000; i++) { for (j = 0; j < 4000; j++) { x[j][i] = i + j; } } } เวอร์ชัน 2 #include <stdio.h> #include <stdlib.h> main …

30
วิธีที่เร็วที่สุดในการแสดงรายการช่วงเวลาทั้งหมดที่ต่ำกว่า N
นี่เป็นอัลกอริธึมที่ดีที่สุดที่ฉันสามารถทำได้ def get_primes(n): numbers = set(range(n, 1, -1)) primes = [] while numbers: p = numbers.pop() primes.append(p) numbers.difference_update(set(range(p*2, n+1, p))) return primes >>> timeit.Timer(stmt='get_primes.get_primes(1000000)', setup='import get_primes').timeit(1) 1.1499958793645562 มันสามารถทำให้เร็วขึ้นได้หรือไม่ รหัสนี้มีข้อบกพร่อง: เนื่องจากnumbersเป็นชุดที่ไม่มีการเรียงลำดับจึงไม่มีการรับประกันที่numbers.pop()จะลบหมายเลขต่ำสุดออกจากชุด อย่างไรก็ตามมันใช้งานได้ (อย่างน้อยสำหรับฉัน) สำหรับตัวเลขที่ป้อน: >>> sum(get_primes(2000000)) 142913828922L #That's the correct sum of all numbers below 2 million >>> 529 in get_primes(1000) …

4
การยกเลิกโปรแกรมสำหรับขั้นตอนการทำงานใน CPU ตระกูล Intel Sandybridge
ฉันกำลังใช้สมองของฉันเป็นเวลาหนึ่งสัปดาห์เพื่อพยายามทำงานนี้ให้เสร็จและฉันหวังว่าจะมีใครบางคนที่นี่สามารถพาฉันไปสู่เส้นทางที่ถูกต้อง ให้ฉันเริ่มต้นด้วยคำแนะนำของผู้สอน: การมอบหมายของคุณตรงข้ามกับการมอบหมายห้องปฏิบัติการครั้งแรกของเราซึ่งเป็นการเพิ่มประสิทธิภาพของโปรแกรมหมายเลขเฉพาะ จุดประสงค์ของคุณในการมอบหมายนี้คือการหยุดโปรแกรมให้น้อยที่สุดนั่นคือทำให้มันช้าลง ทั้งสองนี้เป็นโปรแกรมที่ใช้ CPU มาก ใช้เวลาสองสามวินาทีในการทำงานบนพีซีในห้องปฏิบัติการของเรา คุณไม่สามารถเปลี่ยนอัลกอริทึม ในการ deoptimize โปรแกรมใช้ความรู้ของคุณในการทำงานของไปป์ไลน์ Intel i7 ลองจินตนาการถึงวิธีการสั่งซื้อเส้นทางการสอนใหม่เพื่อแนะนำ WAR, RAW และอันตรายอื่น ๆ คิดถึงวิธีลดประสิทธิภาพของแคชให้เล็กที่สุด ไร้ความสามารถอย่างบ้าคลั่ง ที่ได้รับมอบหมายให้เลือกโปรแกรม Whetstone หรือ Monte-Carlo ความคิดเห็นแคชประสิทธิภาพส่วนใหญ่จะใช้เฉพาะกับ Whetstone แต่ฉันเลือกโปรแกรมจำลอง Monte-Carlo: // Un-modified baseline for pessimization, as given in the assignment #include <algorithm> // Needed for the "max" function #include <cmath> #include …


5
วิธีดูปลั๊กอินที่ทำให้ Vim ทำงานช้า?
มีวิธีในการโพรไฟล์ปลั๊กอินเป็นกลุ่มหรือไม่? MacVim .pyของฉันจะช้าลงและช้าลงเมื่อเปิดขนาดใหญ่ ฉันรู้ว่าฉันสามารถยกเลิกการเลือกปลั๊กอินทั้งหมดและเลือกทีละตัวอีกครั้งเพื่อตรวจสอบปลั๊กอินที่เป็นผู้ร้าย แต่มีวิธีที่เร็วกว่า? dotvim ของฉันอยู่ที่นี่: https://github.com/charlax/dotvim

18
ฉันจะรู้ได้อย่างไรว่าส่วนใดในรหัสไม่เคยใช้?
ฉันมีรหัส C ++ ดั้งเดิมที่ฉันควรจะเอารหัสที่ไม่ได้ใช้ออก ปัญหาคือรหัสฐานมีขนาดใหญ่ ฉันจะทราบได้อย่างไรว่ารหัสใดไม่เคยถูกเรียกใช้ / ไม่เคยใช้?

8
ทำไม strlen ของ glibc จึงจำเป็นต้องมีความซับซ้อนในการทำงานอย่างรวดเร็ว
ฉันดูstrlenรหัสที่นี่และสงสัยว่าการเพิ่มประสิทธิภาพที่ใช้ในรหัสนั้นจำเป็นจริง ๆ หรือไม่ ตัวอย่างเช่นทำไมบางอย่างจะไม่เหมือนงานต่อไปนี้ดีหรือดีกว่า unsigned long strlen(char s[]) { unsigned long i; for (i = 0; s[i] != '\0'; i++) continue; return i; } รหัสเรียบง่ายกว่าและดีกว่าสำหรับการรวบรวมเพื่อเพิ่มประสิทธิภาพหรือไม่ โค้ดของstrlenหน้าหลังลิงค์มีลักษณะดังนี้: /* Copyright (C) 1991, 1993, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Torbjorn …


4
กาลครั้งหนึ่งเมื่อ> เร็วกว่า <…เดี๋ยวก่อนอะไรนะ?
ฉันกำลังอ่านบทแนะนำ OpenGL ที่ยอดเยี่ยม มันยอดเยี่ยมมากเชื่อใจฉัน หัวข้อที่ฉันอยู่ในขณะนี้คือ Z-buffer นอกเหนือจากการอธิบายว่ามันคืออะไรผู้เขียนกล่าวว่าเราสามารถทำการทดสอบเชิงลึกที่กำหนดเองเช่น GL_LESS, GL_ALWAYS และอื่น ๆ นอกจากนี้เขายังอธิบายว่าความหมายที่แท้จริงของค่าความลึก ที่กำหนดเอง ฉันเข้าใจจนถึง แล้วผู้เขียนก็บอกว่ามีอะไรที่ไม่น่าเชื่อ: ช่วง zNear สามารถมากกว่าช่วง zFar; ถ้าเป็นเช่นนั้นค่าพื้นที่หน้าต่างจะถูกย้อนกลับในแง่ของสิ่งที่ถือว่าใกล้เคียงที่สุดหรือไกลที่สุดจากผู้ชม ก่อนหน้านี้ได้มีการกล่าวว่าค่า Z- ช่องว่างของหน้าต่างอยู่ใกล้ที่สุดและ 1 มากที่สุด อย่างไรก็ตามหากค่าคลิปพื้นที่ Z ของเราถูกลบความลึก 1 จะอยู่ใกล้กับมุมมองมากที่สุดและความลึกของ 0 จะใกล้เคียงที่สุด แต่ถ้าเราพลิกทิศทางของการทดสอบความลึก (GL_LESS ถึง GL_GREATER ฯลฯ ) เราจะได้ผลลัพธ์เดียวกัน มันเป็นเพียงแค่การประชุมเท่านั้น อันที่จริงการพลิกเครื่องหมายของ Z และการทดสอบเชิงลึกนั้นครั้งหนึ่งเคยเป็นการเพิ่มประสิทธิภาพที่สำคัญสำหรับเกมจำนวนมาก ถ้าฉันเข้าใจอย่างถูกต้องฉลาดหลักแหลมการพลิกเครื่องหมายของ Z และการทดสอบเชิงลึกคืออะไร แต่การเปลี่ยนการ&lt;เปรียบเทียบกับการ&gt;เปรียบเทียบ ดังนั้นหากฉันเข้าใจอย่างถูกต้องและผู้แต่งไม่ได้โกหกหรือทำสิ่งต่าง ๆ ขึ้นมาการเปลี่ยนแปลง&lt;ที่&gt;เคยเป็นสิ่งสำคัญที่สุดสำหรับหลาย …
280 c  optimization  opengl  cpu  gpu 

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