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

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

4
อะไรคือการหารจำนวนเต็มที่เร็วที่สุดที่รองรับการหารด้วยศูนย์ไม่ว่าผลลัพธ์จะเป็นอย่างไร
สรุป: ฉันกำลังมองหาวิธีที่เร็วที่สุดในการคำนวณ (int) x / (int) y y==0โดยไม่ได้รับข้อยกเว้นสำหรับ แต่ฉันแค่ต้องการผลลัพธ์ตามอำเภอใจ พื้นหลัง: เมื่อทำการเข้ารหัสอัลกอริทึมการประมวลผลภาพฉันมักจะต้องหารด้วยค่าอัลฟา (สะสม) ตัวแปรที่ง่ายที่สุดคือรหัส C ธรรมดาที่มีเลขคณิตจำนวนเต็ม ปัญหาของฉันคือฉันมักจะได้รับข้อผิดพลาดการหารด้วยศูนย์สำหรับพิกเซลผลลัพธ์ด้วยalpha==0. อย่างไรก็ตามเรื่องนี้จะตรงพิกเซลที่ผลที่ไม่ได้เรื่องที่ทั้งหมด: alpha==0ฉันไม่สนใจเกี่ยวกับค่าสีของพิกเซลพร้อม รายละเอียด: ฉันกำลังมองหาสิ่งที่ต้องการ: result = (y==0)? 0 : x/y; หรือ result = x / MAX( y, 1 ); x และ y เป็นจำนวนเต็มบวก รหัสถูกเรียกใช้งานเป็นจำนวนมากในลูปที่ซ้อนกันดังนั้นฉันจึงกำลังมองหาวิธีกำจัดการแตกกิ่งก้านตามเงื่อนไข เมื่อ y ไม่เกินช่วงไบต์ฉันพอใจกับวิธีแก้ปัญหา unsigned char kill_zero_table[256] = { 1, 1, …

7
ผลลัพธ์ทศนิยมที่แตกต่างกันเมื่อเปิดใช้งานการเพิ่มประสิทธิภาพ - บั๊กคอมไพเลอร์?
โค้ดด้านล่างทำงานบน Visual Studio 2008 ที่มีและไม่มีการปรับให้เหมาะสม แต่ใช้ได้เฉพาะกับ g ++ โดยไม่มีการปรับให้เหมาะสม (O0) #include <cstdlib> #include <iostream> #include <cmath> double round(double v, double digit) { double pow = std::pow(10.0, digit); double t = v * pow; //std::cout << "t:" << t << std::endl; double r = std::floor(t + 0.5); //std::cout << "r:" << …
109 c++  optimization  g++  c++-faq 

9
การลดการใช้หน่วยความจำของแอพพลิเคชั่น. NET?
มีเคล็ดลับอะไรบ้างในการลดการใช้หน่วยความจำของแอปพลิเคชัน. NET พิจารณาโปรแกรม C # อย่างง่ายต่อไปนี้ class Program { static void Main(string[] args) { Console.ReadLine(); } } คอมไพล์ในโหมดรีลีสสำหรับx64และรันนอก Visual Studio ตัวจัดการงานรายงานสิ่งต่อไปนี้: Working Set: 9364k Private Working Set: 2500k Commit Size: 17480k จะดีกว่าเล็กน้อยถ้าคอมไพล์สำหรับx86 : Working Set: 5888k Private Working Set: 1280k Commit Size: 7012k จากนั้นฉันลองใช้โปรแกรมต่อไปนี้ซึ่งทำเหมือนกัน แต่พยายามตัดขนาดของกระบวนการหลังจากการเริ่มต้นรันไทม์: class Program { static void …

15
เป็นไปได้ไหมที่จะลดความซับซ้อน (x == 0 || x == 1) ลงในการดำเนินการเดียว?
ดังนั้นฉันจึงพยายามเขียนเลขที่nในลำดับฟีโบนักชีในฟังก์ชันที่กะทัดรัดที่สุด: public uint fibn ( uint N ) { return (N == 0 || N == 1) ? 1 : fibn(N-1) + fibn(N-2); } แต่ฉันสงสัยว่าจะทำให้สิ่งนี้กะทัดรัดและมีประสิทธิภาพมากขึ้นได้หรือไม่โดยการเปลี่ยน (N == 0 || N == 1) เป็นการเปรียบเทียบเพียงครั้งเดียว มีการดำเนินการกะบิตแฟนซีที่สามารถทำได้หรือไม่?

2
Django: ตั้งค่าคีย์ต่างประเทศโดยใช้จำนวนเต็ม?
มีวิธีตั้งค่าความสัมพันธ์คีย์ต่างประเทศโดยใช้รหัสจำนวนเต็มของโมเดลหรือไม่? นี่จะเป็นไปเพื่อวัตถุประสงค์ในการเพิ่มประสิทธิภาพ ตัวอย่างเช่นสมมติว่าฉันมีรูปแบบพนักงาน: class Employee(models.Model): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) type = models.ForeignKey('EmployeeType') และ EmployeeType(models.Model): type = models.CharField(max_length=100) ฉันต้องการความยืดหยุ่นในการมีประเภทพนักงานไม่ จำกัด แต่ในแอปพลิเคชันที่ปรับใช้แล้วจะมีเพียงประเภทเดียวดังนั้นฉันจึงสงสัยว่ามีวิธีฮาร์ดโค้ดรหัสและตั้งค่าความสัมพันธ์ด้วยวิธีนี้หรือไม่ วิธีนี้ฉันสามารถหลีกเลี่ยงการเรียกฐานข้อมูลเพื่อรับวัตถุ EmployeeType ก่อน

