Micro-optimizing - BAD กับการพัฒนาเกม


12

ในการพัฒนาเกมมี C / C ++ มากมายในแอปพลิเคชันทางธุรกิจ C # ฉันเห็น C / C ++ devs แสดงความกังวลเกี่ยวกับวิธีการแปลรหัสบรรทัดเดียวเพื่อประกอบ ใน. NET บางคนเข้าไปใน IL ไม่ค่อย

ใน C # "การเพิ่มประสิทธิภาพขนาดเล็ก" ถูกขมวดคิ้วหายากและมักจะเสียเวลา สิ่งนี้ไม่ได้เกิดขึ้นในการพัฒนาเกม

อะไรเป็นพิเศษที่สร้างความไม่ลงรอยกันนี้? เกมผลักดันขีด จำกัด ของฮาร์ดแวร์อย่างต่อเนื่องหรือไม่? ถ้าใช่การปรับปรุงฮาร์ดแวร์เราควรคาดหวังว่าภาษาระดับสูงกว่าจะเข้าครอบงำอุตสาหกรรมเกมหรือไม่

ฉันไม่ได้กำลังมองหาการอภิปรายเกี่ยวกับความเป็นไปได้ของ C # เป็นเกม dev lang ฉันรู้ว่ามันทำไปในระดับหนึ่ง มุ่งเน้นไปที่การเพิ่มประสิทธิภาพไมโคร ความแตกต่างระหว่าง Game Dev กับ Applications dev

อัพเดท
โดยเกมผมหมายถึงการพัฒนาที่ทันสมัยและใหญ่โต EG MMORPG's, Xbox, PS3, Wii ...


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

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

1
เกี่ยวข้อง: wiki.c2.com/?PrematureOptimization
Peter

คำตอบ:


17

ในแอปพลิเคชันทางธุรกิจ CPU ไม่ได้เป็นคอขวดเสมอไป แอปพลิเคชันทางธุรกิจจะใช้เวลาส่วนใหญ่รอ เช่น:

  1. กำลังรอผลลัพธ์จากการสืบค้นฐานข้อมูล
  2. รอการร้องขอจากเว็บให้เสร็จ
  3. รอให้ผู้ใช้ทำการกระทำที่ UI

นั่นเป็นเหตุผลที่รหัสที่ปรับประสิทธิภาพการประมวลผลไม่ได้เพิ่มมูลค่ามากเกินไป

การพิจารณาเบื้องต้นคือ:

  1. เวลาไปตลาด
  2. ความเรียบง่ายผู้อื่นสามารถเข้าใจและรักษารหัสได้

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

4
+1 การเพิ่มประสิทธิภาพฐานข้อมูลและเครือข่ายมักจะให้ผลตอบแทนที่มากกว่าสำหรับการสมัครทางธุรกิจ ตัวอย่างเช่น JSON vs XML และการปรับฐานข้อมูลดัชนี
Shamit Verma

2
+1 แต่คุณควรเพิ่มอีกด้านของสมการ: "ลูปหลัก (s)" และการเรนเดอร์ (s) ในเกมบนแม่มดความลื่นไหลของเกมขึ้นอยู่กับทำให้แต่ละไมโครวินาทีสูญเสียคุณค่าเนื่องจากคุณภาพเป็นที่เข้าใจได้ ต่อดวงตาและประสาทสัมผัสอื่น ๆ
Klaim

1
พูดได้ดี. และแน่นอนว่าเมื่อทำแอพธุรกิจและการพัฒนาเกมเสร็จฉันได้ใช้เวลาไปกับการสืบค้น SQL ที่ซับซ้อนซึ่งพยายามเพิ่มประสิทธิภาพให้มากขึ้นเช่นเดียวกับที่ฉันได้ใช้เวลาในการสำรวจวนรอบในเกม
Carson63000

ทุกอย่างกลับมาเพื่อเพิ่มประสิทธิภาพก่อนกำหนดเป็นรากของความชั่วร้ายทั้งหมด การทำโปรไฟล์แสดงให้เห็นอย่างชัดเจนว่าเวลาส่วนใหญ่ที่ใช้ในแอปพลิเคชันธุรกิจโดยเฉลี่ยของคุณคือเครือข่าย + ฐานข้อมูล IO
อเล็กซ์ Reinking

