ฉันอาจจะลำเอียงทำงานในพื้นที่การปฏิบัติงานที่มีความสำคัญมากเช่นการประมวลผลภาพและ raytracing แต่ฉันยังคงพูดกับเพิ่มประสิทธิภาพ"เป็นปลายที่เป็นไปได้" ไม่ว่าความต้องการของคุณจะมีความสำคัญต่อประสิทธิภาพเพียงใดมีข้อมูลและความชัดเจนมากขึ้นในการเข้าใจถึงปัญหาหลังเหตุการณ์ที่คุณประเมินล่วงหน้ากว่าซึ่งหมายความว่าแม้กระทั่งการปรับแต่งที่มีประสิทธิภาพสูงสุด
กรณีที่แปลกประหลาด
แต่บางครั้ง "ช้าที่สุดเท่าที่จะทำได้"ยังคงเป็นคำสาปแช่งที่ค่อนข้างเร็วในบางกรณี หากเรากำลังพูดถึงโหมดออฟไลน์เรนเดอร์เช่นโครงสร้างข้อมูลและเทคนิคที่คุณใช้เพื่อให้ได้ประสิทธิภาพการทำงานจริง ๆ แล้วไหลลงสู่การออกแบบของผู้ใช้. สิ่งนี้อาจฟังดูน่าขยะแขยง แต่มีความทันสมัยและประสิทธิภาพที่สำคัญซึ่งผู้ใช้ยอมรับการควบคุมของผู้ใช้เฉพาะสำหรับเทคนิคการปรับให้เหมาะสมกับ raytracer ที่เฉพาะเจาะจง (เช่นการแคช irradiance หรือการทำแผนที่โฟตอน) เนื่องจากมีการใช้งานบางอย่าง เพื่อรอเวลาสำหรับภาพที่จะเรนเดอร์และคนอื่น ๆ ก็ถูกใช้เพื่อหาเงินจำนวนมหาศาลเพื่อเช่าหรือเป็นเจ้าของฟาร์มเรนเดอร์ด้วยเครื่องจักรที่อุทิศให้กับการเรนเดอร์ มีการลดเวลาและค่าใช้จ่ายสำหรับผู้ใช้เหล่านั้นอย่างมากหากผู้เรนเดอร์ออฟไลน์แข่งขันสามารถเสนอการลดการแสดงเวลาที่ไม่น่ารำคาญได้ นี่เป็นพื้นที่ที่การลดเวลาลง 5% ทำให้ผู้ใช้ตื่นเต้น
ในกรณีพิเศษคุณไม่สามารถเลือกเทคนิคการเรนเดอร์เดียวและหวังว่าจะปรับให้เหมาะสมในภายหลังเนื่องจากการออกแบบทั้งหมดรวมถึงการออกแบบผู้ใช้หมุนรอบโครงสร้างข้อมูลและอัลกอริทึมที่คุณใช้ คุณไม่สามารถแม้แต่จะไปกับสิ่งที่ทำงานได้ดีสำหรับคนอื่น ๆ ตั้งแต่ที่นี่คุณในฐานะปัจเจกบุคคลและจุดแข็งและจุดอ่อนของคุณ ความคิดและความรู้สึกอ่อนไหวของผู้พัฒนาหลักที่อยู่เบื้องหลังอาร์โนลด์นั้นแตกต่างจากการทำงานใน VRay ที่ใช้วิธีการที่แตกต่างกันมาก พวกเขาไม่สามารถแลกเปลี่ยนตำแหน่ง / เทคนิคและทำหน้าที่ได้ดีที่สุด (แม้ว่าพวกเขาจะเป็นผู้นำอุตสาหกรรม) คุณต้องทำการทดลองและต้นแบบและมาตรฐานและค้นหาสิ่งที่คุณต้องการ ทำได้ดีมากโดยเฉพาะเมื่อมีเทคนิคที่ล้ำสมัยมากมายหากคุณหวังที่จะจัดส่งสิ่งที่แข่งขันได้ซึ่งจะขายจริง ดังนั้นในกรณีที่แปลกประหลาดนี้ความกังวลด้านประสิทธิภาพขยับไปข้างหน้าเป็นประเด็นที่สำคัญที่สุดก่อนที่จะเริ่มพัฒนา
ถึงกระนั้นก็ไม่จำเป็นต้องมีการละเมิดการเพิ่มประสิทธิภาพ"ช้าที่สุดเท่าที่จะเป็นไปได้"แต่มันก็แค่"ช้าที่สุดเท่าที่จะทำได้"นั้นค่อนข้างเร็วในกรณีที่รุนแรงและแปลกประหลาดเหล่านี้ การหาเวลาและสิ่งที่ไม่ต้องการความกังวลเกี่ยวกับประสิทธิภาพในช่วงต้นเช่นนี้อาจเป็นความท้าทายหลักของนักพัฒนา สิ่งที่ไม่ควรปรับให้เหมาะสมอาจเป็นหนึ่งในสิ่งที่มีค่าที่สุดในการเรียนรู้และเรียนรู้ต่อไปในอาชีพของนักพัฒนาเนื่องจากคุณจะพบว่าไม่มีนักพัฒนาที่ไร้เดียงสาที่ต้องการเพิ่มประสิทธิภาพทุกอย่าง (และน่าเสียดายแม้แต่ทหารผ่านศึกบางคน ทั้งๆที่เคาน์เตอร์ของพวกเขาผลผลิต)
ดึกมากที่สุด
บางทีส่วนที่ยากที่สุดคือพยายามเข้าใจความหมาย ฉันยังคงเรียนรู้และฉันเขียนโปรแกรมมาเกือบสามทศวรรษแล้ว แต่โดยเฉพาะอย่างยิ่งในทศวรรษที่สามของฉันฉันเริ่มตระหนักว่าไม่ใช่เรื่องยาก ไม่ใช่วิทยาศาสตร์จรวดถ้าคุณมุ่งเน้นที่การออกแบบมากกว่าการนำไปใช้ ยิ่งการออกแบบของคุณออกจากห้องหายใจเพื่อการปรับแต่งที่เหมาะสมในภายหลังโดยไม่มีการเปลี่ยนแปลงการออกแบบคุณก็สามารถเพิ่มประสิทธิภาพได้ในภายหลัง และผลผลิตที่มากขึ้นเรื่อย ๆ ที่ฉันได้รับคือการแสวงหาการออกแบบที่ทำให้ฉันมีห้องหายใจ
การออกแบบที่เสนอห้องหายใจเพื่อปรับให้เหมาะสมในภายหลัง
การออกแบบประเภทนี้จริง ๆ แล้วไม่ใช่เรื่องยากที่จะบรรลุในกรณีส่วนใหญ่ถ้าเราสามารถใช้ "สามัญสำนึก" บางอย่าง เป็นเรื่องส่วนตัวฉันเข้าสู่ทัศนศิลป์เป็นงานอดิเรก (ฉันคิดว่ามันค่อนข้างช่วยโปรแกรมซอฟต์แวร์สำหรับศิลปินที่เป็นตัวฉันเองที่จะเข้าใจความต้องการและพูดภาษาของพวกเขา) และฉันใช้เวลาช่วงต้นทศวรรษ 2000 โดยใช้ applets Oekaki ออนไลน์เป็นวิธีที่รวดเร็วในการดูเดิลและแบ่งปันงานของฉันและเชื่อมต่อกับศิลปินคนอื่น ๆ
โดยเฉพาะไซต์โปรดและแอปเพล็ตของฉันเต็มไปด้วยข้อบกพร่องด้านประสิทธิภาพ (ขนาดแปรงใด ๆ ที่ไม่สำคัญจะทำให้การรวบรวมข้อมูลช้าลง) แต่มีชุมชนที่ดีมาก ในการหลีกเลี่ยงปัญหาเรื่องประสิทธิภาพฉันใช้แปรงขนาดเล็ก 1 หรือ 2 พิกเซลและเขียนงานของฉันดังนี้:
ในขณะเดียวกันฉันยังคงให้คำแนะนำซอฟต์แวร์แก่ผู้แต่งเพื่อปรับปรุงประสิทธิภาพการทำงานและเขาสังเกตเห็นว่าคำแนะนำของฉันมีลักษณะทางเทคนิคโดยเฉพาะอย่างยิ่งที่พูดถึงการเพิ่มประสิทธิภาพหน่วยความจำและอัลกอริธึมเป็นต้น ดังนั้นเขาจึงถามว่าฉันเป็นโปรแกรมเมอร์หรือไม่และฉันตอบว่าใช่และเขาเชิญให้ฉันทำงานกับซอร์สโค้ด
ดังนั้นฉันจึงดูซอร์สโค้ดวิ่งมันทำโปรไฟล์และความสยองขวัญของฉันเขาได้ออกแบบซอฟต์แวร์โดยใช้แนวคิดของ "อินเทอร์เฟซพิกเซลแบบนามธรรม" เช่นIPixel
ซึ่งจบลงด้วยการเป็นสาเหตุของเบื้องหลังฮอตสปอตชั้นนำสำหรับทุกสิ่งด้วยไดนามิก การจัดสรรและการจัดส่งสำหรับทุกพิกเซลของภาพทุกภาพ แต่ไม่มีวิธีการที่จะใช้ประโยชน์ได้อย่างเต็มที่โดยไม่ต้องพิจารณาการออกแบบซอฟต์แวร์ทั้งหมดเพราะการออกแบบทำให้เขาติดอยู่ในมุมที่ไม่มีอะไรมากไปกว่าการเพิ่มประสิทธิภาพแบบไมโครเล็กน้อยเมื่อนามธรรมของเราทำงานในระดับพิกเซลพิกเซลเดียว และทุกอย่างขึ้นอยู่กับพิกเซลนามธรรมนี้
ฉันคิดว่านั่นเป็นการละเมิด "สามัญสำนึก" แต่เห็นได้ชัดว่าไม่ได้เป็นเรื่องธรรมดาสำหรับนักพัฒนา แต่มันก็ไม่ใช่สิ่งที่เป็นนามธรรมในระดับเม็ดเล็ก ๆ ที่แม้แต่กรณีการใช้งานพื้นฐานส่วนใหญ่ก็จะถูกสร้างขึ้นโดยคนนับล้านเช่นพิกเซลหรืออนุภาคหรือหน่วยเล็ก ๆ ในการจำลองกองทัพ ginormous โปรดปรานIImage
(คุณสามารถจัดการรูปแบบภาพ / พิกเซลทั้งหมดที่คุณต้องการในระดับรวมที่เป็นกลุ่ม) หรือIParticleSystem
ไปยังIPixel
หรือIParticle
จากนั้นคุณสามารถใส่การใช้งานขั้นพื้นฐานและรวดเร็วในการเขียนและง่ายต่อการเข้าใจหลังอินเทอร์เฟซดังกล่าวและ มีห้องพักหายใจทั้งหมดที่คุณจะต้องเพิ่มประสิทธิภาพในภายหลังโดยไม่ต้องพิจารณาการออกแบบซอฟต์แวร์ทั้งหมดอีกครั้ง
และนั่นคือเป้าหมายที่ฉันเห็นในทุกวันนี้ ไม่รวมกรณีแปลก ๆ เช่นตัวเรนเดอร์ออฟไลน์ด้านบนออกแบบด้วยห้องหายใจเพียงพอที่จะปรับให้เหมาะสมที่สุดเท่าที่จะทำได้พร้อมข้อมูลย้อนหลังมากที่สุดเท่าที่จะทำได้ (รวมถึงการวัด) และใช้การปรับให้เหมาะสมที่จำเป็นที่สุดเท่าที่จะทำได้
แน่นอนฉันไม่จำเป็นต้องแนะนำให้เริ่มต้นโดยใช้อัลกอริธึมความซับซ้อนกำลังสองในอินพุตที่เข้าถึงขนาดที่ไม่สำคัญในกรณีผู้ใช้ทั่วไปได้ง่าย ใครทำอย่างนั้นล่ะ? แต่ฉันไม่คิดว่ามันจะเป็นเรื่องใหญ่หากการใช้งานนั้นง่ายในการสลับในภายหลัง นั่นไม่ใช่ความผิดพลาดร้ายแรงหากคุณไม่จำเป็นต้องทบทวนการออกแบบใด ๆ