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

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

7
เมื่อใดที่ฉันควรจะลดปริมาณการทำงานให้กับ GPU แทนที่จะเป็น CPU?
มีการสร้างระบบใหม่เช่นOpenCLขึ้นเพื่อให้เราสามารถเรียกใช้โค้ดในตัวประมวลผลกราฟิกของเรามากขึ้นเรื่อย ๆ ซึ่งเหมาะสมเพราะเราควรจะสามารถใช้ประโยชน์จากพลังที่มากที่สุดในระบบของเราได้มากที่สุด อย่างไรก็ตามด้วยระบบใหม่ทั้งหมดนี้ดูเหมือนว่า GPU จะดีกว่า CPU ในทุกด้าน เนื่องจาก GPU สามารถทำการคำนวณแบบขนานได้ GPU แบบมัลติคอร์จึงดูเหมือนว่าพวกเขาจะดีกว่าซีพียูแบบมัลติคอร์มาก คุณสามารถทำการคำนวณหลาย ๆ อย่างในครั้งเดียวและปรับปรุงความเร็วได้อย่างแท้จริง ยังมีบางกรณีที่การประมวลผลแบบอนุกรมยังดีกว่าเร็วขึ้นและ / หรือมีประสิทธิภาพมากกว่าแบบขนานหรือไม่
15 optimization  cpu  gpu 

1
ทำไม Haskell ไม่สามารถหลีกเลี่ยงการประเมินซ้ำ ๆ โดยไม่มีข้อ จำกัด monomorphism
ฉันเพิ่งเสร็จสิ้นlearnyouahaskellวันอื่น ๆ และผมก็พยายามที่จะทำให้ความรู้สึกของข้อ จำกัด Monomorphism, ตามที่อธิบายไว้โดย Haskell วิกิพีเดีย ฉันคิดว่าฉันเข้าใจว่า MR สามารถป้องกันการประเมินซ้ำ ๆ ได้อย่างไร แต่ฉันล้มเหลวที่จะดูว่าทำไมการประเมินซ้ำ ๆ เหล่านั้นไม่สามารถหลีกเลี่ยงได้โดยวิธีที่ตรงไปตรงมามากขึ้น ตัวอย่างที่ฉันมีอยู่ในใจคือตัวอย่างที่ใช้โดยวิกิ: f xs = (len,len) where len = genericLength xs ที่เป็นประเภทgenericLengthNum a => [b] -> a เห็นได้ชัดว่าgenericLength xsต้องมีการคำนวณเพียงครั้งเดียวเพื่อประเมิน(len,len)เนื่องจากเป็นฟังก์ชันเดียวกันกับอาร์กิวเมนต์ที่เหมือนกัน และเราไม่จำเป็นต้องเห็นการเรียกร้องใด ๆfให้รู้ ดังนั้นทำไม Haskell ไม่สามารถทำการเพิ่มประสิทธิภาพนี้โดยไม่แนะนำกฎเช่น MR? การอภิปรายในหน้าวิกินั้นบอกฉันว่ามีบางอย่างเกี่ยวกับความจริงที่ว่าNumเป็น typeclass มากกว่าประเภทที่เป็นรูปธรรม แต่ถึงกระนั้นก็ไม่ควรที่จะรวบรวมไว้ในเวลาที่ฟังก์ชั่น pure จะคืนค่าเดิม - - และดังนั้นประเภทคอนกรีตเดียวกันของ Num …