13

ในแอปพลิเคชันธุรกิจมันหายากมากสำหรับไมโครวินาที ในเกมมันเป็นความจริงของชีวิต

หากคุณต้องการให้เกมทำงานที่ 60 เฟรมต่อวินาทีคุณมีเวลา ~ 16.67 มิลลิวินาทีในการทำทุกอย่างที่จำเป็นสำหรับเฟรมนั้น - อินพุต, ฟิสิกส์, ตรรกะการเล่นเกม, เสียง, เครือข่าย, AI, การเรนเดอร์และอื่น ๆ หากคุณโชคดีคุณจะทำงานที่ 30 fps และมีเวลา 33.3 มิลลิวินาทีที่หรูหรา หากเฟรมใช้เวลานานเกินไปบทวิจารณ์ของคุณจะต้องทนทุกข์ทรมานผู้เล่นของคุณจะเติมน้ำดีในฟอรัมอินเทอร์เน็ตและคุณจะไม่ขายเท่าที่คุณจะทำได้ (ไม่ต้องพูดถึงความภาคภูมิใจในอาชีพของคุณ) และถ้าคุณโชคร้ายจริงๆจะหารหัสแอปพลิเคชันธุรกิจของคุณสำหรับการใช้ชีวิต

แน่นอนว่าผู้พัฒนาเกมไม่ต้องกังวลกับทุกบรรทัดเดียวเนื่องจากด้วยประสบการณ์และผู้สร้างโปรไฟล์ที่ดีคุณจะได้เรียนรู้ว่าบรรทัดใดที่ต้องกังวล ในทางกลับกันความกังวลเหล่านั้นบางครั้งจะสัมผัสกับสิ่งต่าง ๆ ที่ในโลกธุรกิจอาจถูกมองว่าเป็นการปรับให้เหมาะสมกับนาโนมากกว่าการปรับให้เหมาะสมที่สุด

อย่าคาดหวังว่าภาษาระดับสูงใด ๆ ที่จะเตะ C ++ ออกไปข้างนอกจนกว่าจะมีภาษาหนึ่งที่มีประสิทธิภาพเทียบเท่าและคาดการณ์ได้


8
ในแอพพลิเคชั่นการซื้อขายที่มีความถี่สูงไมโครวินาทีสำคัญมาก!
quant_dev

2
@quant: เช่นเดียวกับแอปพลิเคชั่นประมวลผลสตรีมส่วนใหญ่ - หุ่นยนต์, กริดพลังงาน, จรวด, เทคโนโลยีทางการแพทย์และอื่น ๆ สร้างงานในมือมากเกินไปและมันอาจจะสายเกินไปเมื่อคุณตามทัน
Aaronaught

@quant_dev: การใช้งานซื้อขายความถี่สูงเป็นที่หายากมาก
molbdnilo

ไม่อีกแล้ว. พวกมันหายากกว่าแอพพลิเคชั่นทางบัญชี แต่โดยทั่วไปซอฟต์แวร์การออกแบบเครื่องบิน
quant_dev

ไมโครวินาทีมีความสำคัญในแอปทางธุรกิจด้วยเช่นกันคอขวดมักพบที่อื่น (ผ่านเครือข่ายในฐานข้อมูลหรือระบบไฟล์)
RubberDuck

9

โอเคดังนั้นคุณจะเห็นนักพัฒนา C และ C ++ ครอบงำมากกว่าแต่ละบรรทัด ฉันพนันได้เลยว่าพวกเขาจะไม่ครอบงำทุกบรรทัด

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

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

มีผู้คนมากมายที่ใช้ C และ C ++ และไม่ต้องกังวลกับรายละเอียดการแปลตราบใดที่มันเร็วพอ


7

เกมผลักดันขีด จำกัด ของฮาร์ดแวร์อย่างต่อเนื่องหรือไม่?

