API กราฟิกสมัยใหม่ Apple Metal API: เคล็ดลับคืออะไร

ความประหลาดใจรอพวกเราทุกคนอยู่ที่ WWDC 2014: การประกาศ API กราฟิก 3 มิติใหม่ที่เรียกว่า Metal แต่คราวนี้เราไม่ได้จัดการกับ API ระดับสูงใหม่ที่อยู่ด้านบนของ OpenGL ES (เช่นในกรณีของ Scene Kit) แต่ด้วย API ระดับต่ำใหม่สำหรับการเรนเดอร์และการประมวลผลที่สามารถใช้แทน OpenGL ในเกม โดย ตามข้อมูลของ Appleโลหะสามารถเร็วกว่า OpenGL ES ได้ถึง 10 เท่า (แม่นยำยิ่งขึ้น - สามารถสร้างการดึงสาย [ โทรออก- การถ่ายโอนข้อมูลไปยัง GPU] เร็วขึ้น 10 เท่า) และใช้ได้เฉพาะบนอุปกรณ์ iOS ที่มี CPU เท่านั้น รุ่นล่าสุด A7.

การประกาศนี้กระตุ้นให้เกิดการอภิปรายและการโต้เถียงครั้งใหม่เกี่ยวกับความต้องการ API กราฟิกใหม่ ซึ่งควร (หรือไม่ควร - ใครจะรู้) แทนที่ OpenGL โพสต์ที่เราแจ้งให้คุณทราบไม่ได้ตั้งใจที่จะเข้าร่วมในการสนทนานี้ - มีวัตถุประสงค์เพื่ออธิบายว่า Metal แตกต่างจาก OpenGL ES ซึ่งมีการแทนที่อย่างไร เพื่อทำความเข้าใจว่ามีอะไรพิเศษ (หรือในทางกลับกัน ไม่มีอะไรพิเศษ) เกี่ยวกับ Metal API เราจะต้องดูส่วนลึกของ API กราฟิกและ GPU เล็กน้อย

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

สำหรับการปรับปรุงอย่างง่ายใน การทำงานของจีพียูกระบวนการนี้ควรทำงานแบบอะซิงโครนัส จากนั้น GPU จะไม่บล็อก CPU และการเรียก API จะให้ผลลัพธ์เกือบจะในทันที ในกรณีนี้ GPU อาจใช้งานไม่ได้ 100% เนื่องจากอาจต้องรอการเรียกใช้การเรนเดอร์ใหม่ (= เริ่มต้นเฟรม) จาก CPU ในขณะที่การเรียกคำสั่งอื่นจะรอให้คำสั่งก่อนหน้าเสร็จสิ้น นี่เป็นเหตุผลว่าทำไมไดรเวอร์กราฟิกส่วนใหญ่จึงรวบรวมทุกอย่าง โทรออก(และงานอื่นๆ ที่จะต้องดำเนินการบน GPU เช่น การเปลี่ยนสถานะ) เพื่อเรนเดอร์ทั้งเฟรมก่อนที่จะส่งไปยัง GPU คำสั่งที่บัฟเฟอร์เหล่านี้จะถูกส่งกลับหลังจากได้รับคำสั่งให้วาดเฟรมถัดไป เพื่อให้มั่นใจว่า GPU จะถูกใช้งานอย่างมีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้ แน่นอนว่านี่จะเพิ่มความล่าช้าหนึ่งเฟรม: ในขณะที่ CPU กำลังสร้างงานสำหรับเฟรมปัจจุบัน เฟรมก่อนหน้าจะถูกเรนเดอร์บน GPU ในความเป็นจริง มีความเป็นไปได้ที่จะบัฟเฟอร์มากกว่าหนึ่งเฟรมและทำให้ได้อัตราเฟรมที่สูงขึ้น - โดยมีต้นทุนของเวลาแฝงที่มากขึ้น

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

ดังนั้นเราจึงได้เรียนรู้สิ่งสำคัญอย่างน้อยสองประการเกี่ยวกับสิ่งที่เกิดขึ้นเบื้องหลัง การทำงานร่วมกัน OpenGL พร้อม GPU สมัยใหม่: การเปลี่ยนสถานะอาจเป็นเรื่องยุ่งยากหากจำเป็น การรวมกันใหม่สถานะและการดำเนินการทั้งหมดบน GPU จะล่าช้าเป็นระยะเวลาหนึ่ง

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับวิธีการทำงานของไปป์ไลน์กราฟิกคอมพิวเตอร์สมัยใหม่ได้ในบทความชุดต่างๆ โดย Fabian Giesens - “การเดินทางไปตามไปป์ไลน์กราฟิก”

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

API กราฟิกบางตัวในปัจจุบันกำลังพยายามลบเทคนิคเหล่านี้ส่วนใหญ่ โดยเผยให้เห็น "ความซับซ้อน" ที่ซ่อนอยู่ และในบางกรณีก็ปล่อยให้โปรแกรมเป็นผู้ค้นหาทั้งหมด ปัญหาที่เกี่ยวข้อง- กราฟิก API ของ PS3 ดำเนินไปในทิศทางนี้ AMD ก็ดำเนินไปพร้อมกับ Mantle และ DirectX 12 และ Apple Metal ที่กำลังจะมาถึงก็กำลังไปที่นั่นเช่นกัน

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

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

ขณะนี้การเปลี่ยนแปลงสถานะได้รับการจัดระเบียบเป็นออบเจ็กต์สถานะที่สามารถสลับได้อย่างง่ายดาย ในขณะที่การสร้างออบเจ็กต์เหล่านี้จะมีราคาแพงกว่า ตัวอย่างเช่น MTLRenderPipelineState มีเชเดอร์และสถานะทั้งหมดที่นำไปใช้โดยการแพตช์