2
กลไกของการเพิ่มประสิทธิภาพสตริงสั้นใน libc ++ คืออะไร?
คำตอบนี้ให้ภาพรวมระดับสูงที่ดีของการเพิ่มประสิทธิภาพสตริงสั้น (SSO) อย่างไรก็ตามฉันต้องการทราบรายละเอียดเพิ่มเติมว่ามันทำงานอย่างไรในทางปฏิบัติโดยเฉพาะในการใช้งาน libc ++: สตริงต้องสั้นแค่ไหนจึงจะมีคุณสมบัติเป็น SSO สิ่งนี้ขึ้นอยู่กับสถาปัตยกรรมเป้าหมายหรือไม่? การใช้งานแยกความแตกต่างระหว่างสตริงแบบสั้นและแบบยาวเมื่อเข้าถึงข้อมูลสตริงอย่างไร มันง่ายเหมือนm_size <= 16หรือเป็นแฟล็กที่เป็นส่วนหนึ่งของตัวแปรสมาชิกอื่น ๆ หรือไม่? (ฉันคิดว่าm_sizeหรือบางส่วนอาจใช้ในการจัดเก็บข้อมูลสตริง) ผมถามคำถามนี้มาโดยเฉพาะสำหรับ libc ++ เพราะฉันรู้ว่ามันใช้ SSO นี้ถูกกล่าวถึงแม้ในlibc ++ หน้าแรก นี่คือข้อสังเกตบางประการหลังจากดูที่มา : libc ++ สามารถคอมไพล์โดยมีเลย์เอาต์หน่วยความจำที่แตกต่างกันเล็กน้อยสำหรับคลาสสตริงซึ่งถูกควบคุมโดย_LIBCPP_ALTERNATE_STRING_LAYOUTแฟล็ก เค้าโครงทั้งสองยังแยกความแตกต่างระหว่างเครื่องจักรเล็ก ๆ น้อย ๆ และเครื่องใหญ่เอนด์เซียนซึ่งทำให้เรามีรูปแบบต่างๆทั้งหมด 4 แบบ ฉันจะถือว่าเค้าโครง "ปกติ" และ endian น้อยในสิ่งต่อไปนี้ สมมติว่าต่อไปsize_typeคือ 4 ไบต์และนั่นvalue_typeคือ 1 ไบต์นี่คือลักษณะของสตริง 4 ไบต์แรกในหน่วยความจำ: // short string: …