ใช่.

ถ้าใช่การปรับปรุงฮาร์ดแวร์เราควรคาดหวังว่าภาษาระดับสูงกว่าจะเข้าครอบงำอุตสาหกรรมเกมหรือไม่

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

แน่นอนว่ามีการเคลื่อนไหวบางอย่าง เมื่อตอนที่ฉันยังเด็กและสนใจการพัฒนาเกมเป็นครั้งแรกมันเป็นชุดที่เขียนด้วยลายมือหรือกำจัดนรก นี่คือยุคพลเรือจัตวา 64 ทุกวันนี้แน่นอนว่า C ++ เป็นภาษากลางของการพัฒนาเกมส่วนใหญ่ และแน่นอนเรายังเห็นความเคลื่อนไหวในการใช้ C ++ สำหรับรหัสเครื่องยนต์และภาษาสคริปต์ระดับสูงขึ้นสำหรับรหัสเกมตรรกะ เช่น LUA หรือเอนจิน Unreal มีภาษา UnrealScript ของตัวเอง


1
+1 ส่วนที่ดีของเกม devs วันนี้ใช้เลเยอร์เอ็นจิ้นที่ปรับปรุงประสิทธิภาพสูงสุดซึ่งเขียนโดยคนอื่นแล้วใช้บางอย่างเช่น Python หรือ C ++ ที่พิถีพิถันน้อยกว่าเพื่อรวมสิ่งต่าง ๆ เข้าด้วยกัน
Morgan Herlocker

มีความเกี่ยวข้องที่จะต้องทราบว่า Unreal ได้ย้ายสคริปต์“ ย้อนกลับ” จาก UnrealScript เป็น C ++ แล้ว เป็นสิ่งที่ยอดเยี่ยมเกี่ยวกับ C ++ ที่ทันสมัยที่ช่วยให้คุณสามารถเขียนโค้ดที่มีความหน่วงแฝงต่ำที่ได้รับการปรับให้เหมาะกับ Micro และตรรกะระดับสูงที่รัดกุม ภาษาอื่นส่วนใหญ่ประสบความสำเร็จในระดับสูงโดยการเสียสละเวลาแฝงและมักจะมีประสิทธิภาพด้วย
leftaroundabout

7

ใน C # "การเพิ่มประสิทธิภาพขนาดเล็ก" ถูกขมวดคิ้วหายากและมักจะเสียเวลา สิ่งนี้ไม่ได้เกิดขึ้นในการพัฒนาเกม

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


0

"เกม" เป็นคำที่ครอบคลุม ถ้าคุณมีสมมุติว่า MMORPG การเพิ่มประสิทธิภาพเล็ก ๆ น้อย ๆ จะส่งผลต่อผู้เล่นหลายคน

นักเล่นเกมเป็นและมักจะเคยชินกับสิ่งต่าง ๆ จำนวนมากที่เกิดขึ้นพร้อมกันแบบเรียลไทม์ แน่นอนว่า; ในคราวเดียวการมี Pacman หรือ Tetris ที่ตอบสนองต่อเป้าหมายคือเป้าหมาย แต่พวกเขาก็ยังต้องตอบสนอง วันนี้ 3DMMORPGs ผ่านการเชื่อมต่อเครือข่ายแบบหล่นแพ็คเก็ต

ฉันเข้าใจความต้องการเพิ่มประสิทธิภาพ


0

เกมทำการประมวลผลพื้นหลังจำนวนมากอย่างต่อเนื่อง แอปทางธุรกิจทำไม่ได้


4
อย่าทำแอปทางธุรกิจมากมายใช่ไหม
เพียงแค่ความคิดเห็นที่ถูกต้องของฉัน

2
พอรู้แล้วว่าแอพธุรกิจไม่จำเป็นต้องอัพเดทสถานะ 60 ครั้งต่อวินาที นอกจากนี้ฉันยังพูดว่า "ต่อเนื่อง" โดยเฉพาะ
user16764

2
เคยได้ยินเรื่องการซื้อขายแบบเรียลไทม์?
เพียงแค่ความคิดเห็นที่ถูกต้องของฉัน