ข้อดีอีกประการหนึ่งของ API ใหม่คือไม่ต้องแบกรับภาระด้านความเข้ากันได้ รุ่นก่อนหน้าและจะไม่อนุรักษ์นิยมมากนัก

นอกจากนี้ยังมีความแตกต่างเล็กน้อยในการลับคมสำหรับ A7 ด้วยเหตุนี้ Metal จึงได้รับการปรับแต่งให้ทำงานกับระบบด้วย หน่วยความจำที่ใช้ร่วมกัน, เช่น. CPU และ GPU สามารถเข้าถึงข้อมูลเดียวกันได้โดยตรงโดยไม่ต้องถ่ายโอนข้อมูลข้ามกัน บัส PCI- Metal ช่วยให้โปรแกรมเข้าถึงบัฟเฟอร์จาก CPU ได้โดยตรง และความรับผิดชอบในการตรวจสอบให้แน่ใจว่า GPU จะไม่ใช้ข้อมูลนี้พร้อมกันตกเป็นภาระของโปรแกรมเมอร์ คุณสมบัติที่มีประโยชน์นี้ช่วยให้คุณสามารถผสมผลคูณของการคำนวณ GPU และ CPU ได้

และเร็วขึ้น 10 เท่าได้อย่างไร?
การโทรออกแต่ละครั้งจะใช้เวลากับ CPU และ GPU บ้าง Metal API ช่วยลดเวลาของ CPU โดยทำให้การตรวจสอบสถานะง่ายขึ้น และลดจำนวนการตรวจสอบข้อผิดพลาดจากไดรเวอร์เพื่อให้แน่ใจว่าการรวมสถานะนั้นถูกต้อง สถานะการคำนวณล่วงหน้ายังช่วยได้: ไม่เพียงแต่คุณสามารถตรวจสอบข้อผิดพลาดระหว่างการสร้างได้ แต่การเปลี่ยนสถานะจะต้องใช้การเรียก API น้อยลง ความสามารถในการสร้างบัฟเฟอร์คำสั่งแบบขนานจะเพิ่มจำนวนการเรียกดึงเมื่อแอปพลิเคชันถูกผูกกับ CPU

แต่ในทางกลับกัน การเรนเดอร์ GPU ไม่ได้เร็วขึ้น ซึ่งเป็นแอปพลิเคชั่นที่เรียกเมชขนาดใหญ่น้อยมาก ( ตาข่าย- ส่วนหนึ่งของโมเดลที่ประกอบด้วยจุดยอดของวัตถุ] จะไม่ได้รับประโยชน์ใดๆ จากการเปลี่ยนมาใช้ Metal

สิ่งเดียวกันนี้สามารถทำได้บน OpenGL หรือไม่
ที่ GDC 14 มีการนำเสนอที่ยอดเยี่ยมเกี่ยวกับ "Approaching Zero Driver Overhead" โดย Cass Everitt, John McDonald, Graham Sellers และ Tim Foley แนวคิดหลักคือการลดการทำงานของไดรเวอร์ใน OpenGL โดยการเพิ่มปริมาณงานที่ทำในการวาดสายและการใช้ออบเจ็กต์ GL ใหม่ และการเรียก GL น้อยลงเพื่อปรับปรุงประสิทธิภาพ

แนวคิดนี้และแนวคิดอื่นๆ จะต้องมีการขยาย OpenGL เพิ่มเติมและ API เวอร์ชันใหม่นี้ แต่ส่วนใหญ่สามารถถ่ายโอนไปยัง OpenGL ES ได้ สิ่งที่เราจะสูญเสียไปคือความสามารถในการจัดการบัฟเฟอร์คำสั่งโดยตรง พร้อมด้วยข้อดีและข้อเสียทั้งหมด

โอกาสที่จะได้เห็นสิ่งนี้ในอนาคตคืออะไร? เพราะได้รับการสนับสนุน ความเข้ากันได้แบบย้อนหลังเราคงได้แต่หวังว่าการปรากฏตัวของชุดฟังก์ชันบางอย่างที่สามารถเรียกได้ว่า” เคอร์เนลที่ทันสมัย"แต่ส่วนใหญ่จะต้องทำให้เข้ากันได้กับทุกสิ่งจนถึงฟังก์ชัน glBegin() ดั้งเดิม ข้อจำกัดนี้จะยังคงมีผลกับอนาคตที่เป็นไปได้ทั้งหมดของ OpenGL และจะจำกัดวิวัฒนาการ ทำให้ทางเลือกอื่นเช่น Metal API เป็นที่ต้องการมากขึ้น...

แท็ก:

  • API โลหะ
  • แอปเปิล
  • โอเพ่นเกิล
เพิ่มแท็ก

API กำหนดฟังก์ชันการทำงานที่โปรแกรม (โมดูล ไลบรารี) มอบให้ ในขณะที่ API ช่วยให้คุณสามารถสรุปได้ว่าฟังก์ชันนี้ถูกนำไปใช้อย่างไร

หากโปรแกรม (โมดูล, ไลบรารี) ถือเป็นกล่องดำ API จะเป็นชุดของ "ตัวจัดการ" ที่ผู้ใช้สามารถใช้งานได้ ของกล่องนี้ซึ่งเขาสามารถบิดและดึงได้

ส่วนประกอบซอฟต์แวร์โต้ตอบกันผ่าน API ในกรณีนี้ ส่วนประกอบมักจะสร้างลำดับชั้น - ส่วนประกอบระดับสูงใช้ API ของส่วนประกอบระดับต่ำ และในทางกลับกัน ส่วนประกอบเหล่านั้นก็ใช้ API ของส่วนประกอบระดับล่างด้วยซ้ำ