4
ค่าบำรุงรักษาฐานการเขียนโปรแกรม SIMD
คำถาม: ฉันทามติของอุตสาหกรรมซอฟต์แวร์คือรหัสที่สะอาดและเรียบง่ายเป็นพื้นฐานของความมีชีวิตในระยะยาวของฐานรหัสและองค์กรที่เป็นเจ้าของ คุณสมบัติเหล่านี้นำไปสู่การลดค่าใช้จ่ายในการบำรุงรักษาและเพิ่มโอกาสในการสร้างรหัสฐานอย่างต่อเนื่อง อย่างไรก็ตามรหัส SIMD นั้นแตกต่างจากรหัสแอปพลิเคชันทั่วไปและฉันต้องการทราบว่ามีฉันทามติที่คล้ายกันเกี่ยวกับรหัสที่สะอาดและใช้งานง่ายที่ใช้เฉพาะกับรหัส SIMD พื้นหลังคำถามของฉัน ฉันเขียนโค้ด SIMD (คำสั่งคำสั่งเดียวหลายข้อมูล) มากมายสำหรับการประมวลผลภาพและการวิเคราะห์ที่หลากหลาย เมื่อเร็ว ๆ นี้ฉันยังต้องพอร์ตฟังก์ชั่นเหล่านี้จำนวนเล็กน้อยจากสถาปัตยกรรมหนึ่ง (SSE2) ไปยังอีก (ARM NEON) รหัสนี้เขียนขึ้นสำหรับซอฟต์แวร์ที่มีการย่อขนาดดังนั้นจึงไม่สามารถขึ้นอยู่กับภาษาที่เป็นกรรมสิทธิ์หากไม่มีสิทธิ์การแจกจ่ายซ้ำเช่น MATLAB ตัวอย่างของโครงสร้างรหัสทั่วไป: ใช้ประเภทเมทริกซ์ของOpenCV ( Mat)สำหรับการจัดการหน่วยความจำบัฟเฟอร์และอายุการใช้งานทั้งหมด หลังจากตรวจสอบขนาด (ขนาด) ของอาร์กิวเมนต์อินพุตพอยน์เตอร์ไปยังที่อยู่เริ่มต้นของแต่ละแถวของพิกเซลจะถูกนำมาใช้ จำนวนพิกเซลและที่อยู่เริ่มต้นของพิกเซลแต่ละแถวจากเมทริกซ์อินพุตแต่ละอันจะถูกส่งผ่านไปยังฟังก์ชัน C ++ ระดับต่ำ ฟังก์ชัน C ++ ระดับต่ำเหล่านี้ใช้ SIMD ภายใน (สำหรับสถาปัตยกรรม IntelและARM NEON ) โหลดจากและบันทึกไปยังที่อยู่ตัวชี้แบบดิบ ลักษณะของฟังก์ชั่น C ++ ระดับต่ำเหล่านี้: สิทธิพิเศษหนึ่งมิติ (ต่อเนื่องกันในหน่วยความจำ) ไม่จัดการกับการจัดสรรหน่วยความจำ …

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