0

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

ฉันไม่ได้ทำงานใน gamedev อีกต่อไป แต่ฉันทำงานใน VFX ในพื้นที่เช่นการติดตามเส้นทางและฉันเห็นการใช้งานหลายอย่างของ BVHs และต้นไม้ KD ที่นั่นการประมวลผลประมาณ 0.5 ล้านรังสีต่อวินาทีในฉากที่ซับซ้อน (และนี่คือ การประเมินผลแบบมัลติเธรด) พูดอย่างคร่าว ๆ ฉันมักจะเห็นการใช้ BVH ที่ตรงไปตรงมาในบริบทของการฉายรังสีที่ต่ำกว่า 1 ล้านรังสี / วินาทีแม้จะมีการประเมินแบบมัลติเธรด ยกเว้น Embree มี BVH ที่สามารถประมวลผลมากกว่า 100 ล้านรังสีในฉากเดียวกันด้วยฮาร์ดแวร์เดียวกัน

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

ตามธรรมชาติด้วยความต้องการอัตราเฟรมแบบเรียลไทม์ของเกมขึ้นอยู่กับว่าคุณทำงานกับเอ็นจิ้นเกมระดับสูงหรือระดับต่ำ (แม้แต่เกมที่ทำด้วย UE 4 มักใช้งานอย่างน้อยบางส่วนในสคริปต์ระดับสูง) แต่ไม่พูดชิ้นส่วนที่สำคัญที่สุดของเครื่องมือฟิสิกส์) การปรับขนาดเล็กให้เหมาะสมกลายเป็นข้อกำหนดที่ใช้ได้จริงในบางพื้นที่

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

ถ้าใช่การปรับปรุงฮาร์ดแวร์เราควรคาดหวังว่าภาษาระดับสูงกว่าจะเข้าครอบงำอุตสาหกรรมเกมหรือไม่

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

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

สนุกวันนี้เมื่อฉันทำงานในพื้นที่ที่สำคัญต่อประสิทธิภาพการทำงานของแท้ฉันต้องคิดในระดับต่ำกว่าที่ฉันเริ่มต้นบ้าง (แม้ว่าฉันจะเริ่มในยุค Borland Turbo C DOS) เพราะเมื่อก่อนแคช CPU ก็แทบจะไม่มีอยู่จริง ส่วนใหญ่เป็นเพียง DRAM และการลงทะเบียนซึ่งหมายความว่าฉันสามารถมุ่งเน้นไปที่ความซับซ้อนของอัลกอริทึมและเขียนโครงสร้างที่เชื่อมโยงเหมือนต้นไม้ในแนวตรงไปตรงมามากโดยไม่กระทบกับประสิทธิภาพมากนัก ทุกวันนี้รายละเอียดในระดับต่ำของแคช CPU ครอบงำความคิดของฉันเกือบเท่ากับอัลกอริธึมเอง และในทำนองเดียวกันเรามีเครื่องจักรหลายคอร์ซึ่งต้องทำให้เราคิดถึงมัลติเธรดและอะตอมมิกส์และ mutexes และความปลอดภัยของเธรดและโครงสร้างข้อมูลที่เกิดขึ้นพร้อมกันและอื่น ๆ ซึ่งผมบอกว่าในหลาย ๆ ด้านนั้นเป็นระดับที่ต่ำกว่ามาก ในไม่ใช่มนุษย์ธรรมดา) กว่าตอนที่ฉันเริ่ม