โปรโตคอลการถ่ายโอนข้อมูลถูกสร้างขึ้นบนหลักการนี้ โปรโตคอลอินเทอร์เน็ตมาตรฐาน (รุ่นเครือข่าย OSI) ประกอบด้วย 7 เลเยอร์ (จาก ระดับทางกายภาพส่งแพ็กเก็ตบิตไปยังโปรโตคอลแอปพลิเคชันเช่น HTTP และ IMAP) แต่ละเลเยอร์ใช้ฟังก์ชันการทำงานของเลเยอร์การถ่ายโอนข้อมูลก่อนหน้า และในทางกลับกัน ก็มอบฟังก์ชันที่จำเป็นให้กับเลเยอร์ถัดไป

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

API ฟังก์ชันและคลาสไลบรารีมีคำอธิบาย ลายเซ็นและ ความหมายของฟังก์ชัน.

อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) อินเทอร์เฟซซอฟต์แวร์ปฏิสัมพันธ์ระหว่างระบบช่วยให้:

  • เข้าถึงบริการทางธุรกิจขององค์กร
  • แลกเปลี่ยนข้อมูลระหว่างระบบและแอพพลิเคชั่น
  • ลดความซับซ้อนของการโต้ตอบระหว่างบริษัท คู่ค้า นักพัฒนา และลูกค้า

เปิดกลยุทธ์ API

กลยุทธ์ API ประกอบด้วย:

  • การพัฒนาผลิตภัณฑ์ทางธุรกิจโดยใช้ API ที่มีอยู่
  • ให้บริการภายในแก่นักพัฒนา
  • โมเดลการสร้างรายได้ API สำหรับการสร้างปฏิสัมพันธ์หลายช่องทางและเพิ่มผลกำไร

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

ตลาดสำหรับโซลูชันบูรณาการกำลังพัฒนาในบริบทของวิวัฒนาการของ API ตั้งแต่ EDI และ SOAP ไปจนถึง Web 2.0 ซึ่งเริ่มต้นยุคของ API สาธารณะ จำนวนอินเทอร์เฟซดังกล่าวในอีก 3 ปีข้างหน้าอาจเพิ่มขึ้นมากกว่า 50 เท่าและสูงถึง 1 ล้านครั้ง นี่เป็นเพราะ Omnichannel ช่องทางการโต้ตอบกับลูกค้าจะต้องเปลี่ยนแปลงไปพร้อมกับพวกเขา การเติบโตอย่างต่อเนื่องของจำนวนผู้บริโภคและปริมาณข้อมูลได้นำไปสู่การเกิดขึ้นของเศรษฐกิจ API ซึ่งช่วยสร้างโมเดลธุรกิจที่เป็นนวัตกรรมสำหรับการใช้สินทรัพย์และบริการขององค์กรตามอินเทอร์เฟซแบบเปิด

ลายเซ็นฟังก์ชัน

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

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

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

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

ตัวอย่างเช่น เพื่อดูบรรทัด “Hello, world!” ในเบราว์เซอร์ คุณเพียงแค่ต้องสร้างเอกสาร HTML ที่มีส่วนหัวน้อยที่สุดและมีเนื้อหาที่เรียบง่าย บรรทัดนี้- จะเกิดอะไรขึ้นเมื่อเบราว์เซอร์เปิดเอกสารนี้ โปรแกรมเบราว์เซอร์จะส่งชื่อไฟล์ (หรือตัวอธิบายไฟล์ที่เปิดอยู่แล้ว) ไปยังไลบรารีที่ประมวลผลเอกสาร HTML ซึ่งในทางกลับกันโดยใช้ API ระบบปฏิบัติการอ่านไฟล์นี้และเข้าใจโครงสร้างของมัน การเรียกผ่าน API ของไลบรารีของกราฟิกดั้งเดิมมาตรฐาน การดำเนินการเช่น "ล้างหน้าต่าง" "เขียนในแบบอักษรที่เลือก สวัสดีชาวโลก!" ด้วยการดำเนินการเหล่านี้ ไลบรารีของกราฟิก primitives จะติดต่อกับไลบรารีอินเทอร์เฟซของหน้าต่างพร้อมกับคำขอที่เกี่ยวข้อง จากนั้นไลบรารีนี้จะติดต่อกับ API ระบบปฏิบัติการพร้อมคำขอเช่น "ใส่สิ่งนี้ลงในบัฟเฟอร์การ์ดวิดีโอของฉัน"

นอกจากนี้ ในเกือบทุกระดับยังมี API ทางเลือกที่เป็นไปได้หลายตัว ตัวอย่างเช่น เราอาจเขียนเอกสารต้นฉบับไม่ใช่ HTML แต่เป็น LaTeX และเราสามารถใช้เบราว์เซอร์ใดก็ได้ในการแสดงผล เบราว์เซอร์ต่างๆโดยทั่วไปแล้ว ให้ใช้ไลบรารี HTML ที่แตกต่างกัน และยิ่งไปกว่านั้น ทุกสิ่ง (โดยทั่วไป) สามารถคอมไพล์ได้โดยใช้ไลบรารีดั้งเดิมที่แตกต่างกันและบนระบบปฏิบัติการที่แตกต่างกัน

ปัญหาหลักของหลายระดับที่มีอยู่ ระบบเอพีไอดังนั้นคือ:

  • ความยากในการพอร์ต รหัสโปรแกรมจากระบบ API หนึ่งไปยังอีกระบบหนึ่ง (เช่น เมื่อเปลี่ยนระบบปฏิบัติการ)
  • การสูญเสียฟังก์ชันการทำงานเมื่อย้ายจากระดับล่างไปสู่ระดับที่สูงขึ้น พูดโดยคร่าวๆ ก็คือ “เลเยอร์” API แต่ละรายการจะถูกสร้างขึ้นเพื่ออำนวยความสะดวกในการดำเนินการของบางเลเยอร์ ชุดมาตรฐานการดำเนินงาน แต่ในขณะเดียวกัน มันก็กลายเป็นเรื่องยากหรือเป็นไปไม่ได้เลยโดยพื้นฐานในการดำเนินการอื่น ๆ ที่ได้รับจาก API ระดับที่ต่ำกว่า