2
ขั้นตอนวิธีฝูงมด
ฉันเป็นนักเรียนที่ทำงานเกี่ยวกับการจำลองฝูงมดสำหรับโครงการหลักสูตร อัลกอริทึมสำหรับมันคือ (เห็นได้ชัด) อัลกอริทึมมดอาณานิคม ฉันรู้ว่ามีอัลกอริทึมหลากหลายรูปแบบ แต่ทั้งหมดนั้นมีรายละเอียดทางคณิตศาสตร์มากเกินไปสำหรับเราดังนั้นเราจึงใช้วิธีการที่เรามี: มดเกิดที่อาณานิคมและต้องรวบรวมอาหารจากแหล่งต่าง ๆ เพื่อรักษาอาณานิคม มดทุกตัวมีความคล้ายคลึงกัน พื้นที่ที่มดเคลื่อนที่นั้นเป็นกริด 1,000x1000 ดังนั้นจุดกริดทุกจุดจะทำหน้าที่เป็นจุดที่ถูกต้องสำหรับมดที่จะเข้าครอบครอง ตอนนี้อัลกอริทึมทั้งหมดที่ฉันเจอเกี่ยวข้องกับการรักษาจุดยอดและขอบแยกต่างหาก แต่เนื่องจากเรา จำกัด การเคลื่อนไหวของมดเพียงสี่ทิศทาง (ขึ้น, ลง, ซ้าย, ขวา) ฉันคิดว่ามันไม่สำคัญว่าเราจะวางฟีโรโมนไว้ที่ไหน จุดกริดดังกล่าวข้างต้นเก็บฟีโรโมน มดจะปล่อยฟีโรโมนเฉพาะในกรณีที่ถืออาหาร สำหรับมดที่ตำแหน่ง (i, j) มันจะตัดสินใจว่าจะเคลื่อนที่ไปในขั้นตอนต่อไปโดยการรับฟีโรโมนในสี่โหนดที่อยู่ติดกันในบัญชีสูตรง่าย ๆ นั่นคือความน่าจะเป็นของการเดินทางไปยังโหนดโดย (จำนวนฟีโรโมนที่โหนดติดกันโดยเฉพาะ) / (จำนวนฟีโรโมนในจำนวน 4 โหนดติดกัน) มดไม่สามารถเดินทางกลับไปยังตำแหน่งที่เพิ่งมา มันสามารถทำได้ถ้ามันอยู่ในสถานที่ที่มีอาหารหรืออยู่ในอาณานิคม ตอนนี้ความกังวลของฉันคือ (และสิ่งที่เกิดขึ้นจริงในโปรแกรมของเรา) ว่าเมื่อมดคนแรกมาถึงตำแหน่งที่มีอาหารและหยิบขึ้นมาจากนั้นวิธีการทำงานของอัลกอริทึมของเรามันสามารถเคลื่อนย้ายได้ทุกที่! นี่เป็นเพราะมันจะทิ้งร่องรอยของฟีโรโมนไว้เท่านั้นเมื่อมันมีอาหารไม่ใช่ก่อนหน้านี้และมันเป็นมดตัวแรกไม่มีทางที่มีอยู่ ถ้ามดสามารถเคลื่อนที่ได้ทุกที่มดที่ไปถึงแหล่งอาหารหลังจากนั้นก็จะมีแนวโน้มที่จะติดตามมันเช่นกันแม้ว่ามันจะไม่เคลื่อนที่กลับไปยังอาณานิคม นี่เป็นการเอาชนะวัตถุประสงค์ของอัลกอริธึมทั้งหมด ดังนั้นคำถามของฉันคือ ข้อกังวลข้างต้นถูกต้องหรือไม่ ถ้าไม่เช่นนั้นทำไม ถ้าใช่แล้วจะจัดการกับมันอย่างไร? เราจำเป็นต้องทำการเปลี่ยนแปลงบางอย่างในความเข้าใจพื้นฐานของอัลกอริทึมเพื่อทำให้มันใช้งานได้จริงหรือไม่? อะไรคือสิ่งที่บอบบาง แต่สำคัญอื่น …

4
อะไรเป็นสิ่งสำคัญเมื่อปรับแต่งแคช CPU (ใน C)
อ่านหนังสือเหล่านี้สองคำถามผมเห็นว่าพฤติกรรมของแคช CPU เข้าใจสามารถที่สำคัญเมื่อต้องรับมือกับข้อมูลจำนวนมากในหน่วยความจำ ฉันต้องการเข้าใจวิธีการทำงานของแคชเพื่อเพิ่มเครื่องมืออื่นลงในกล่องเครื่องมือเพิ่มประสิทธิภาพของฉัน ประเด็นหลักเกี่ยวกับวิธีการทำงานของแคช CPU เพื่อให้ฉันสามารถเขียนโค้ดที่ใช้อย่างสมเหตุสมผลได้อย่างไร มีวิธีในการรหัสโปรไฟล์เพื่อดูว่าการใช้แคชที่ไม่ดีกำลังทำให้ช้าลงหรือไม่?