5
Logger slf4j ข้อดีของการจัดรูปแบบด้วย {} แทนการต่อสายอักขระ
มีข้อดีของการใช้{}แทนการต่อสตริงหรือไม่? ตัวอย่างจาก slf4j logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT); แทน logger.debug("Temperature set to"+ t + ". Old temperature was " + oldT); ฉันคิดว่ามันเกี่ยวกับการเพิ่มประสิทธิภาพความเร็วเนื่องจากการประเมินพารามิเตอร์ (และการต่อสตริง) สามารถหลีกเลี่ยงได้ในรันไทม์ขึ้นอยู่กับไฟล์กำหนดค่า แต่เป็นไปได้เพียงสองพารามิเตอร์บางครั้งก็ไม่มีทางเลือกอื่นนอกจากการต่อสตริง ต้องการความเห็นเกี่ยวกับปัญหานี้

3
เหตุใดแอปพลิเคชันของฉันจึงใช้เวลา 24% ของชีวิตในการตรวจสอบค่าว่าง
ฉันมีโครงสร้างการตัดสินใจไบนารีที่สำคัญด้านประสิทธิภาพและฉันต้องการเน้นคำถามนี้ไปที่โค้ดบรรทัดเดียว โค้ดสำหรับตัววนซ้ำต้นไม้ไบนารีอยู่ด้านล่างพร้อมผลลัพธ์จากการรันการวิเคราะห์ประสิทธิภาพเทียบกับมัน public ScTreeNode GetNodeForState(int rootIndex, float[] inputs) { 0.2% ScTreeNode node = RootNodes[rootIndex].TreeNode; 24.6% while (node.BranchData != null) { 0.2% BranchNodeData b = node.BranchData; 0.5% node = b.Child2; 12.8% if (inputs[b.SplitInputIndex] <= b.SplitValue) 0.8% node = b.Child1; } 0.4% return node; } BranchData เป็นฟิลด์ไม่ใช่คุณสมบัติ ฉันทำสิ่งนี้เพื่อป้องกันความเสี่ยงที่มันจะไม่อินไลน์ คลาส BranchNodeData เป็นดังนี้: public …

4
ระดับการเพิ่มประสิทธิภาพ GCC มีกี่ระดับ?
ระดับการเพิ่มประสิทธิภาพGCCมีกี่ระดับ? ฉันลอง gcc -O1, gcc -O2, gcc -O3 และ gcc -O4 ถ้าฉันใช้จำนวนมากมันจะไม่ได้ผล อย่างไรก็ตามฉันได้พยายามแล้ว gcc -O100 และรวบรวม ระดับการเพิ่มประสิทธิภาพมีกี่ระดับ?