ประเภท API พื้นฐาน

API ภายใน

  • การเข้าถึง API จำกัดเฉพาะนักพัฒนาภายในเท่านั้น
  • แอปพลิเคชันมุ่งเป้าไปที่พนักงานระดับองค์กร

ตัวขับเคลื่อนธุรกิจ:

  • ความสม่ำเสมอในการพัฒนา
  • การลดต้นทุน
  • เพิ่มประสิทธิภาพการพัฒนา

API ของพันธมิตร

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

ตัวขับเคลื่อนธุรกิจ:

  • ระบบอัตโนมัติของกระบวนการพัฒนา
  • การพัฒนาความร่วมมือ
  • เพิ่มประสิทธิภาพกระบวนการโต้ตอบกับพันธมิตร

API สาธารณะ

อนุญาตให้เข้าถึงแก่นักพัฒนาซอฟต์แวร์ภายนอก แอปพลิเคชันมุ่งเป้าไปที่ผู้ใช้ปลายทาง

ตัวขับเคลื่อนธุรกิจ:

  • การพัฒนาบริการใหม่ๆ
  • การพัฒนาระบบนิเวศ
  • การโต้ตอบทุกช่องทาง

API ที่มีชื่อเสียงที่สุด

ระบบปฏิบัติการ API

GUI API

  • Direct3D (ส่วนหนึ่งของ DirectX)
  • DirectDraw (ส่วนหนึ่งของ DirectX)

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

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

แบบฟอร์มที่พบบ่อยที่สุดบางรูปแบบจะมีการพูดคุยสั้นๆ ด้านล่างนี้:

GUI API สมัยใหม่

การพัฒนาคอมเพล็กซ์ที่ทันสมัย โปรแกรมกราฟิกโดยเฉพาะแอปพลิเคชัน 3 มิติ เชื่อมโยงกับการใช้ API อย่างแยกไม่ออก

(อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน)

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

มีอินเทอร์เฟซค่อนข้างมาก แต่ทั้งหมดสามารถแบ่งออกเป็นสองคลาส: สากลและเฉพาะทาง

Universal API นั้นเป็นเรื่องปกติสำหรับตัวเร่งความเร็ว 3 มิติและการสนับสนุนทั้งหมด การเร่งความเร็วด้วยฮาร์ดแวร์สำหรับ API เหล่านี้เป็นความรับผิดชอบของตัวเร่งความเร็วเอง ก่อนอื่นเราควรเน้น Microsoft DirectX และ OpenGL ทั้งสองอย่างนี้ใช้ในโปรแกรมคอมพิวเตอร์แอนิเมชั่นเป็นหลัก

API เฉพาะทางได้รับการออกแบบมาเพื่อทำงานร่วมกับตัวเร่งกราฟิกที่สร้างขึ้นบนชิปเซ็ต 3D เฉพาะ ที่มีชื่อเสียงที่สุด ได้แก่ Glide API - อินเทอร์เฟซสำหรับการทำงานกับชิปVooDoo® Metal - สำหรับชิป Savage3D เป็นต้น โปรแกรมที่เขียนโดยใช้ API พิเศษจะทำงานเฉพาะกับตัวเร่งความเร็วที่สร้าง API เหล่านี้เท่านั้น API พิเศษส่วนใหญ่มีเพียงอินเทอร์เฟซการเขียนโปรแกรมระดับต่ำ แต่ล่าสุดมีแบบใหม่ เวอร์ชัน DirectXรวมถึงอินเทอร์เฟซการสนับสนุนระดับสูงเช่น DirectX สำหรับ VisualBasic ซึ่งให้การสนับสนุนภาษาสำหรับแอปพลิเคชันมัลติมีเดียที่เขียนในสภาพแวดล้อม VisualBasic การเขียนโปรแกรมด้วยภาพขั้นพื้นฐาน

ไมโครซอฟต์ DirectX API

Microsoft DirectX API คือชุดของอินเทอร์เฟซการเขียนโปรแกรมที่ใช้ในการแก้ปัญหา งานต่างๆ: จากการจัดการซอฟต์แวร์ของฮาร์ดแวร์คอมพิวเตอร์ไปจนถึงการพัฒนา แอปพลิเคชั่นมัลติมีเดียการใช้ข้อมูลประเภทต่างๆ และสร้างโลกเสมือนจริง

เป้าหมายหลักที่ Microsoft ดำเนินการเมื่อสร้างอินเทอร์เฟซ DirectX คือการทำให้คอมพิวเตอร์ทำงาน ระบบวินโดวส์, วี แพลตฟอร์มสากลสำหรับแอปพลิเคชันที่มีองค์ประกอบมัลติมีเดียมากมาย: กราฟิกสีเต็มรูปแบบ ชิ้นส่วนวิดีโอ

ทามิ, แอนิเมชั่น 3 มิติและเสียงสเตอริโอ สร้างขึ้นโดยตรงในเคอร์เนลระบบปฏิบัติการ อินเตอร์เฟซวินโดวส์ DirectX เป็นบริการแบบครบวงจร

Windows 98 และ Windows 2000 ตลอดจน ไมโครซอฟต์อินเทอร์เน็ตนักสำรวจ ส่วนประกอบ

