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

กระบวนการแก้ไขซอฟต์แวร์เพื่อทำให้บางส่วนทำงานได้อย่างมีประสิทธิภาพมากขึ้นหรือใช้ทรัพยากรน้อยลง โดยทั่วไปนี่หมายถึงมันดำเนินการได้เร็วขึ้นหรือต้องการทรัพยากรน้อยลง

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

17
เคล็ดลับการเพิ่มประสิทธิภาพระดับต่ำ C ++ [ปิด]
สมมติว่าคุณมีอัลกอริธึมที่ดีที่สุดแล้วโซลูชันระดับต่ำสุดที่คุณสามารถเสนอได้สำหรับการบีบอัตราเฟรม Sweet Sweet สองสามหยดสุดท้ายของรหัส C ++ คืออะไร มันไปโดยไม่บอกว่าเคล็ดลับเหล่านี้ใช้เฉพาะกับส่วนของรหัสที่สำคัญซึ่งคุณได้เน้นไว้ใน profiler ของคุณแล้ว แต่ควรเป็นการปรับปรุงที่ไม่มีโครงสร้างในระดับต่ำ ฉันได้ยกตัวอย่าง
79 c++  optimization 

6
ฉันจะเพิ่มประสิทธิภาพโลก Minecraft-esque voxel ได้อย่างไร?
ฉันพบว่าโลกขนาดใหญ่ที่ยอดเยี่ยมของ Minecraft นั้นช้ามากในการนำทางแม้ว่าจะใช้ Quad-Core และกราฟิกการ์ดเนื้อ ฉันถือว่าความเชื่องช้าของ Minecraft มาจาก: Java เนื่องจากการแบ่งพาร์ติชันและการจัดการหน่วยความจำเร็วขึ้นในภาษา C ++ การแบ่งพาร์ติชันที่อ่อนแอของโลก ฉันอาจผิดทั้งสองข้อ อย่างไรก็ตามนี่ทำให้ฉันคิดถึงวิธีที่ดีที่สุดในการจัดการโลก voxel ขนาดใหญ่ มันเป็นโลก 3 มิติจริงที่บล็อกสามารถอยู่ในส่วนใดของโลกก็เป็นพื้นอาร์เรย์ใหญ่ 3D [x][y][z]ซึ่งแต่ละบล็อกในโลกที่มีประเภท (เช่นBlockType.Empty = 0, BlockType.Dirt = 1ฯลฯ ) ฉันคิดว่าเพื่อให้โลกประเภทนี้ทำงานได้ดีคุณจะต้อง: ใช้ต้นไม้ที่มีความหลากหลาย ( oct / kd / bsp ) เพื่อแยกลูกบาศก์ทั้งหมดออก ดูเหมือนว่า oct / kd จะเป็นตัวเลือกที่ดีกว่าเนื่องจากคุณสามารถแบ่งพาร์ติชันในระดับต่อคิวบ์ไม่ใช่ระดับต่อสามเหลี่ยม ใช้อัลกอริทึมบางอย่างเพื่อหาว่าบล็อกใดที่สามารถเห็นได้ในปัจจุบันเนื่องจากบล็อกที่อยู่ใกล้กับผู้ใช้มากขึ้นอาจทำให้บล็อกยุ่งเหยิง ทำให้วัตถุบล็อกมีน้ำหนักเบาดังนั้นจึงเป็นการเพิ่มและนำออกจากต้นไม้ได้อย่างรวดเร็ว ฉันเดาว่าไม่มีคำตอบที่ถูกต้องสำหรับเรื่องนี้ แต่ฉันสนใจที่จะเห็นความคิดเห็นของประชาชนในเรื่องนี้ คุณจะปรับปรุงประสิทธิภาพในโลก voxel …

10
วิธีที่เร็วที่สุดในการหาจุดตัดขอบ 2D คืออะไร
สมมติว่าแต่ละกล่องวัตถุมีคุณสมบัติ x, y, ความกว้างความสูงและมีต้นกำเนิดที่จุดศูนย์กลางของพวกเขาและไม่ว่าวัตถุหรือกล่องขอบเขตการหมุน

3
ปรับแต่งเกม XNA 2D
มันสมเหตุสมผลไหมที่จะใช้ตรรกะเพื่อข้ามการเรนเดอร์วัตถุนอกวิวพอร์ตหรือฉันไม่ควรสนใจมันและปล่อยให้ Framework ทำมัน?
56 xna  2d  optimization  xna-4.0 