3
การปฏิบัติที่ดีที่สุดบนเว็บมีความสำคัญหรือไม่หาก บริษัท ใหญ่ ๆ ละเมิดลิขสิทธิ์อยู่เสมอ
โดยทั่วไปจะมีกฎและแนวทางปฏิบัติที่ดีที่สุดซึ่งจะช่วยเพิ่มประสิทธิภาพเว็บไซต์นำลูกค้าใหม่ ๆ และโดยทั่วไปแล้วทำให้ผู้ใช้มีประสบการณ์การใช้งานที่รวดเร็วราบรื่นและน่าพอใจในขณะที่ (บางครั้ง) ลดภาระของเซิร์ฟเวอร์ นอกจากนี้โดยปกติแล้ว บริษัท ที่ใหญ่ที่สุดไม่สนใจที่จะใช้วิธีปฏิบัติที่ดีที่สุดเหล่านั้น ยกเว้นบาง บริษัท (เช่น Google) บนเว็บไซต์ที่ใหญ่ที่สุดเราสามารถดู: เลย์เอาต์ของตารางไม่ใช่ JavaScript ขนาดเล็กไม่มี CSS sprite ที่ควรเป็นไฟล์ CSS หลายไฟล์ JavaScript ที่ล่วงล้ำแม้ในสถานการณ์ที่ง่ายต่อการไม่สร้างความรำคาญเรียกใช้ไฟล์ JavaScript ใน<head/>ฯลฯ ข้อผิดพลาดที่ไม่มีความหมายป๊อปอัปที่น่ารำคาญลงทะเบียนแบบฟอร์มด้วยฟิลด์จำนวนมากที่ต้องกรอกปัญหา UX ในการลงทะเบียน questions คำถามที่โง่และสถานการณ์ที่ทำให้ไม่สามารถใช้เว็บไซต์²สถานการณ์ที่สับสนในส่วนสำคัญของเว็บไซต์³การเปลี่ยนเส้นทางหลายหน้าช้าเป็นต้น . ในอีกด้านหนึ่ง บริษัท เหล่านั้นจ่ายเงินเป็นจำนวนมากเพื่อพัฒนาเพิ่มประสิทธิภาพและโฮสต์เว็บไซต์ของพวกเขาเนื่องจากความสำเร็จของพวกเขาขึ้นอยู่กับบางส่วนหรือทั้งหมด ในทางกลับกันพวกเขากำลังละเมิดแนวปฏิบัติที่ดีที่สุดอย่างต่อเนื่องในขณะที่ผู้คนที่สนับสนุนแนวทางปฏิบัติที่ดีที่สุดนั้นอธิบายว่าพวกเขาช่วยให้บรรลุเว็บไซต์ UX ที่ดีขึ้นและเร็วขึ้นโดยมีรอยเท้าน้อยต่อสิ่งแวดล้อม (ซึ่งอาจไม่สำคัญ . ในกรณีเช่นนี้มันมีเหตุผลที่จะถาม: หาก บริษัท ขนาดใหญ่ที่ประสบความสำเร็จจริงๆมีเงินจำนวนมากสำหรับเว็บไซต์และพนักงานที่มีความสามารถและการดูแลเกี่ยวกับการเพิ่มประสิทธิภาพเว็บไซต์ละเมิดแนวทางปฏิบัติที่ดีที่สุดเหล่านั้นอย่างสม่ำเสมอหรือไม่ หรืออีกนัยหนึ่งคือหากการปฏิบัติที่ดีที่สุดนั้นสำคัญและช่วยเพิ่มประสิทธิภาพเว็บไซต์อย่างมากทำไม บริษัท เหล่านั้นไม่สนใจพวกเขา ลองตัวอย่างของ Dell.com ฉันค่อนข้างมั่นใจว่าพวกเขาจ้างสิ่งที่ดีที่สุดเพื่อสร้างหน้าแรกของพวกเขา หน้าแรกของพวกเขาใช้เค้าโครงตาราง …

6
ทำไมคอมไพเลอร์ไม่รวมทุกอย่างเข้าไว้ด้วยกัน? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา บางครั้งคอมไพเลอร์เรียกฟังก์ชั่นแบบอินไลน์ นั่นหมายความว่าพวกเขาย้ายรหัสของฟังก์ชั่นที่เรียกว่าเป็นฟังก์ชั่นการโทร สิ่งนี้ทำให้สิ่งต่าง ๆ เร็วขึ้นเล็กน้อยเนื่องจากไม่จำเป็นต้องกดและวางสิ่งต่าง ๆ ในและนอกกองการโทร ดังนั้นคำถามของฉันคือทำไมไม่คอมไพเลอร์แบบอินไลน์ทุกอย่าง? ฉันคิดว่ามันจะทำให้การปฏิบัติการเร็วขึ้นอย่างเห็นได้ชัด เหตุผลเดียวที่ฉันคิดได้ก็คือปฏิบัติการที่มีขนาดใหญ่กว่าอย่างมาก แต่ในปัจจุบันนี้มีหน่วยความจำหลายร้อย GB หรือไม่ ประสิทธิภาพที่ปรับปรุงแล้วไม่คุ้มค่าใช่หรือไม่ มีเหตุผลอื่นใดที่คอมไพเลอร์ไม่เพียงแค่อินไลน์การเรียกใช้ฟังก์ชันทั้งหมดหรือไม่

1
รหัสซ้ำซ้อนส่งไปป์ที่มีส่วนหน้าแบบไมโคร
ความเข้าใจของฉันเกี่ยวกับ Micro-frontends คือปัญหาสำคัญที่พวกเขาแก้ปัญหาคือการช่วยให้องค์กรมีทีมที่แตกต่างกันหลายทีมที่เป็นไปได้ทำงานกับแต่ละองค์ประกอบ / แอพขนาดเล็กที่จะใช้ในการเขียนเว็บแอปพลิเคชันขนาดใหญ่ นี่คือปัญหาสำคัญที่ต้องแก้ไขคือความสามารถของหลาย ๆ ทีมในการทำงานอย่างอิสระและยังสามารถสร้างคอมโพสิตขนาดใหญ่ ปัญหาคือไม่ได้เกี่ยวกับการมีกำปล่อยลีนสำหรับผู้ใช้ปลายทาง ความเข้าใจนั้นถูกต้องหรือไม่ เป็นความจริงหรือไม่ว่าหากเรามีแอปขนาดเล็กหลายตัวที่ใช้ในการเขียนแอปพลิเคชันเว็บขนาดใหญ่เราอาจมีแอพขนาดเล็กหลายตัวที่ส่งไลบรารี่ Javascript เดียวกัน ( เช่น Lodash ) ลงไปยังเบราว์เซอร์ของผู้ใช้ปลายทาง การรวมกลุ่มของผู้จัดจำหน่ายแต่ละรายซึ่งนำไปสู่รหัสซ้ำซ้อน / ซ้ำซ้อนจำนวนหนึ่งที่ถูกส่งไปยังผู้ใช้ นี่ไม่ใช่ความกังวลที่เราควรกังวลในขณะที่ออกแบบแอปพลิเคชันส่วนหน้าใช่ไหม

4
วิธีการต่อต้านรหัสฐานช้าลงอย่างสม่ำเสมอ
เรากำลังทำงานอยู่ในระดับปานกลาง C ขนาด ++ รหัสฐาน (10Mloc) ซึ่งผ่านความพยายามเพิ่มประสิทธิภาพของเราจะกลายเป็นเหมือนกันช้า รหัสฐานนี้เป็นชุดของห้องสมุดที่เรารวมกันเพื่อให้ทำงานได้ เมื่อเฟรมเวิร์กทั่วไปของวิธีที่การสื่อสารของไลบรารีเหล่านี้ได้รับการพัฒนามีความสำคัญต่อประสิทธิภาพการทำงานและในภายหลังเมื่อมีส่วนเพิ่มมากขึ้นเฟรมเวิร์กทั่วไปจะไม่เปลี่ยนแปลงมากนัก การปรับให้เหมาะสมทำเมื่อจำเป็นและตามที่ฮาร์ดแวร์ของเราพัฒนาขึ้น การตัดสินใจครั้งแรกนี้มีราคาแพงชัดเจนมากในภายหลังเท่านั้น ขณะนี้เราอยู่ในจุดที่การเพิ่มประสิทธิภาพเพิ่มเติมนั้นมีราคาแพงกว่ามากเนื่องจากพวกเขาต้องการการเขียนส่วนใหญ่ของฐานรหัส เราพบว่าตัวเองกำลังเข้าใกล้จุดต่ำสุดที่ไม่พึงประสงค์ในท้องถิ่นเนื่องจากเรารู้ว่าในหลักการแล้วรหัสควรจะสามารถทำงานได้เร็วขึ้นมาก มีวิธีการที่ประสบความสำเร็จหรือไม่ซึ่งช่วยในการตัดสินใจว่าอะไรจะเกิดขึ้นกับการวิวัฒนาการของรหัสฐานไปสู่โซลูชั่นที่มีประสิทธิภาพสูงสุดทั่วโลกซึ่งไม่สับสนอย่างง่ายดายจากโอกาสในการปรับให้เหมาะสมที่ง่ายดาย? แก้ไข หากต้องการตอบคำถามว่าเราโปรไฟล์อย่างไร: เรามีเพียงสถานการณ์จำลองที่แตกต่างกันสองวิธีที่วิธีการใช้รหัสนี้ทั้งคู่ขนานที่น่าอาย การทำโปรไฟล์ทำได้ทั้งเวลาที่นาฬิกาแขวนมีค่าเฉลี่ยในกลุ่มตัวอย่างขนาดใหญ่ของอินพุตและการทำงานที่มีรายละเอียดมากขึ้น (ต้นทุนการสอน สิ่งนี้ทำงานได้ดีเนื่องจากเราทำงานเฉพาะในเครื่องที่เป็นเนื้อเดียวกันมาก (คลัสเตอร์ของเครื่องที่เหมือนกันสองพันเครื่อง) เนื่องจากเรามักจะทำให้เครื่องของเรายุ่งตลอดเวลาส่วนใหญ่ทำงานได้เร็วขึ้นหมายความว่าเราสามารถดูสิ่งใหม่เพิ่มเติม ปัญหาคือแน่นอนว่าเมื่อรูปแบบการป้อนข้อมูลใหม่ปรากฏขึ้นพวกเขาอาจได้รับโทษขั้นปลายเนื่องจากเราลบความไร้ประสิทธิภาพที่ชัดเจนที่สุดสำหรับกรณีการใช้งานอื่น ๆ ดังนั้นจึงอาจลดจำนวนสถานการณ์
11 c++  optimization 

4
วิธีจัดทำเอกสารและสอนผู้อื่น“ เพิ่มประสิทธิภาพจนเกินกว่าจะจดจำ” โค้ดที่ต้องใช้การคำนวณอย่างเข้มข้น?
บางครั้งมีโค้ด 1% ที่เข้มข้นในการคำนวณเพียงพอที่ต้องการการเพิ่มประสิทธิภาพระดับต่ำที่สุดที่หนักที่สุด ตัวอย่างคือการประมวลผลวิดีโอการประมวลผลภาพและการประมวลผลสัญญาณทุกชนิดโดยทั่วไป เป้าหมายคือเพื่อจัดทำเอกสารและสอนเทคนิคการปรับให้เหมาะสมเพื่อให้โค้ดไม่สามารถกลายเป็นสิ่งที่ไม่สามารถทำลายได้และมีแนวโน้มที่จะถูกลบออกโดยนักพัฒนาซอฟต์แวร์รุ่นใหม่ (*) (*) แม้จะมีความเป็นไปได้ว่าการเพิ่มประสิทธิภาพเฉพาะนั้นไม่มีประโยชน์อย่างสมบูรณ์ในซีพียูที่คาดเดาไม่ได้ในอนาคตเช่นนั้นรหัสจะถูกลบต่อไป พิจารณาว่าข้อเสนอซอฟต์แวร์ (เชิงพาณิชย์หรือโอเพ่นซอร์ส) รักษาความได้เปรียบในการแข่งขันโดยมีรหัสที่เร็วที่สุดและใช้ประโยชน์จากสถาปัตยกรรมซีพียูใหม่ล่าสุดผู้เขียนซอฟต์แวร์มักจะต้องปรับแต่งโค้ดเพื่อให้ทำงานได้เร็วขึ้นในขณะเดียวกัน task, whlist ที่ยอมรับข้อผิดพลาดในการปัดเศษจำนวนเล็กน้อย โดยทั่วไปผู้เขียนซอฟต์แวร์สามารถเก็บฟังก์ชันหลาย ๆ เวอร์ชันไว้เป็นเอกสารของการเพิ่มประสิทธิภาพ / การเขียนอัลกอริทึมใหม่ที่เกิดขึ้น ใครทำให้รุ่นเหล่านี้พร้อมให้ผู้อื่นศึกษาเทคนิคการปรับให้เหมาะสมได้อย่างไร ที่เกี่ยวข้อง: ทำความสะอาดโค้ดที่อ่านได้และโค้ดที่อ่านยากอย่างรวดเร็ว เมื่อข้ามเส้น?

3
อัลกอริทึมลิฟต์และการใช้งาน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันอยากรู้ว่าลิฟต์ (จริง) ทำงานอย่างไร แต่จนถึงตอนนี้ฉันไม่สามารถหาข้อมูลเกี่ยวกับอัลกอริทึมที่พวกเขาใช้หรือซอฟต์แวร์ (ถ้ามี) สำหรับการจำลอง ใครช่วยให้ฉันอ้างอิงสำหรับที่?

5
การเพิ่มประสิทธิภาพการจัดสรรสตริงที่ซ้ำซ้อนใน C ++
ฉันมีองค์ประกอบ C ++ ที่ค่อนข้างซับซ้อนซึ่งประสิทธิภาพได้กลายเป็นปัญหา การทำโปรไฟล์แสดงให้เห็นว่าเวลาดำเนินการส่วนใหญ่นั้นใช้เพียงการจัดสรรหน่วยความจำสำหรับstd::strings เท่านั้น ฉันรู้ว่ามีจำนวนมากซ้ำซ้อนในสายเหล่านั้น ค่าจำนวนเล็กน้อยทำซ้ำบ่อยมาก แต่ก็มีค่าที่ไม่ซ้ำกันจำนวนมาก โดยทั่วไปแล้วสตริงค่อนข้างสั้น ตอนนี้ฉันแค่คิดว่ามันจะทำให้รู้สึกถึงการใช้ซ้ำการจัดสรรบ่อยเหล่านั้นอย่างใด แทนที่จะเป็น 1,000 พอยน์เตอร์ถึง 1,000 ค่า "foobar" ที่แตกต่างกันฉันสามารถมี 1,000 พอยน์เตอร์ต่อหนึ่งค่า "foobar" ความจริงที่ว่านี้จะมีประสิทธิภาพมากขึ้นของหน่วยความจำเป็นโบนัสที่ดี แต่ฉันส่วนใหญ่กังวลเกี่ยวกับความล่าช้าที่นี่ ฉันเดาว่าตัวเลือกหนึ่งจะรักษารีจิสทรีของค่าที่จัดสรรไว้บางส่วน แต่เป็นไปได้หรือไม่ที่จะทำให้การค้นหารีจิสทรีเร็วขึ้นกว่าการจัดสรรหน่วยความจำซ้ำซ้อน นี่เป็นวิธีที่ปฏิบัติได้หรือไม่?

5
คุณควรลดการสร้างวัตถุขนาดเล็กจำนวนมากหรือไม่
เมื่อเขียนสิ่งที่สร้างวัตถุขนาดเล็กจำนวนมาก (1,000s) บ่อยครั้งคุณควรพยายามลดประสิทธิภาพการทำงานลงหรือไม่ โดยเฉพาะอย่างยิ่งหากคุณไม่ทราบว่าระบบนั้นจะทำงานบนเดสก์ท็อประดับต่ำถึงสูงหรือแม้แต่มือถือ สำหรับมือถือฉันได้ยินมาว่าการสร้างวัตถุจำนวนมากเป็นอุปสรรคต่อประสิทธิภาพการทำงานที่ดีแม้ว่าฉันจะไม่รู้ว่ามันเป็นความจริงแค่ไหน ฉันมีตัวอย่างที่แสดงความคิดนี้ได้ดี drawPixel(Point)ในโปรแกรมกราฟิกบอกว่ามีวิธีการที่จะใช้สำหรับการวาดภาพทั้งหมดที่เรียกว่านึกคิด อาจมีการสร้างคะแนน 1,000 คะแนนและอาจเกิดซ้ำบ่อยเช่นในเกมที่สามารถเรียก 60+ ครั้งต่อวินาที หรือdrawPixel(int x, int y)อาจใช้เพื่อลดการสร้างออบเจ็กต์ Point จำนวนมาก ในการออกแบบเชิงวัตถุฉันคิดว่าการใช้ Point น่าจะเหมาะสมกว่า อย่างไรก็ตามการใช้ประเภทดั้งเดิมอาจเพิ่มประสิทธิภาพ การเพิ่มประสิทธิภาพอาจไม่ได้ผลในกรณีส่วนใหญ่ แต่ฉันไม่แน่ใจเกี่ยวกับสิ่งต่าง ๆ เช่นโทรศัพท์มือถือหรือเครื่องรุ่นเก่า ประสิทธิภาพการทำงานเพิ่มขึ้นจากการทำอะไรแบบนี้และมันเป็นสิ่งที่ควรนำมาพิจารณาด้วย?

7
เมื่อใดที่เริ่มคิดเกี่ยวกับความยืดหยุ่น [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันมีปัญหาตลก แต่ก็แย่มาก ฉันกำลังจะเปิดตัวแอพ (iPhone) ใหม่ มันเป็นเกมแบบเล่นพร้อมกันหลายคนที่ทำงานบนแบ็คเอนด์ที่กำหนดเองของฉัน แต่ฉันกลัวที่จะเปิดตัว ด้วยเหตุผลบางอย่างฉันคิดว่ามันอาจกลายเป็นสิ่งที่ยิ่งใหญ่และความนิยมของมันจะทำลายฐานข้อมูล MySQL + เซิร์ฟเวอร์เดี่ยวที่โดดเดี่ยวของฉัน ในมือข้างหนึ่งฉันคิดว่าถ้ามันเพิ่มขึ้นฉันควรเตรียมพร้อมและมีโครงสร้างพื้นฐานที่ปรับขนาดได้แล้ว ในทางกลับกันฉันแค่รู้สึกอยากจะนำมันออกไปสู่โลกและดูว่าเกิดอะไรขึ้น ฉันมักจะอ่านสิ่งต่าง ๆ เช่น "การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากของความชั่วร้ายทั้งหมด" หรือผู้คนที่บอกว่าคุณควรสร้างเกมนักฆ่าของคุณตอนนี้ด้วยเครื่องมือที่พร้อมใช้งานและกังวลเรื่องอื่น ๆ เช่นความยืดหยุ่นในภายหลัง ฉันชอบที่จะได้ยินความคิดเห็นเกี่ยวกับเรื่องนี้จากผู้เชี่ยวชาญหรือผู้ที่มีประสบการณ์เกี่ยวกับเรื่องนี้ ขอบคุณ!

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