สามารถดาวน์โหลด DirectX ลงคอมพิวเตอร์ของคุณโดยอัตโนมัติเมื่อติดตั้งเกมสมัยใหม่และแอพพลิเคชั่นมัลติมีเดียที่พัฒนาขึ้นสำหรับ Windows 95 สำหรับนักพัฒนา DirectX มีชุดอินเทอร์เฟซซอฟต์แวร์ซึ่งช่วยให้คุณสามารถแก้ไขปัญหาหลักสองประการได้

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

ประการที่สอง DirectX เปิดโอกาสให้นักพัฒนาได้สรุปจากอะแดปเตอร์แสดงผล การ์ดเสียง หรือตัวเร่งความเร็ว 3D ประเภทใดประเภทหนึ่งโดยเฉพาะ และมุ่งเน้นไปที่ตรรกะของโปรแกรมเอง

DirectX Foundation มอบชุดอินเทอร์เฟซการเขียนโปรแกรมระดับต่ำให้กับนักพัฒนา การเข้าถึงที่มีประสิทธิภาพถึงความสามารถทั้งหมดของคอมพิวเตอร์ที่ใช้ OS Windows ซึ่งนำไปใช้ในระดับ ฮาร์ดแวร์– ตัวเร่งความเร็ว 3 มิติ การ์ดเสียง,อุปกรณ์ป้อนข้อมูล ก่อนการมาถึงของ DirectX นักพัฒนาที่สร้างแอปพลิเคชั่นมัลติมีเดียสำหรับแพลตฟอร์ม Windows จะต้องกำหนดค่าโปรแกรมให้ทำงานกับอุปกรณ์และการกำหนดค่าประเภทต่างๆ ขณะนี้ปัญหานี้ได้รับการแก้ไขแล้ว DirectX Foundation มีส่วนประกอบที่เรียกว่า Hardware Abstraction Layer (HAL) ซึ่งใช้ซอฟต์แวร์

ไดรเวอร์เพื่อให้แน่ใจว่ามีปฏิสัมพันธ์ระหว่างซอฟต์แวร์และฮาร์ดแวร์ ด้วยเหตุนี้ นักพัฒนาจึงสามารถสร้างแอปพลิเคชันเวอร์ชันเดียวโดยใช้อินเทอร์เฟซ DirectX ได้โดยไม่ต้องกังวลว่าแอปพลิเคชันจะทำงานบนการกำหนดค่าฮาร์ดแวร์เฉพาะ DirectX จะตรวจจับความสามารถทางเทคนิคของคอมพิวเตอร์ของคุณโดยอัตโนมัติและตั้งค่าพารามิเตอร์ที่เหมาะสม DirectX ยังช่วยให้คุณสามารถเรียกใช้แอพพลิเคชันมัลติมีเดียที่ต้องการการสนับสนุนด้านฮาร์ดแวร์ที่ไม่มีให้บริการได้ คอมพิวเตอร์เครื่องนี้- ในกรณีนี้ ส่วนประกอบเหล่านั้นจะถูกจำลองในซอฟต์แวร์โดยส่วนประกอบที่เรียกว่า Hardware Emulation Layer (HEL) และจัดเตรียมไดรเวอร์ซอฟต์แวร์ที่ทำหน้าที่เป็นอุปกรณ์ที่ขาดหายไป

DirectX Media อยู่เหนือ DirectX Foundation และให้บริการระดับสูง - การสนับสนุนแอนิเมชั่น, สตรีมมิ่งเอาท์พุต (ความสามารถในการส่งและดูข้อมูลเสียงและวิดีโอในขณะที่ดาวน์โหลดจากอินเทอร์เน็ต) และการโต้ตอบ การบูรณาการบริการระดับต่ำโดยอัตโนมัติจาก DirectX Foundation และบริการระดับสูงที่ DirectX Media มอบให้ ช่วยลดความซับซ้อนของกระบวนการสร้างและเล่นองค์ประกอบมัลติมีเดีย ช่วยให้นักพัฒนาสามารถรวมบริการเหล่านี้ไว้ในแอปพลิเคชันและเว็บเพจของตนได้ ดังนั้นจึงให้เนื้อหามัลติมีเดียเชิงโต้ตอบที่ ไม่สามารถใช้ได้ก่อนหน้านี้ นอกจากนี้ DirectX Media ยังช่วยแก้ปัญหาในการประสานงานเอฟเฟกต์มัลติมีเดียประเภทต่างๆ ทำให้ง่ายต่อการซิงโครไนซ์การเล่น นอกเหนือจากองค์ประกอบหลักทั้งสองนี้แล้ว Microsoft DirectX ยังมีส่วนประกอบระดับสูงที่ให้ฟังก์ชันมัลติมีเดียสำหรับแอปพลิเคชันบนเว็บอีกด้วย ซึ่งรวมถึง: NetMeeting - เครื่องมือสำหรับจัดการสนทนากลุ่มออนไลน์และ Windows Media Player - เครื่องมือสำหรับส่งเนื้อหามัลติมีเดียผ่านอินเทอร์เน็ต ให้เราพิจารณาองค์ประกอบหลักโดยย่อ

ส่วนประกอบของ DirectX Foundation เหล่านี้ได้แก่ ไมโครซอฟต์ DirectDraw, Direct3D(โหมดทันทีและโหมดคงไว้), DirectInput, DirectMusic, DirectSound,

DirectSound 3D และ DirectPlay อินเทอร์เฟซการเขียนโปรแกรมระดับระบบเหล่านี้

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

Microsoft Direct3D เป็นอินเทอร์เฟซสำหรับการทำงานกับการ์ดแสดงผล 3 มิติ สถาปัตยกรรม Direct3D แสดงในรูปที่ 1.5

แอปพลิเคชั่น Win32