1
แคชเอนทิตีระบบมีประสิทธิภาพอย่างไร?
เมื่อเร็ว ๆ นี้ฉันได้ทำการอ่านมากมายเกี่ยวกับระบบเอนทิตีเพื่อนำไปใช้ในเอ็นจิ้นเกม C ++ / OpenGL ของฉัน ประโยชน์หลักสองประการที่ฉันได้ยินอย่างต่อเนื่องเกี่ยวกับระบบเอนทิตีคือ การสร้างเอนทิตีแบบใหม่ ๆ ได้ง่ายเนื่องจากไม่ต้องยุ่งเกี่ยวกับลำดับชั้นการสืบทอดที่ซับซ้อนและ ประสิทธิภาพแคชซึ่งฉันมีปัญหาในการทำความเข้าใจ ทฤษฎีนี้เรียบง่ายแน่นอน แต่ละองค์ประกอบจะถูกเก็บไว้อย่างต่อเนื่องในบล็อกของหน่วยความจำดังนั้นระบบที่ใส่ใจเกี่ยวกับองค์ประกอบนั้นสามารถทำซ้ำในรายการทั้งหมดโดยไม่ต้องกระโดดไปรอบ ๆ ในหน่วยความจำและฆ่าแคช ปัญหาคือฉันไม่สามารถคิดถึงสถานการณ์ที่เป็นจริงได้ อันดับแรกให้ดูที่การจัดเก็บส่วนประกอบและวิธีการอ้างอิงซึ่งกันและกัน ระบบจำเป็นต้องทำงานกับส่วนประกอบได้มากกว่าหนึ่งองค์ประกอบนั่นคือทั้งระบบเรนเดอร์และระบบฟิสิกส์จำเป็นต้องเข้าถึงส่วนประกอบที่แปลงสภาพ ฉันได้เห็นการใช้งานที่เป็นไปได้หลายอย่างซึ่งกล่าวถึงเรื่องนี้และไม่มีสิ่งใดที่ทำได้ดี คุณสามารถมีพอยน์เตอร์เก็บส่วนประกอบไปยังส่วนประกอบอื่น ๆ หรือพอยน์เตอร์ไปยังเอนทิตีที่เก็บพอยน์เตอร์ไปยังส่วนประกอบ อย่างไรก็ตามทันทีที่คุณส่งพอยน์เตอร์ไปผสมคุณก็ฆ่าประสิทธิภาพของแคชแล้ว คุณสามารถมั่นใจได้ว่าทุกองค์ประกอบของอาเรย์นั้นมีขนาดใหญ่ 'n' โดยที่ 'n' คือจำนวนเอนทิตีที่มีอยู่ในระบบ สิ่งนี้ทำให้ยากมากในการเพิ่มประเภทส่วนประกอบใหม่ลงในเอ็นจิ้น แต่ยังคงทิ้งประสิทธิภาพของแคชไว้เพราะคุณกำลังกระโดดจากอาร์เรย์หนึ่งไปยังอีกอาร์เรย์หนึ่ง คุณสามารถแทรกเอนทิตี้ของอาร์เรย์แทนการเก็บอาร์เรย์แยกต่างหาก แต่คุณยังคงสูญเสียความจำ ทำให้ราคาแพงอย่างไม่น่าเชื่อในการเพิ่มส่วนประกอบหรือระบบใหม่ แต่ตอนนี้มีประโยชน์เพิ่มเติมของการทำให้ระดับเก่าทั้งหมดของคุณเป็นโมฆะและบันทึกไฟล์ นี่คือทั้งหมดที่สมมติว่าเอนทิตีถูกประมวลผลเชิงเส้นในรายการทุกเฟรมหรือติ๊ก ในความเป็นจริงนี่ไม่ใช่กรณี สมมติว่าคุณใช้เซกเตอร์ / พอร์ทัลเรนเดอร์หรืออ็อคทรีเพื่อทำการคัดแยก คุณอาจเก็บเอนทิตีต่อเนื่องกันภายในเซกเตอร์ / โหนด แต่คุณจะกระโดดไปมาไม่ว่าคุณจะชอบหรือไม่ก็ตาม จากนั้นคุณมีระบบอื่น ๆ ซึ่งอาจต้องการเอนทิตีที่จัดเก็บตามลำดับอื่น AI อาจไม่เป็นไรสำหรับการจัดเก็บรายการใหญ่จนกว่าคุณจะเริ่มทำงานกับ …