แปลกที่ดูเหมือนจริงมากสำหรับฉันตอนนี้ ฉันคิดว่าวันนี้ฉันได้รับผลกระทบจากความซับซ้อนและรายละเอียดระดับต่ำของฮาร์ดแวร์มากกว่าเมื่อ 30 ปีก่อนพยายามอย่างเต็มที่ที่จะถอดแว่นตาความคิดถึง แน่นอนว่าเราอาจจะพูดถึงการชุมนุมเล็กน้อยที่นี่และต้องจัดการกับรายละเอียดที่เต็มไปด้วยเลือดเช่น XMS / EMS แต่ส่วนใหญ่ฉันจะบอกว่ามีความซับซ้อนน้อยลงและการรับรู้ฮาร์ดแวร์และคอมไพเลอร์ฉันต้องย้อนกลับไปกว่าที่ฉันทำในวันนี้เมื่อฉันทำงานในพื้นที่สำคัญด้านประสิทธิภาพ และดูเหมือนว่าจะเป็นเรื่องจริงของอุตสาหกรรมทั้งหมดหากเราเขียนเหมือนกันif/else แถลงการณ์ในรูปแบบที่อ่านได้ง่ายกว่ามนุษย์มากขึ้นและพิจารณาว่าคนทั่วไปโดยรวมคิดว่ารายละเอียดฮาร์ดแวร์ในระดับที่ต่ำกว่า (จากหลายคอร์ถึง GPUs ไปจนถึง SIMD ไปยังแคชแคชและรายละเอียดภายในของคอมไพเลอร์ / ล่าม / ห้องสมุดทำงานและอื่น ๆ )

ระดับสูง! = มีประสิทธิภาพน้อยลง

กลับมาที่คำถามนี้:

ถ้าใช่การปรับปรุงฮาร์ดแวร์เราควรคาดหวังว่าภาษาระดับสูงกว่าจะเข้าครอบงำอุตสาหกรรมเกมหรือไม่

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

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

แต่การเปลี่ยนแปลงเหล่านี้ไม่ได้มาจากฮาร์ดแวร์ที่มีประสิทธิภาพมากขึ้นเมื่อเครื่องมือเพิ่มประสิทธิภาพสำหรับภาษาเหล่านี้แสดงผลในระดับที่ต่ำกว่าอย่างมาก

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


0

ใน C # "การเพิ่มประสิทธิภาพขนาดเล็ก" ถูกขมวดคิ้วหายากและมักจะเสียเวลา สิ่งนี้ไม่ได้เกิดขึ้นในการพัฒนาเกม

คุณมีปัญหาเกี่ยวกับคำศัพท์ที่นี่ คุณใช้คำศัพท์อย่างถูกต้อง แต่นักพัฒนาเกมและนักธุรกิจใช้คำเดียวกันในสองวิธีที่แตกต่างกันมาก

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

  1. เงินพิเศษที่ใช้ส่งมอบคุณค่าทางธุรกิจเดียวกันด้วยความเร็วที่เร็วขึ้นไม่กี่วินาที เงินที่บันทึกไว้ในการปรับปรุงความเร็วนั้นมาจากกลุ่มของเงินที่แตกต่างกัน (เวลาของผู้ใช้) ดังนั้นโดยทั่วไปแล้วธุรกิจจะไม่ได้รับประโยชน์จากความพยายามที่เกิดขึ้นลูกค้าจะต้องเสียค่าใช้จ่ายในการดำเนินธุรกิจ
  2. โดยทั่วไปโปรแกรมเมอร์ธุรกิจจะมีทัศนวิสัยไม่ดีในกระบวนการทางธุรกิจโดยรวมดังนั้นการเพิ่มประสิทธิภาพของขั้นตอนเดียวอาจไม่ก่อให้เกิดประโยชน์ที่ดีต่อกระบวนการโดยรวม ตัวอย่างเช่นหากคุณทำ 3% ของกระบวนการเร็วขึ้น 10 เท่าคุณได้เร่งกระบวนการทั้งหมด 2.7%
  3. โดยทั่วไปแล้วธุรกิจจะมีรายการงานที่เหลือจำนวนมากซึ่งมีมูลค่าทางธุรกิจบางส่วนและจะจัดลำดับความสำคัญในการเพิ่มมูลค่านั้นแทนที่จะส่งมอบมูลค่าเดิมในเวลาที่น้อยลง

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

  1. ระบบเกมมักจะถูกจัดให้อยู่ในวงจรการเรนเดอร์ ปัจจุบันมาตรฐานทองคำคือ 60 เฟรมต่อวินาทีดังนั้นทุกสิ่งที่จะต้องคำนวณต้องทำและแสดงผลบนหน้าจอใน 1/60 ของวินาที
  2. ซึ่งหมายความว่าบ่อยครั้งที่รูทีนเดียวกันจะถูกเรียกว่าเป็นพันถึงแสนครั้งในระหว่างเกม ดังนั้นการปรับปรุง 10 เท่าในฟังก์ชั่นเดียวจะขยายมูลค่าตามจำนวนครั้งที่รู้สึกถึงประโยชน์ของการปรับปรุง
  3. ความล้มเหลวในการบรรลุอัตราการเรนเดอร์มีผลกระทบต่อการนำเสนอของเกม วิดีโอจะกลายเป็นขาด ๆ หายไปตัวละครจะเคลื่อนไหวด้วยการข้ามและกระโดดแทนการเคลื่อนไหวของเหลว สิ่งนี้นำผู้เล่นออกจากเกมทันทีและเข้าสู่อาณาจักรแห่งการตั้งคำถามเกี่ยวกับคุณค่าของเกม