Direct3D รองรับโหมดการทำงานสองโหมด - โหมดทันทีและโหมดเก็บรักษา ในโหมดทันที Direct3D จะให้การสนับสนุนฮาร์ดแวร์สำหรับนักพัฒนาเกมและแอพพลิเคชั่นมัลติมีเดียในสภาพแวดล้อม Microsoft Windows ช่วยให้คุณได้รับความเป็นอิสระด้านฮาร์ดแวร์ รองรับบัฟเฟอร์ Z แบบสลับได้และสถาปัตยกรรมโปรเซสเซอร์ Intel MMX ในโหมดนี้ กราฟิกพื้นฐานเบื้องต้นจะถูกนำมาใช้โดยตรง โดยไม่ต้องใช้บัฟเฟอร์การดำเนินการ

โหมดคงไว้ช่วยให้สร้างและสร้างภาพเคลื่อนไหวโลก 3 มิติได้ง่ายขึ้นโดยรองรับคุณสมบัติใหม่ 2 ประการ ได้แก่ ตัวแทรกภาพเคลื่อนไหวพร้อมการผสมสี การเคลื่อนไหวของวัตถุที่ราบรื่น และคุณสมบัติหลายอย่าง ประเภทต่างๆการเปลี่ยนแปลง รวมถึงการเติมโครงสร้าง 3D mesh ตามลำดับ

วัตถุ (ตาข่าย) ช่วยให้สามารถโหลดได้ทีละน้อย เซิร์ฟเวอร์ระยะไกล- ช่วยให้นักพัฒนาสามารถใช้กราฟิก 3D ได้อย่างมีประสิทธิภาพโดยไม่ต้องจัดการโครงสร้างวัตถุโดยตรงในระดับต่ำ

ควรสังเกตว่าแอปพลิเคชัน Direct3D สื่อสารกับอุปกรณ์กราฟิกในลักษณะเดียวกันโดยไม่คำนึงถึงโหมด พวกเขาอาจใช้หรือไม่ใช้การจำลองซอฟต์แวร์ก่อนเข้าถึง HAL ในความเป็นจริง Direct3D ได้รับการบูรณาการอย่างใกล้ชิดกับส่วนประกอบ DirectDraw ดังนั้นในรูปที่ 1.2 เลเยอร์นามธรรมของฮาร์ดแวร์ HAL จึงถูกกำหนดให้เป็น DirectDraw/Direct3D HAL Direct3D Z บัฟเฟอร์และเรนเดอร์พื้นผิว ในขณะที่ DirectDraw จะแสดงโดยตรง อินเทอร์เฟซ Direct3D COM เป็นส่วนต่อประสานกับ DirectDraw

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

รูปที่ 1.6 แสดงการโต้ตอบระหว่าง DirectDraw, ส่วนประกอบเคอร์เนลระบบปฏิบัติการ GDI (Graphics Device Interface), Hardware Abstraction Layer (HAL) และเลเยอร์การจำลองฮาร์ดแวร์

(เลเยอร์การจำลองฮาร์ดแวร์, HEL) อย่างที่คุณเห็น DirectDraw นั้นมีอยู่อย่างอิสระ

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

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

แอปพลิเคชั่น Win32

เลเยอร์ (HEL)

เลเยอร์นามธรรม

การ์ดจอ

รูปที่ 1.6 – การรวม DirectDraw เข้ากับระบบ

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

คุณสมบัติ DirectInput ใหม่ประกอบด้วยรายการอุปกรณ์ที่รองรับเพิ่มเติม ได้แก่ แผ่นเกม เครื่องบิน

แอกบิน, หมวกกันน็อค ความเป็นจริงเสมือน(หมวกเสมือนจริง)

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

ไดเร็กมิวสิคคือ ส่วนประกอบใหม่ครอบครัว เทคโนโลยีไดเร็คเอ็กซ์ซึ่งเป็นซอฟต์แวร์เชลล์สำหรับสร้างเทมเพลตดนตรีและคำแนะนำในการตอบสนองต่อการกระทำของผู้ใช้ สิ่งนี้ทำให้นักพัฒนาสามารถสร้างได้ เพลงพื้นหลังแบบเรียลไทม์ตามอัลกอริธึมที่ระบุในเว็บเพจหรือแอปพลิเคชันมัลติมีเดีย DirectMusic นำเสนอการใช้งานมาตรฐาน DownLoadable Sounds (DLS) อย่างเต็มรูปแบบ ช่วยให้นักพัฒนาสามารถสร้างเทมเพลตเพลงที่เล่นได้บนแพลตฟอร์มฮาร์ดแวร์แทบทุกชนิด DirectMusic มี DirectMusic Producer ซึ่งเป็นโปรแกรมแก้ไขแบบรวมที่ช่วยให้คุณทำงานกับออบเจ็กต์ DirectMusic ทั้งหมด: สไตล์ เทมเพลต เครื่องมือ DLS ฯลฯ

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

ใน นอกเหนือจากอินเทอร์เฟซ DirectX Foundation ระดับต่ำแล้ว DirectX ยังมีชุดอินเทอร์เฟซการเขียนโปรแกรมระดับสูงกว่าอีกด้วย

และส่วนประกอบ DirectX Media ซึ่งให้การสนับสนุนแอพพลิเคชั่นมัลติมีเดีย แอนิเมชั่น และเอาท์พุตข้อมูลสตรีมมิ่ง ปัจจุบัน DirectX Media ประกอบด้วยอินเทอร์เฟซการเขียนโปรแกรมหลักดังต่อไปนี้:

ไดเร็คโชว์ (เมื่อก่อนเรียกว่า. ActiveMovieSDK); ไดเร็คแอนิเมชั่น (เมื่อก่อนเรียกว่า.แอ็กทีฟเอ็กซ์แอนิเมชั่น); การแปลง DirectX โปรดทราบว่าบริการ DirectX Media ใช้บริการ DirectX Foundation