7
คำแนะนำของ Microsoft ในการใช้คุณสมบัติ C # ใช้ได้กับการพัฒนาเกมหรือไม่
ฉันเข้าใจว่าบางครั้งคุณก็ต้องการคุณสมบัติเช่น: public int[] Transitions { get; set; } หรือ: [SerializeField] private int[] m_Transitions; public int[] Transitions { get { return m_Transitions; } set { m_Transitions = value; } } แต่ความประทับใจของฉันคือว่าในการพัฒนาเกมถ้าคุณไม่มีเหตุผลที่จะทำอย่างอื่นทุกอย่างควรจะเร็วที่สุด ความประทับใจของฉันจากสิ่งที่ฉันอ่านคือ Unity 3D ไม่แน่ใจว่าจะเข้าถึงแบบอินไลน์ผ่านคุณสมบัติได้ดังนั้นการใช้คุณสมบัติจะส่งผลให้มีการเรียกใช้ฟังก์ชันเพิ่มเติม ฉันถูกต้องหรือไม่ที่จะเพิกเฉยต่อคำแนะนำของ Visual Studio เพื่อไม่ให้ใช้ช่องสาธารณะ (โปรดทราบว่าเราใช้ในint Foo { get; private set; }กรณีที่มีข้อได้เปรียบในการแสดงการใช้งานที่ต้องการ) ฉันทราบว่าการเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นสิ่งที่ไม่ดี แต่อย่างที่ฉันได้กล่าวไว้ในการพัฒนาเกมคุณจะไม่ทำอะไรช้า ๆ เมื่อความพยายามคล้าย ๆ …

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

6
วิธีเพิ่มประสิทธิภาพฟังก์ชั่นระยะทาง?
ในขณะที่พัฒนาเกมคล้าย RTS ที่เรียบง่ายพอสมควรฉันสังเกตว่าการคำนวณระยะทางของฉันทำให้เกิดผลกระทบต่อประสิทธิภาพ ตลอดเวลามีการตรวจสอบระยะทางเพื่อทราบว่ายูนิตอยู่ในระยะใกล้เป้าหมายหรือไม่หากกระสุนปืนมาถึงเป้าหมายหากผู้เล่นวิ่งผ่านรถปิคอัพชนทั่วไป ฯลฯ รายการจะดำเนินต่อไปและตรวจสอบหา ระยะห่างระหว่างจุดสองจุดใช้กันมาก คำถามของฉันเกี่ยวกับเรื่องนั้นอย่างแน่นอน ฉันต้องการทราบว่าผู้พัฒนาเกมทางเลือกมีอะไรบ้างในการตรวจสอบระยะทางนอกเหนือจากวิธี sqrt (x * x + y * y) ตามปกติซึ่งใช้เวลาค่อนข้างนานหากเราทำการแสดงหลายพันครั้งต่อเฟรม ฉันต้องการที่จะชี้ให้เห็นว่าฉันทราบระยะทางแมนฮัตตันและการเปรียบเทียบระยะทางกำลังสอง (โดยข้ามคอขวด sqrt) มีอะไรอีกไหม