ดังนั้นในธุรกิจไม่มีใครสนใจถ้ารูปแบบของกระบวนการทางธุรกิจ 4 ขั้นตอนนำเสนอใน 0.6 วินาทีหรือ 0.5 วินาที ในขณะที่เล่นเกมจะมีใครสนใจถ้ารูทีนที่ใช้เวลา 200ms สามารถลดลงเป็นการดำเนินการใน 100ms

ทุกอย่างเกี่ยวกับมูลค่าที่ส่งมอบให้กับลูกค้าความต้องการของลูกค้าและอัตราส่วนต้นทุน - ผลประโยชน์ของการเปลี่ยนแปลง


-1

มันเกี่ยวกับสาเหตุที่เลือกเครื่องมือสำหรับงานเฉพาะ

นักกอล์ฟจะหมกมุ่นอยู่กับทิศทางและบังคับให้พวกเขาใช้กับพัตเตอร์ไม่มากนักเมื่อพวกเขาใช้ไดรเวอร์

ทำไม? เพราะพวกเขาต่างชนิดกัน สำหรับไดรฟ์คุณต้องการที่จะได้รับในแฟร์เวย์ด้วยระยะทางสูงสุด สำหรับพัตคุณต้องการให้มันอยู่ในหลุมอย่างแน่นอน

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


-3

แอปพลิเคชั่นธุรกิจส่วนใหญ่เขียนเป็นเครื่องมือภายใน บริษัท ความคาดหวังเกี่ยวกับการใช้งานของเครื่องมือนี้ต่ำกว่าในกรณีของซอฟต์แวร์ที่ขายให้กับลูกค้าจำนวนมาก เป็นเรื่องธรรมดามากที่แอพธุรกิจในบ้านมีเมนูและกล่องโต้ตอบที่ตอบสนองช้าเมื่อคลิกเมาส์หน้าต่างที่วาดใหม่ด้วยความล่าช้าหรือแม้แต่ GUI ที่เขียนใน Swing (สยองขวัญ!) เนื่องจากมีสาเหตุหลายประการ (สำคัญกว่าที่ซอฟต์แวร์สามารถปรับแต่งได้มากกว่า "รวดเร็ว" ผู้ใช้ซอฟต์แวร์ไม่มีทางเลือกว่าจะใช้หรือไม่ใช้ซอฟต์แวร์ที่เป็นปัญหาคนที่สร้าง การตัดสินใจติดตั้งซอฟต์แวร์ไม่ได้ใช้ด้วยตนเอง ... ) ผลที่ตามมาทั้งหมดนี้คือผู้พัฒนาเครื่องมือนี้ไม่ได้ใช้เวลามากในการปรับการตอบสนองของแอพพลิเคชั่น แต่ใส่ใจกับความสามารถในการขยายและจำนวนของฟีเจอร์ ฐานลูกค้าที่แตกต่างกัน => เป้าหมายการออกแบบที่แตกต่าง => วิธีการที่แตกต่างกัน

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

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