API (Application Programming Interface) ช่วยให้นักพัฒนาฮาร์ดแวร์และซอฟต์แวร์สามารถสร้างไดรเวอร์และโปรแกรมที่ทำงานได้เร็วขึ้นบนแพลตฟอร์มที่หลากหลาย ไดรเวอร์ซอฟต์แวร์ได้รับการออกแบบมาให้โต้ตอบกับ API โดยตรง แทนที่จะโต้ตอบกับระบบปฏิบัติการและซอฟต์แวร์

ปัจจุบันมี API กราฟิกสองตัว ได้แก่ OpenGL (SGI) และ Direct 3D (Microsoft)

แม้ว่าผู้ผลิตอะแดปเตอร์วิดีโอจะสนับสนุนมาตรฐาน OpenGL แต่ Microsoft ก็ให้การสนับสนุน Direct3D สำหรับ API ที่ครอบคลุมมากขึ้นที่เรียกว่า DirectX

DirectX 9 และสูงกว่าคืออินเทอร์เฟซการเขียนโปรแกรมเวอร์ชันล่าสุดเพื่อขยายการรองรับ กราฟิก 3 มิติและมอบความสามารถในการเล่นเกมที่ได้รับการปรับปรุง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ DirectX หรือดาวน์โหลดเวอร์ชันล่าสุด โปรดเยี่ยมชมเว็บไซต์ DirectX ของ Microsoft: www.microsoft.com/directx

CrossFire หรือ sli

เพื่อตอบสนองต่อการพัฒนาและส่งเสริมเทคโนโลยี SLI รุ่นเก่า (MK No. 30(357) 2005) โดย NVIDIA ซึ่งเป็นคู่แข่งหลักในตลาดตัวเร่งวิดีโอ ATI ได้พัฒนาและปรับใช้โซลูชันที่คล้ายกันของตัวเอง - เทคโนโลยี CrossFire เช่นเดียวกับ SLI ของ NVIDIA ช่วยให้คุณสามารถรวมทรัพยากรของการ์ดแสดงผลสองตัวในคอมพิวเตอร์เครื่องเดียวเข้าด้วยกัน ซึ่งจะช่วยเพิ่มประสิทธิภาพของระบบย่อยของวิดีโอ เทคโนโลยี CrossFire นั้นแตกต่างโดยพื้นฐานจาก SLI และดังนั้นจึงมีความเหมือนกันกับคู่แข่งเพียงเล็กน้อย เมื่อพิจารณาถึงข้อได้เปรียบบางประการของเทคโนโลยีใดเทคโนโลยีหนึ่ง ในอนาคตอันใกล้นี้ ผู้ใช้จะเลือกระหว่าง NVIDIA และ ATI ไม่เพียงแต่ขึ้นอยู่กับความคิดเห็นเกี่ยวกับแบรนด์ที่ก่อตั้งขึ้นในช่วงหลายปีที่ผ่านมา แต่ยังขึ้นอยู่กับข้อเท็จจริงเกี่ยวกับเทคโนโลยี SLI หรือ CrossFire ด้วย

ฐานทางเทคนิค

โดยการเปรียบเทียบกับ NVIDIA ในการวางการ์ดแสดงผล ATI สองตัวไว้ใน "สายรัด" เดียวคุณจะต้องใช้มาเธอร์บอร์ดที่มีชิปเซ็ตจากผู้ผลิตรายเดียวกัน (ชิปเซ็ต Intel i975X ได้รับการวางแผนที่จะรองรับ CrossFire ด้วย) โดยมีสอง สล็อต PCIด่วน. เช่นเดียวกับ SLI CrossFire ต้องการทรัพยากรระบบซึ่งจะต้องใช้แหล่งจ่ายไฟคุณภาพสูง มาดูรายละเอียดความต้องการของระบบกันดีกว่า

เมนบอร์ด.แม่จะต้องใช้ชิปเซ็ต ATI Radeon Xpress 200 CrossFire- บอร์ดเหล่านี้มีจำหน่ายสำหรับทั้งโปรเซสเซอร์ AMD Sempron/Athlon 64 และ Intel Pentium 4/Celeron ดังนั้นตอนนี้ ATI จะทำเงินจากชิปเซ็ตซึ่งก่อนหน้านี้การผลิตยังไม่ถึงขนาดใหญ่

การ์ดแสดงผลเพื่อให้เทคโนโลยีทำงานได้ คุณต้องมีมาสเตอร์การ์ด CrossFire (ดูข้อมูลเพิ่มเติมด้านล่าง) และการ์ดแสดงผลอื่นๆ ที่ใช้ชิปในตระกูลเดียวกันกับการ์ดโฮสต์ สิ่งที่ทำให้มาสเตอร์การ์ดแตกต่างจากการ์ดอื่นคือการมีตัวเชื่อมต่อ DMS-59 (เชื่อมต่อกับ DVI บนการ์ดสเลฟ) ชิป CrossFire และแน่นอนว่ามีราคา

หน่วยพลังงานเพื่อรักษาชุดที่จริงจังเช่นนี้ คุณจะต้องมีแหล่งจ่ายไฟที่มีกำลังขั้นต่ำ 400–450 W โดยควรเป็นแหล่งจ่ายไฟที่ทรงพลังกว่า