7
การคำนวณแรงโน้มถ่วงที่เหมาะสมที่สุด
ฉันมีสิ่งของหลายชิ้นที่มีขนาดและความเร็วต่างกันไปซึ่งกันและกัน ในการอัพเดททุกครั้งฉันต้องข้ามวัตถุทุกอย่างและรวมแรงเข้าด้วยกันเนื่องจากแรงโน้มถ่วงของวัตถุอื่น ๆ มันไม่ได้ปรับขนาดได้ดีมากเป็นหนึ่งในสองคอขวดใหญ่ที่ฉันพบในเกมของฉันและฉันไม่แน่ใจว่าต้องทำอย่างไรเพื่อปรับปรุงประสิทธิภาพ มันรู้สึกเหมือนฉันควรจะสามารถที่จะปรับปรุงประสิทธิภาพการทำงาน เมื่อถึงเวลาใดก็ตาม 99% ของวัตถุในระบบอาจมีอิทธิพลเพียงเล็กน้อยต่อวัตถุ แน่นอนว่าฉันไม่สามารถจัดเรียงวัตถุตามมวลและพิจารณาวัตถุที่ใหญ่ที่สุด 10 อันดับแรกหรือบางสิ่งบางอย่างเท่านั้นเนื่องจากแรงแตกต่างกันไปตามระยะทางมากกว่ามวล (สมการนี้อยู่ในแนวของforce = mass1 * mass2 / distance^2) ฉันคิดว่าการประมาณที่ดีคือการพิจารณาวัตถุที่ใหญ่ที่สุดและวัตถุที่อยู่ใกล้ที่สุดโดยไม่สนใจเศษหินเล็ก ๆ หลายร้อยชิ้นที่อยู่อีกด้านหนึ่งของโลกซึ่งอาจไม่ส่งผลกระทบใด ๆ ต่อวัตถุ แต่เพื่อค้นหาว่าวัตถุใดเป็นวัตถุ ที่ใกล้เคียงที่สุดฉันต้องย้ำไปที่วัตถุทั้งหมดและตำแหน่งของพวกเขาจะเปลี่ยนแปลงตลอดเวลาดังนั้นฉันจึงไม่สามารถทำได้เพียงครั้งเดียว ขณะนี้ฉันกำลังทำสิ่งนี้: private void UpdateBodies(List<GravitatingObject> bodies, GameTime gameTime) { for (int i = 0; i < bodies.Count; i++) { bodies[i].Update(i); } } //... public virtual void …

6
การร่ายเวทย์ - วิธีเพิ่มประสิทธิภาพความเสียหายต่อวินาที
ลองนึกภาพเรามีพ่อมดที่รู้เวทย์บางอย่าง แต่ละคาถามี 3 คุณสมบัติ: ดาเมจ, เวลาเย็นลงและเวลาร่าย สิ่งที่มาตรฐาน RPG สวย เวลาคูลดาวน์: ระยะเวลา (t) ที่ใช้ก่อนที่จะสามารถใช้คาถานั้นได้อีกครั้ง คาถาจะ "คูลดาวน์" ทันทีที่มันเริ่มร่าย ระยะเวลาร่าย: ระยะเวลา (t) ที่ใช้ในการใช้คาถา ในขณะที่ตัวช่วยสร้างกำลังทำการร่ายคาถาอย่างอื่นไม่สามารถร่ายและไม่สามารถยกเลิกได้ คำถามคือคุณจะสร้างความเสียหายให้มากที่สุดด้วยคาถาต่าง ๆ ได้อย่างไร? มันง่ายในการคำนวณความเสียหายสูงสุดต่อเวลาร่าย แต่จะเกี่ยวกับอะไรในสถานการณ์ที่ดีกว่าที่จะรอก่อนที่จะ "จมปลัก" ร่ายคาถาสร้างความเสียหายต่ำเมื่อมีสกิลที่สูงกว่ามาก? ตัวอย่างเช่น, Fireball: 3000 ดาเมจ, ระยะเวลาร่าย 3 วินาที, 6 วินาทีทำให้เย็นลง Frostbolt: 20 ดาเมจ, ระยะเวลาร่าย 4 วินาที, 4 วินาทีทำให้เย็นลง Fireblast: 3 ดาเมจ, ระยะเวลาร่าย 3 …