25
การเพิ่มประสิทธิภาพ / ทางเลือก Java HashMap
ฉันต้องการสร้าง HashMap ขนาดใหญ่ แต่put()ประสิทธิภาพไม่ดีพอ ความคิดใด ๆ ? ยินดีรับคำแนะนำโครงสร้างข้อมูลอื่น ๆ แต่ฉันต้องการคุณสมบัติการค้นหาของ Java Map: map.get(key) ในกรณีของฉันฉันต้องการสร้างแผนที่ที่มี 26 ล้านรายการ การใช้ Java HashMap มาตรฐานอัตราการใส่จะช้าลงเหลือทนหลังจากการแทรก 2-3 ล้านครั้ง มีใครรู้บ้างว่าการใช้การแจกแจงรหัสแฮชที่แตกต่างกันสำหรับคีย์สามารถช่วยได้หรือไม่? วิธีการแฮชโค้ดของฉัน: byte[] a = new byte[2]; byte[] b = new byte[3]; ... public int hashCode() { int hash = 503; hash = hash * 5381 + (a[0] …

11
วิธีที่มีประสิทธิภาพที่สุดในการสร้างอักขระตัวแรกของ String ตัวพิมพ์เล็ก?
วิธีใดที่มีประสิทธิภาพที่สุดในการสร้างอักขระตัวแรกของตัวStringพิมพ์เล็ก ฉันคิดได้หลายวิธีในการทำสิ่งนี้: ใช้charAt()กับsubstring() String input = "SomeInputString"; String output = Character.toLowerCase(input.charAt(0)) + (input.length() > 1 ? input.substring(1) : ""); หรือใช้charอาร์เรย์ String input = "SomeInputString"; char c[] = input.toCharArray(); c[0] = Character.toLowerCase(c[0]); String output = new String(c); ฉันแน่ใจว่ามีวิธีที่ยอดเยี่ยมอื่น ๆ อีกมากมายในการบรรลุเป้าหมายนี้ คุณแนะนำเมนูใด?

12
วิธีการแบ่ง / แบ่งชุดข้อมูลลงในชุดข้อมูลการฝึกอบรมและทดสอบสำหรับเช่นการตรวจสอบความถูกต้องข้าม?
วิธีที่ดีในการแบ่งอาร์เรย์ NumPy แบบสุ่มเป็นชุดข้อมูลการฝึกอบรมและการทดสอบ / การตรวจสอบความถูกต้องคืออะไร? สิ่งที่คล้ายกับcvpartitionหรือcrossvalindฟังก์ชันใน Matlab

12
โดยทั่วไปคอลัมน์ใดที่สร้างดัชนีที่ดี
จากการติดตามผล " ดัชนีคืออะไรและฉันจะใช้เพื่อเพิ่มประสิทธิภาพการสืบค้นในฐานข้อมูลของฉันได้อย่างไร " ที่ฉันกำลังพยายามเรียนรู้เกี่ยวกับดัชนีคอลัมน์ใดบ้างที่เป็นดัชนีที่ดี โดยเฉพาะสำหรับฐานข้อมูล MS SQL? หลังจาก googling แล้วทุกสิ่งที่ฉันได้อ่านชี้ให้เห็นว่าคอลัมน์ที่โดยทั่วไปเพิ่มขึ้นและไม่ซ้ำกันทำให้ดัชนีที่ดี (เช่นการเพิ่มอัตโนมัติของ MySQL) ฉันเข้าใจสิ่งนี้ แต่ฉันใช้ MS SQL และฉันใช้ GUID สำหรับคีย์หลักดังนั้นดูเหมือนว่า ดัชนีนั้นจะไม่เป็นประโยชน์ต่อคอลัมน์ GUID ...

2
PAGEIOLATCH_SH wait type ใน SQL Server คืออะไร?
ฉันมีคำถามที่ต้องใช้เวลานานในระหว่างการทำธุรกรรม เมื่อผมได้รับของกระบวนการที่มันเป็นwait_typePAGEIOLATCH_SH ประเภทการรอนี้หมายถึงอะไรและจะแก้ไขได้อย่างไร

2
พิมพ์ธง JVM ทั้งหมด
พบ JVM Flag ที่น่าสนใจ: java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version มันพิมพ์ตัวเลือกต่างๆมากมายหลายร้อยแบบฉันไม่เคยได้ยินมาก่อน นอกจากนี้ยังพิมพ์ค่าเริ่มต้นซึ่งช่วยในการวินิจฉัยพฤติกรรมของ JVM ได้ดีขึ้น ธงที่น่าสนใจอีกประการหนึ่งคือ: -XX:+UnlockExperimentalVMOptions มีใครรู้เอกสารที่อธิบายแต่ละคนบ้างไหม

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