นั่นคือทั้งหมดที่คุณต้องมีในการประกอบระบบวิดีโอ ครอสไฟร์- ดังที่คุณสังเกตเห็นว่า ATI มีความยืดหยุ่นกับลูกค้ามากขึ้นโดยไม่ได้ผูกมัดพวกเขาเหมือนที่ดินในฟาร์มรวมกับการซื้อการ์ดสองใบด้วยชิปเดียวกันจากผู้ผลิตรายเดียวกัน การเชื่อมโยงจะดำเนินการเฉพาะกับตระกูลชิปวิดีโอที่ใช้ตัวเร่งความเร็วเท่านั้น นั่นคือคุณสามารถซื้อตัวเร่งความเร็ววิดีโอ Radeon X800 ชั้นนำและ Radeon X800 XL ที่เป็นทาสได้ Master Radeon X800 จะเข้ากันได้กับการ์ดจากผู้ผลิตทุกรายโดยขึ้นอยู่กับการดัดแปลงชิป X800 นี่เป็นข้อได้เปรียบเหนือคู่แข่งอย่างแน่นอน - หากคุณใช้คันเร่งเพียงตัวเดียวโดยมีโอกาสที่จะได้รับการปรับปรุงให้ทันสมัยยิ่งขึ้นด้วยการติดตั้งการ์ดแสดงผลอีกตัว คุณจะไม่ต้องค้นหาการ์ดจากผู้ผลิตรายใดรายหนึ่งโดยใช้ชิปเฉพาะ บน ในขณะนี้เทคโนโลยี CrossFire รองรับโดยการ์ดแสดงผลที่ใช้ X800 และ X850 รวมถึงผลิตภัณฑ์ใหม่ที่ใช้ X1xxx

ไม่กี่ปีที่ผ่านมา Apple ได้เปิดตัว API กราฟิกใหม่ - Metal ความแตกต่างจาก Scene Kit เดียวกันคือไม่ใช่ API ระดับสูงที่ทำงานบน OpenGL ES (มือถือ เวอร์ชัน OpenGL) แต่เป็น API ระดับต่ำสำหรับการเรนเดอร์และการประมวลผลที่สามารถแทนที่ OpenGL ได้ จากข้อมูลของ Apple นั้น Metal นั้นมีลำดับความสำคัญเร็วกว่า OpenGL ES (แต่ในความเป็นจริงแล้ว เฉพาะการโทรออกและการถ่ายโอนข้อมูลไปยัง GPU เท่านั้นที่เร็วกว่า 10 เท่า) API นี้สามารถใช้ได้กับอุปกรณ์ทั้งหมดที่ทำงานบนโปรเซสเซอร์ A7 และใหม่กว่า รวมถึง Mac ที่เริ่มตั้งแต่ปี 2012

API กราฟิกทำงานอย่างไร

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

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

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

นวัตกรรมใน API Metal

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

นวัตกรรมที่สำคัญอีกประการหนึ่งคือฮาร์ดแวร์: เปิด โปรเซสเซอร์ของ Apple A7 และสูงกว่า Metal ได้รับการออกแบบมาเพื่อทำงานกับหน่วยความจำที่ใช้ร่วมกัน กล่าวคือ CPU และ GPU สามารถเข้าถึงข้อมูลเดียวกันได้โดยไม่จำเป็นต้องถ่ายโอนข้อมูลผ่านบัส PCI Metal ช่วยให้โปรแกรมเข้าถึงบัฟเฟอร์ CPU ได้โดยตรง และโปรแกรมเมอร์สามารถ "ผสม" การคำนวณบน GPU และ CPU ซึ่งสามารถเร่งความเร็วโปรแกรมได้อย่างมาก

ประโยชน์ที่แท้จริงจาก API Metal

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

และนี่คือคำถามที่เกิดขึ้น - Apple พูดถึงประสิทธิภาพการทำงานที่เพิ่มขึ้นสิบเท่าอย่างไร? ใช่ นั่นคือสิ่งที่เวลาในการโทรบน CPU สั้นลงมากในขณะนี้ แต่ GPU แทบจะไม่ได้รับผลกระทบที่นี่ ดังนั้นท้ายที่สุดแล้ว จึงเป็นไปไม่ได้เลยที่จะปรับปรุงกราฟิกโดยตรงโดยใช้ Metal API แต่เนื่องจากโปรเซสเซอร์เป็นอิสระ จึงสามารถโหลดฟิสิกส์ได้ เช่น การคำนวณฟิสิกส์ของอนุภาค ปฏิกิริยาของวัตถุต่างๆ (ทุกคนจำลิงบินได้ร้อยตัวในการนำเสนอ iPhone 7 หรือไม่) คำนวณผลกระทบของผ้าและน้ำ และ เร็วๆ นี้. และเนื่องจาก GPU เคยทำสิ่งนี้ เราจึงปล่อยมันออก และปรากฎว่าตอนนี้สามารถส่งออกทางอ้อมได้แล้ว ภาพที่ดีที่สุดสิ่งที่เราเห็นในเกม (รวมถึง Asphalt 8) (ใส่ใจกับรายละเอียดของการปูหินและเอฟเฟกต์):

การทำงานร่วมกันระหว่าง OpenGL และ Metal

ดังที่เห็นได้จากข้างต้น Metal ช่วยยืดอายุการใช้งานของโปรเซสเซอร์ได้อย่างแท้จริง ดังนั้นหากระบบไม่รองรับ Metal แต่มีมาก โปรเซสเซอร์อันทรงพลังดังนั้นจึงไม่ใช่เรื่องยากโดยเฉพาะในการเขียนเกมใหม่สำหรับ OpenGL - และนี่คือสิ่งที่เราเห็นใน Vainglory สำหรับ Android - เพื่อให้ได้กราฟิกสูงสุด (ระดับ Apple A9) บน OpenGL ที่คุณต้องการ โปรเซสเซอร์ชั้นนำระดับของ Snapdragon 820 ซึ่งในแง่ของประสิทธิภาพดิบ (ใน FLOPS) นั้นทรงพลังเป็นสองเท่าของ A9

แอปเปิ้ลเมทัล 2

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