5
เรียนรู้ที่จะเพิ่มประสิทธิภาพด้วยการชุมนุม [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันเป็นนักเรียนปีสองของเทคโนโลยีเกมคอมพิวเตอร์ ฉันเพิ่งเสร็จต้นแบบตัวแรกของตัวเอง "ชนิด" ของผู้เบิกทาง (ที่ไม่ได้ใช้ A * แทนวิธีการทางเรขาคณิต / การจดจำรูปแบบผู้ค้นหาเพียงแค่ต้องการความรู้เกี่ยวกับภูมิประเทศที่อยู่ในมุมมองของเขาในการตัดสินใจเพราะฉัน ต้องการ AI ที่สามารถสำรวจได้จริงหากภูมิประเทศเป็นที่รู้จักกันดีแล้วมันก็จะเดินไปในทางที่สั้นที่สุดได้อย่างง่ายดายเพราะผู้เบิกทางมีหน่วยความจำของโหนด) อย่างไรก็ตามคำถามของฉันเป็นเรื่องทั่วไปมากขึ้น: ฉันจะเริ่มเพิ่มประสิทธิภาพอัลกอริทึม / ลูป / for_each / etc ได้อย่างไร ใช้แอสเซมบลีแม้ว่ายินดีต้อนรับเคล็ดลับทั่วไป ฉันกำลังมองหาหนังสือที่ดีโดยเฉพาะเพราะมันยากที่จะหาหนังสือที่ดีในหัวข้อนี้ มีบทความเล็ก ๆ น้อย ๆ ออกมาเช่นนี้แต่ยังไม่มีความรู้เพียงพอที่จะปรับอัลกอริทึม / เกม ... ฉันหวังว่าจะมีหนังสือดีๆเล่มหนึ่งออกมาฉันไม่สามารถหา ...

3
ในเกม AAA รุ่นใหม่ที่มีสภาพแวดล้อมเปิดและมีเนื้อหาสแตติกจำนวนมาก (เช่น crysis) การคัดแบบบดเคี้ยวจะทำอย่างไร?
สองความคิดที่ฉันมีอยู่ในใจ: 1) ฉากถูกสร้างการแสดงผลให้กับบัฟเฟอร์ที่มองไม่เห็นโดยใช้ความละเอียดต่ำและรูปแบบการนับโพลิกอนต่ำ (หรือแม้กระทั่งการใช้ปริมาณที่ จำกัด ขอบเขตอย่างลูกบาศก์หรือทรงกลมเท่านั้น) บัฟเฟอร์จะถูกตรวจสอบเพื่อให้ทราบว่าสามารถมองเห็นได้หรือไม่ ก่อนเรนเดอร์ฉากที่มีความละเอียดต่ำสามารถใช้การคัดแบบ frustum เพื่อกำจัดวัตถุให้ได้มากที่สุด 2) เครื่องมือทำงานบนแผนที่แบบคงที่และจะทำการติดตามเรย์ที่ซับซ้อน (และทำให้ช้า) เพื่อให้ทราบตำแหน่ง 3 มิติบางอย่างบนแผนที่สิ่งที่มองเห็นได้และสิ่งที่ไม่ได้เป็น ข้อมูลทั้งหมดนั้นจะถูกเก็บไว้ในวิธีที่มีประสิทธิภาพที่สามารถเป็นผู้ใช้ในภายหลังที่รันไทม์ (เช่น: octree) โซลูชันนี้จะใช้ได้เฉพาะกับตาข่ายแบบคงที่ (เช่น: อาคาร) ไม่ใช่วัตถุที่เคลื่อนไหว

4
Opcodes ใดเร็วกว่าในระดับ CPU [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ในทุกภาษาการเขียนโปรแกรมมีชุดของรหัสที่แนะนำให้คนอื่น ฉันพยายามที่จะแสดงรายการไว้ที่นี่ตามลำดับความเร็ว bitwise การบวก / การลบจำนวนเต็ม การคูณ / การหารจำนวนเต็ม การเปรียบเทียบ การควบคุมการไหล การเพิ่ม / ลบลอย การคูณ / หารลอย ในกรณีที่คุณต้องการรหัสประสิทธิภาพสูง C ++ สามารถปรับให้เหมาะกับมือในการประกอบใช้คำสั่ง SIMD หรือการควบคุมการไหลที่มีประสิทธิภาพมากขึ้นประเภทข้อมูล ฯลฯ ดังนั้นฉันจึงพยายามที่จะเข้าใจว่าประเภทข้อมูล (int32 / float32 / float64) หรือ การดำเนินงานที่ใช้ ( *, +, &) ส่งผลกระทบต่อผลการดำเนินงานในระดับซีพียู CPU จะช้าลงกว่าการเพิ่มหรือไม่ …

5
ฉันจะสร้างภูมิประเทศขนาดใหญ่ในความสามัคคีได้อย่างไร
ฉันจะทำให้มากภูมิประเทศอย่างมากในความสามัคคี? ดูเหมือนว่าฉันสามารถตั้งค่าความกว้างและความยาวเป็นค่าขนาดใหญ่ได้ แต่ความละเอียด Heightmap จะสูงถึง 4097 และ Resolution ละเอียดจะสูงถึง 4048 เท่านั้น ความคิดใด ๆ

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