เจาะลึก WARP 10 การสร้างภาพ 3D โดยการใช้พลังการประมวลผลจากซีพียู
หนึ่งในความพยายามของไมโครซอฟท์ที่จะพัฒนาระบบปฏิบัติการ Windows 7 ก็คือ ต้องการใช้คอมพิวเตอร์ระดับล่างที่ไม่ได้มีกราฟิกการ์ดระดับสูงสามารถทำงานร่วมกับอินเทอร์เฟซแบบ Aero Glass ได้ ซึ่งก่อนหน้านี้เองไมโครซอฟท์ก็เคยมีปัญหาเรื่อง Aero Glass มาแล้วกับคอมพิวเตอร์จำนวนมากที่มีโลโก้คำว่า Vista Ready และ Vista Capable มาแล้ว นั่นก็คือฮาร์ดแวร์เหล่านั้นไม่สามารถรองรับการทำงานของวินโดวส์วิสต้าได้อย่างครบถ้วนในทุกคุณสมบัติ ซึ่งเรื่องนี้อาจจะเป็นการจงใจปกปิดจากผู้ค้าฮาร์ดแวร์เองก็เป็นได้ อย่างไรก็ตามไมโครซอฟต์ไม่ต้องการให้เกิดปัญหาในลักษณะดังกล่าวขึ้นมาอีก โดยเฉพาะในเรื่องของการเปิดใช้ความสามารถแบบ Aero Glass โดยล่าสุดไมโครซอฟท์ได้ทำการพัฒนาเทคโนโลยีที่เรียกว่า WARP ขึ้นมาเพื่อป้องกันแก้ปัญหาดังกล่าวไม่ให้กลับมาเกิดขึ้นอีกเมื่อวินโดวส์ 7 ออกสู่ตลาด
ซึ่งอันที่จริงแล้วเป้าหมายหลักของเทคโนโลยี WARP ที่ไมโครซอฟท์สร้างขึ้นมานั้นมันไม่ใช่เพียงแค่เรื่องของทำให้เราสามารถใช้ Aero Glass ของ Windows 7 บนฮาร์ดแวร์ระดับล่างเท่านั้น แต่ยังมีเป้าหมายไปยังแอพพลิเคชันใดๆ ที่ต้องการใช้ระบบกราฟิกบนเอนจินของ DirectX สามารถที่จะทำงานได้แม้ว่าคอมพิวเตอร์เครื่องนั้นจะไม่มี GPU อยู่เลยก็ตาม ส่วนรายละเอียดจะเป็นอย่างไรก็ต้องติดตามครับ
ภาพแสดงความสัมพันธ์โดยพื้นฐานของระดับชั้น โดยชั้นบนสุดก็คือแอพพลิเคชันที่ผู้ใช้ทั่วไปใช้งาน ระดับต่อมาก็คือเรื่องของภาษาที่ใช้ในการเขียนแอพพลิเคชัน ลดลงมาอีกขั้นก็จะเป็นระดับของพวกไลบราลีของภาษาต่างๆ จากนั้นจึงจะเป็นส่วนของฮาร์ดแวร์
ลักษณะการเขียนแอพพลิเคชันพื้นฐานทั่วไปบนวินโดวส์ก็จะใช้ GDI (Graphics Design Interface) เป็นหลักแล้วจึงส่งข้อมูลให้เลเยอร์ของ DirectX
WARP คืออะไร?
WARP10 (Windows Advanced Rasterization Platform) คือส่วนประกอบล่าสุดที่เป็นส่วนหนึ่งของเทคโนโลยีกราฟิก DirectX ในวินโดวส์ 7 WARP10 เป็นซอฟต์แวร์ราสเตอร์ไรเซอร์ (rasterizer) ที่มีมาตรฐานซึ่งทำงานด้วยความเร็วสูง และเปิดตัวรุ่นเบต้าครั้งแรกใน DirectX SDK ประจำเดือนพฤศจิกายน 2008
ส่วนคำว่า Rasterization หรือ Rasterizer ก็คือกระบวนการแปลงข้อมูลที่อยู่ในรูปแบบของเวคเตอร์กราฟิก (Vector graphics) คือข้อมูลที่ประกอบไปด้วยขนาดและทิศทางให้มาอยู่ในรูปแบบของ Raster Image หรือพูดให้ง่ายกว่านั้นก็คือแปลงภาพแบบเว็คเตอร์ให้มาเป็นภาพแบบบิตแมพเพื่อใช้แสดงผลบนหน้าจอนั่นเอง
วัตถุประสงค์ของ WARP10
WARP10 มีเป้าหมายที่สำคัญหกประการ อันได้แก่
- เติมเต็มแพลตฟอร์มมีความสมบูรณ์
- แทนที่ความต้องการใช้ซอฟต์แวร์ราสเตอร์ไรเซอร์เฉพาะ
- ช่วยให้ใช้ฮาร์ดแวร์ได้อย่างเต็มสมรรถภาพ
- ช่วยให้สามารถสร้างภาพได้เมื่อไม่มีฮาร์ดแวร์ Direct3D 10 ให้ใช้งาน
- ยกระดับทรัพยากรสำหรับการสร้างภาพด้วยซอฟต์แวร์ที่มีอยู่แล้ว
- ทำให้ทำงานได้โดยไม่ต้องใช้ฮาร์ดแวร์กราฟิก
แพลตฟอร์มของฮาร์ดแวร์ในปัจจุบันมีอยู่มากมาย ไมโครซอฟท์ต้องการให้ผู้พัฒนาแอพพลิเคชันสามารถที่จะเขียนแอพพลิเคชันเพียงครั้งเดียวโดยสามารถให้แอพพลิเคชันตัวนั้นรันบนแพลตฟอร์มที่มีความแตกต่างกันได้ แต่มีเงื่อนไขอยู่ว่าแพลตฟอร์มเหล่านั้นต้องรองรับการทำงานของ DirectX ไม่ว่าจะเป็นการรองรับในระดับฮาร์ดแวร์หรือซอฟต์แวร์ก็ตาม
เติมเต็มแพลตฟอร์มมีความสมบูรณ์
การเปลี่ยนแปลงที่สำคัญประการหนึ่งของ Direct3D 10 คือการขจัดความแตกต่างระหว่างการ์ดแสดงผลแต่ละแบบและสร้างความมั่นใจว่าการ์ด Direct3D 10 ทุกตัวจะมีคุณสมบัติเหมือนกันและผ่านการรับรองจากไมโครซอฟท์ อันช่วยให้นักพัฒนาได้รับประโยชน์ของความสามารถทุกประการของการ์ดแสดงผลอันหลากหลายและช่วยรับประกันว่าแอพพลิเคชันมีลักษณะเหมือนกันทุกประการแม้ว่าผู้ใช้จะใช้การ์ดแสดงผลที่ต่างกันไป เราสามารถเร่งสมรรถภาพของแอพพลิเคชันเหล่านี้ได้ง่าย ๆ ด้วยการปิดการทำงานของกราฟิกที่ละเอียดบนการ์ดแสดงผลระดับล่างหรือสร้างภาพโดยตั้งเป้าหมายให้เล็กลง WARP10 ทุ่มเทให้กับเป้าหมายเดียวกับ Direct3D 10 ด้วยการเปิดทางให้นักพัฒนาสามารถเข้าถึงคุณสมบัติกราฟิก Direct3D 10 ทั้งหมดแม้ว่าบนเครื่องนั้นจะไม่ได้มีการติดตั้งฮาร์ดแวร์กราฟิก Direct3D 10 ก็ตาม
โครงสร้างการทำงานของ DirectX และส่วนของ WARP 10 ใน Windows 7
แทนที่ความต้องการใช้ซอฟต์แวร์ราสเตอร์ไรเซอร์เฉพาะ
WARP ช่วยให้การพัฒนากระทำได้ง่ายขึ้นด้วยการขจัดเวลาที่ต้องใช้ในการสร้างซอฟต์แวร์ราสเตอร์ไรเซอร์เฉพาะและปรับแต่งแอพพลิเคชันให้เหมาะสมเพื่อใช้แทนฮาร์ดแวร์ การที่ WARP จัดหาซอฟต์แวร์ราสเตอร์ไรเซอร์สำหรับใช้งานทั่วไปที่มีมาตรฐานที่ชัดเจน ทำให้เราไม่มีความจำเป็นที่จะต้องเขียนอัลกอริธึมในการสร้างภาพแบบต่าง ๆ เพื่อให้สามารถทำงานบนฮาร์ดแวร์หรือซอฟต์แวร์ที่มีคุณสมบัติและความสามารถที่ต่างกัน นักพัฒนายังคงสามารถเลือกที่จะพัฒนาอัลกอริธึมแบบต่าง ๆ หากต้องการได้สมรรถภาพที่ดีขึ้นหรือยืดหยุ่นมากขึ้น อย่างไรก็ดี ไม่มีความจำเป็นจะต้องแก้ไข API หรือสถาปัตยกรรมในการสร้างภาพที่ใช้สำหรับพัฒนาอัลกอริธึมเหล่านี้ นักพัฒนาสามารถใส่ใจกับการสร้างแอพพลิเคชัน Direct3D 10 และมั่นใจว่ามันจะออกมามีหน้าตาเหมือนกันและทำงานได้ดีทั้งบนฮาร์ดแวร์และซอฟต์แวร์
ช่วยให้ใช้ฮาร์ดแวร์ได้อย่างเต็มสมรรถภาพ
เมื่อมีการปรับแต่งแอพพลิเคชันเพื่อให้ทำงานบนฮาร์ดแวร์ได้อย่างมีประสิทธิภาพ แอพพลิเคชันจะทำงานบน WARP ได้อย่างมีประสิทธิภาพเช่นกัน ในทางกลับกัน แอพพลิเคชันที่ผ่านการปรับแต่งให้ทำงานบน WARP10 ได้เป็นอย่างดีจะปฏิบัติการได้เป็นอย่างดีเมื่อทำงานบนฮาร์ดแวร์เช่นกัน การใช้ Direct3D 10 อย่างไม่มีประสิทธิภาพทำให้แอพพลิเคชันไม่สามารถเปล่งศักยภาพออกมาได้อย่างเต็มที่เมื่อทำงานบนฮาร์ดแวร์ต่าง ๆ WARP10 มีโพรไฟล์สมรรถภาพเหมือนกับฮาร์ดแวร์เป็นอย่างมาก ดังนั้นการปรับแต่งแอพพลิเคชันสำหรับการทำงานเป็นกลุ่มขนาดใหญ่, การลดการเปลี่ยนแปลงสถานะ, การขจัดจุดที่ทำไปพร้อมกันหรือล็อคจะก่อให้เกิดประโยชน์แก่ทั้งฮาร์ดแวร์และ WARP10
ช่วยให้สามารถสร้างภาพได้เมื่อไม่มีฮาร์ดแวร์ Direct3D 10 ให้ใช้งาน
WARP ช่วยให้เราสามารถสร้างภาพในสถานการณ์ต่าง ๆ เมื่อไม่มีฮาร์ดแวร์ให้ใช้ได้อย่างรวดเร็ว ซึ่งสถานการณ์เหล่านี้ประกอบด้วย
- เมื่อผู้ใช้ไม่มีฮาร์ดแวร์ที่มีความสามารถ Direct3D
- เมื่อเครื่องทำงานในลักษณะบริการหรือทำงานภาวะแวดล้อมในเซิร์ฟเวอร์
- เมื่อไม่มีการติดตั้งการ์ดแสดงผล
- เมื่อไม่สามารถใช้งานไดร์เวอร์แสดงผลหรือไดร์เวอร์ทำงานไม่ถูกต้อง
- เมื่อมีหน่วยความจำไม่พอให้การ์ดแสดงผลใช้งาน, การ์ดแสดงผลหยุดทำงานหรือการ์ดแสดงผลใช้ทรัพยากรระบบในการเริ่มทำงานมากเกินไป
DirectX Sample Browser โปรแกรมที่มาพร้อมกับชุด DircetX SDK ที่ช่วยให้นักพัฒนาเข้าถึงความสามารถใหม่ๆ ของ SDK แต่ละชุดได้ง่ายยิ่งขึ้น
ยกระดับทรัพยากรสำหรับการสร้างภาพด้วยซอฟต์แวร์ที่มีอยู่แล้ว
เนื่องจาก WARP10 มีการทำงานอยู่บนพื้นฐานของ DirectX ที่มีประชาคมขนาดมโหฬาร, หนังสือ, เว็บไซต์, SDK,ตัวอย่างและเอกสารรายละเอียดเจาะลึกจำนวนมากมาย รวมไปถึงทรัพยากรอื่น ๆ ที่ช่วยให้เราสามารถใช้ประโยชน์ของการสร้างภาพที่ใช้เฉดเดอร์ Direct3D 10 เมื่อใช้ WARP10 เราสามารถยกระดับความรู้ด้านฮาร์ดแวร์ที่มีอยู่แล้วเพื่อทำให้แอพพลิเคชันทำงานได้ดีขึ้นเมื่อทำงานด้วยฮาร์ดแวร์หรือซอฟต์แวร์ นอกจากนี้ยังมีเครื่องมีอันยอดเยี่ยมหลายตัวของผู้ผลิตการ์ดแสดงผลและใน DirectX SDK ที่เราสามารถนำมาใช้เพื่อช่วยในการออกแบบ, สร้าง, พัฒนา, ดีบักและวิเคราะห์สมรรถภาพของแอพพลิเคชันกราฟิก เราสามารถใช้เครื่องมือและความรู้เหล่านี้มาก่อให้เกิดประโยชน์ในการพัฒนาแอพพลิเคชันที่ทำงานทั้งบนฮาร์ดแวร์และซอฟต์แวร์เมื่อใช้ WARP10
ทำให้ทำงานได้โดยไม่ต้องใช้ฮาร์ดแวร์กราฟิก
WARP10 นั้นถูกออกแบบมาเพื่อให้อัลกอริธึมและแอพพลิเคชันต่าง ๆ ดังเช่น อัลกอริธึมในการประมวลผลภาพ, การพิมพ์, การทำงานแบบรีโมต, พีซีเสมือนและเทคโนโลยีเสมือนอื่น ๆ, การสร้างฟอนต์คุณภาพสูง, แผนภาพ, กราฟ เหมาะสมกับการทำงานของซีพียูเนื่องจากมันไม่ได้ต้องการหรือไม่สามารถใช้คุณสมบัติเฉพาะของฮาร์ดแวร์ WARP10 ก่อให้เกิดสถาปัตยกรรมเดี่ยวที่รองรับงานเหล่านี้ และยังคงความสามารถในการใช้ประโยชน์จากตัวเร่งความเร็วฮาร์ดแวร์หากมีให้ใช้
สรุปความสามารถของ WARP
สนับสนุนคุณสมบัติของ Direct3D 10 และ 10.1 อย่างสมบูรณ์แบบ
- สนับสนุนระดับความละเอียดของมาตรฐาน Direct3D 10 และ 10.1 ทุกระดับอย่างสมบูรณ์แบบ
- สนับสนุน Direct3D 11 เมื่อใช้กับ FeatureLevel 9_1, 9_2, 9_3, 10_0 และ 10_1
- สนับสนุนรูปแบบพื้นผิวตัวเลือกทุกแบบ เช่น การสร้างภาพหลายเป้าหมายและการสร้างภาพจากพื้นผิวที่ลอยอยู่
- สนับสนุนการสร้างภาพคุณภาพสูงและ anti-aliased สูงถึง 8x MSAA
- สนับสนุนการกรองแบบ anisotropic
- สนับสนุนแอพพลิเคชัน 32 และ 64 บิตรวมทั้งแอพพลิเคชัน 32 บิตที่ใช้แอดเดรสขนาดใหญ่
ความต้องการต่ำสุดสำหรับ WARP10 เหมือนกับวินโดวส์วิสต้า อันได้แก่
- ซีพียูขั้นต่ำ 800 MHz
- “ไม่”ต้องการ MMX, SSE หรือ SSE2
- หน่วยความจำขั้นต่ำ 512 MB
วิธีการใช้ WARP
ในชุด SDK รุ่นเบต้าของ Direct3D 10, 10.1 และ 11 ที่ออกมาเมื่อเดือนพฤศจิกายนมีไดร์เวอร์แบบเพิ่มเติมที่เรียกว่า D3D10_DRIVER_TYPE_WARP ที่สามารถนำมาใช้กับ CreateDevice เพื่อสร้างอุปกรณ์ WARP10 โดยไม่มีการใช้งานอุปกรณ์ฮาร์ดแวร์
DirectX SDK ประจำเดือนพฤศจิกายนประกอบด้วยราสเตอร์ไรเซอร์ WARP10 เวอร์ชันเบต้า เนื่องจาก WARP10 ใช้ซอฟต์แวร์อินเทอร์เฟซไปยัง Direct3D แบบเดียวกับที่ราสเตอร์ไรเซอร์อ้างอิงใช้ ดังนั้นแอพพลิเคชัน Direct3D 10 หรือ 10.1 ที่สามารถทำงานกับราสเตอร์ไรเซอร์อ้างอิงจึงสามารถทดสอบกับ WARP10 โดยเปลี่ยนชื่อ D3D10WARP.DLL ไปเป็น D3D10REF.DLL และนำไปวางในโฟลเดอร์เดียวกับโปรแกรมตัวอย่างหรือแอพพลิเคชัน จากนั้นเมื่อเปลี่ยนไปใช้ระบบอ้างอิง เราจะเห็นการสร้างภาพด้วย WARP10
หากเรานำไฟล์ D3D10Ref.dll ของ WARP10 ที่ผ่านการเปลี่ยนชื่อมาแล้วไปใส่ไว้ใน C:\Program Files (x86)\Microsoft DirectX SDK (November 2008)\Samples\C++\Direct3D\Bin\x86 โปรแกรม DirectX ตัวอย่างทุกตัวสามารถทำงานกับ WARP10 ด้วยการคลิกปุ่ม Toggle Ref ในโปรแกรมตัวอย่างหรือเรียกใช้โปรแกรมด้วยพารามิเตอร์ /ref บนแถวคำสั่ง
ลำดับความสำคัญในการพัฒนา
- ไมโครซอฟท์จัดลำดับความสำคัญในการพัฒนา WARP เป็นดังนี้
- การทำงานตามมาตรฐาน, ความมีเสถียรภาพ, ความน่าเชื่อถือ
- สมรรถภาพ
- การใช้หน่วยความจำ
เป้าหมายหลักระหว่างการพัฒนา WARP10 คือการสร้างราสเตอร์ไรเซอร์ที่อย่างน้อยตรงตามมาตรฐานของ Direct3D 10 และ 10.1 โดยยังคงมีความน่าเชื่อถือสูงและมีเสถียรภาพสูง เนื่องจากต้องมีการใช้ราสเตอร์ไรเซอร์นี้เมื่อไม่มีฮาร์ดแวร์ให้ใช้ จึงมีความสำคัญที่มันต้องทำงานได้ทุกสถานการณ์, ทุกรูปแบบและทุกเครื่อง เมื่อสามารถทำได้ตามมาตรฐานเหล่านี้ หลังจากคำนึงเรื่องมาตรฐานแล้ว สมรรถภาพเป็นเป้าหมายที่สำคัญถัดไป ซึ่งต้องการความมั่นใจว่ามีสมรรถภาพที่น่าประทับใจ สามารถดึงพลังทั้งหมดของซีพียูสมัยใหม่ออกมาใช้ได้อย่างเต็มที่โดยไม่มีผลกระทบต่อความเร็ว ไมโครซอฟท์ตัดสินใจว่าจะไม่มีการเปิดตัว API ใหม่, ไฟล์คอนฟิกุเรชันหรือกุญแจรีจิสตรีเพื่อเปิด, ปิดหรือปรับแต่งความสามารถต่าง ๆ ของ WARP10 เพราะคิดว่า API ของ Direct3D 10 มีตัวเลือกคอนฟิกุเรชันที่เพียงพอสำหรับนักพัฒนาในการปรับแต่งแอพพลิเคชันเพื่อใช้กับซอฟต์แวร์ราสเตอร์ไรเซอร์อย่างมีประสิทธิภาพมากขึ้นโดยไม่ต้องสร้างคุณสมบัติใหม่ใน API
เนื่องจากทีมพัฒนา WARP10 ใช้สถาปัตยกรรมสร้างภาพแบบหน่วง อันทำให้มักมีงานที่มีนัยสำคัญเพิ่มเติมเพื่อช่วยให้คอร์ซีพียูหลายตัวสามารถทำงานแบบขนานโดยมีการเข้าจังหวะเพียงเล็กน้อย ซึ่งประสิทธิภาพที่ทำได้ในการทำงานแบบมัลติเธรดมีความสัมพันธ์กับปริมาณหน่วยความจำที่ต้องใช้ ดังนั้นทีมพัฒนาจึงพยายามปรับปริมาณการใช้หน่วยความจำให้มีความสมดุลอย่างสมเหตุสมผลโดยยังคงทำได้ตรงตามเป้าหมายประสิทธิภาพในการปรับสเกล นอกจากนี้ยังมีการใช้ทรัพยากรของหน่วยความจำบางส่วนของโครงสร้างข้อมูลภายในหรือการจัดเก็บทรัพยากรราสเตอร์ไรเซชันในรูปแบบที่เหมาะแก่ซีพียู ซึ่งได้มีการปรับแต่งให้มีประสิทธิภาพเท่าที่จะเป็นไปได้
กลุ่มเป้าหมายของ WARP10
ลูกค้าเป้าหมายสำหรับ WARP10 คือ แอพพลิเคชันทุกตัวที่สามารถใช้ Direct3D 10 หรือ 10.1 อันประกอบด้วย
- เกมแคชวล : เกมประเภทนี้มีความต้องการสร้างภาพอย่างเรียบง่ายแต่ยังคงต้องการความสามารถในการใช้เอฟเฟกต์พิเศษที่น่าประทับใจซึ่งสามารถใช้ฮาร์ดแวร์เพื่อเร่งความเร็วในการทำงาน เกมที่ขายดีที่สุดบนวินโดวส์คือเกมจำลองสถานการณ์หรือเกมแคชวล ซึ่งทั้งสองแบบไม่ได้ต้องการกราฟิกสมรรถภาพสูง แต่ต้องการใช้ประโยชน์จากกราฟิกที่ใช้เฉดเดอร์สมัยใหม่และความสามารถในการปรับสเกลบนฮาร์ดแวร์หากมีให้ใช้
- แอพพลิเคชันซึ่งไม่ใช่เกมที่มีอยู่แล้ว : มีแอพพลิเคชันกราฟิกจำนวนมากที่ต้องการลดจำนวนเส้นทางโค้ดในชั้นสร้างภาพซึ่ง WARP10 ช่วยให้แอพพลิเคชันเหล่านี้สามารถสร้างเส้นทางโค้ด Direct3D 10, 10.1 เพียงชุดเดียวซึ่งสามารถทำงานกับเครื่องแบบต่าง ๆ จำนวนมากมาย
- เกมที่มีการสร้างภาพขั้นสูง : ทีมพัฒนาเชื่อว่าเกมทุกเกมรวมทั้งเกมที่ใช้กราฟิกอย่างหนักจะได้รับประโยชน์จากความสามารถในการสร้างภาพโดยใช้ WARP เพื่อตรวจสอบความถูกต้องการภาพที่สร้างขึ้นมาว่าเกิดความผิดพลาดจากการสร้างภาพหรือปัญหาของฮาร์ดแวร์หรือไดรเวอร์
ดังที่ได้กล่าวมาแล้วว่า กลุ่มเป้าหมายของ WARP ยังรวมไปถึงผู้ที่อาจไม่ได้ใช้ Direct3D 10 หรือ 10.1 ในปัจจุบัน อันหมายความว่า มันรวมไปถึงแอพพลิเคชันที่ต้องการให้ทำงานได้กับทุกเครื่อง, แอพพลิเคชันประมวลผลภาพที่ไม่ต้องการเขียนอัลกอริธึมสำหรับประมวลผลภาพบนซีพียูและจีพียู, อัลกอริธึมประมวลผลภาพที่ไม่ได้สนใจเรื่องความเร็วหรือการใช้พลังของจีพียูดังเช่น การพิมพ์, การจำลองการทำงาน, สภาพแวดล้อมเสมือนที่สามารถแสดงผลกราฟิกสามมิติขั้นสูง
เป้าหมายในการเปิดตัว WARP10 รุ่นเบต้าที่มาพร้อมกับ SDK ประจำเดือนพฤศจิกายนคือ การส่งมอบราสเตอร์ไรเซอร์ของ WARP10 ให้อยู่ในมือนักพัฒนา ซึ่งทางไมโครซอฟท์มั่นใจว่า ขณะนี้การพัฒนาได้มาถึงจุดที่ตรงตามมาตรฐานระดับสูงและกำลังมุ่งไปสู่การปรับปรุงสมรรถภาพและการปรับสเกลสำหรับซีพียูหลายคอร์ ซึ่ง WARP10 รุ่นจริงที่จะมาพร้อมกับวินโดวส์ 7 จะมีความแตกต่างกับรุ่นเบต้าในเรื่องสมรรถภาพที่เพิ่มขึ้นรวมทั้งประสิทธิภาพในการปรับสเกลและมาตรฐานที่ได้รับแจ้งเพิ่มเติมหลังจากเปิดตัวรุ่นเบต้าให้ทดลองใช้
สถาปัตยกรรม
WARP10 มีรากฐานมาจากราสเตอร์ไรเซอร์อ้างอิง ดังนั้นจึงใช้ซอฟต์แวร์อินเทอร์เฟซแบบเดียวกับทั้ง Direct3D 10 และ DXGI โดย WARP10 มาพร้อมกับวินโดวส์ 7 ในรูปของ DLL ที่ชื่อว่า D3D10WARP.DLL ซึ่งอยู่ในโฟลเดอร์ระบบ WARP10 สำหรับเครื่อง 64 บิตมีสองรุ่นคือ x86 และ x64 ซึ่งรุ่น x64 อาจทำงานได้เร็วกว่าในบางสถานการณ์เนื่องจากตัวสร้างโค้ดที่อยู่ใน WARP สามารถใช้ประโยชน์จากรีจิสเตอร์เพิ่มเติมที่มีให้ใช้เมื่อทำงานกับแอพพลิเคชัน 64 บิต
WARP10 มีลักษณะการทำงานสองแบบ แบบแรกคือเรียลไทม์คอมไพเลอร์ซึ่งเป็นภาษาตัวกลางระดับสูงที่แปลงไบต์โค้ด HLSL และสถานะการสร้างภาพปัจจุบันให้เป็นสตรีมที่เหมาะสมของคำสั่งเวคเตอร์สำหรับสเตจ GS, VS และ PS ของไปป์ไลน์ แบบที่สองคือตัวสร้างโค้ด Just-In-Time สมรรถภาพสูงที่สามารถนำคำสั่งเหล่านี้มาสร้างโค้ดแอสเซมบลี้ SSE2, SSE4.1, x86 หรือ x64
WARP10 ใช้เธรดพูล, การจัดการงานที่ซับซ้อนและการติดตามการพึ่งพากันของระบบปฏิบัติการวิสต้าเพื่อช่วยให้ไปป์ไลน์ในการสร้างภาพทุกส่วนสามารถกระจายการทำงานไปยังคอร์ซีพียูทุกตัวอย่างมีประสิทธิภาพ และใช้สถาปัตยกรรมสร้างภาพแบบหน่วงซึ่งมีการรวมคำสั่งสร้างภาพเป็นกลุ่มก้อนแล้วทำการราสเตอร์ไรซ์เมื่อมีข้อมูลเพียงพอสำหรับใช้ทรัพยากรซีพียูทั้งหมดอย่างมีประสิทธิภาพเท่านั้น มีการลดการทำงานบนแอพพลิเคชันหลักลงเพื่อช่วยให้แอพพลิเคชันสามารถส่งคำสั่งได้เร็วเท่าที่จะเป็นได้ หากแอพพลิเคชันทำงานแบบมัลติเธรดและยังเลือกใช้เธรดพูลของระบบปฏิบัติการวิสต้า จะมีการกระจายงานระหว่าง WARP10 และแอพพลิเคชัน
ตัวสร้างโค้ด WARP10 ผ่านการปรับแต่งให้ใช้สถาปัตยกรรมซีพียูของเครื่องสมัยใหม่ได้เป็นอย่างดี WARP10 สามารถทำงานบนเครื่องทุกเครื่องที่ใช้วินโดวส์วิสต้ารวมไปถึงเครื่องที่ไม่สนับสนุน SSE แต่ WARP10 จะทำงานได้ดีที่สุดบนเครื่องที่สนับสนุน SSE2 นอกจากนี้ WAP10 ยังผ่านการปรับแต่งให้เหมาะสมกับสถาปัตยกรรมและสมรรถภาพที่ต่างกันระหว่างโปรเซสเซอร์ของเอเอ็มดีและอินเทลรวมทั้งการสนับสนุนส่วนขยายของ SSE 4.1 ซีพียู Phenom รุ่นใหม่ของเอเอ็มดีและ Penryn สี่คอร์ของอินเทลสามารถใช้งาน WARP10 ได้อย่างมีประสิทธิภาพสูงมาก และเป็นที่คาดหมายว่าเครื่องหลายโปรเซสเซอร์และแพลตฟอร์มในอนาคตจะมีประสิทธิภาพดียิ่งขึ้น
WARP10 ไม่ได้ต้องการฮาร์ดแวร์กราฟิกในการทำงาน อันก่อให้เกิดประโยชน์เพิ่มเติมหลายประการเพราะช่วยให้ WARP10 สามารถทำงานในสถานการณ์ที่ไม่มีฮาร์ดแวร์กราฟิกให้ใช้
การปฏิบัติตามมาตรฐาน
WARP10 ผ่านการทดสอบมาตรฐาน WHQL ทุกตัวที่ใช้เพื่อตรวจสอบความถูกต้องของอุปกรณ์ฮาร์ดแวร์ Direct3D และ WARP10 ยังผ่านการทดสอบแอพพลิเคชัน Direct3D 10 และ 10.1 รวมทั้งโปรแกรมทดสอบและตัวอย่าง SDK ของ DirectX, NVIDIA และเอเอ็มดี
WARP10 ใช้ PIX for Windows อย่างเต็มที่ระหว่างการทดสอบ มีการจับภาพเฟรมเดี่ยวของแอพพลิเคชันจำนวนมากเพื่อเปรียบเทียบผลลัพธ์ระหว่างฮาร์ดแวร์กับ WARP10 ภาพส่วนใหญ่ที่ได้ของ WARP10 เกือบเหมือนกับภาพที่สร้างด้วยฮาร์ดแวร์ โดยพบความแตกต่างเพียงเล็กน้อยซึ่งยังคงอยู่ภายในมาตรฐาน Direct3D 10
Crysis เกมไมโครซอฟท์ใช้ในการทดสอบประสิทธิภาพในการทำงานของ WARP10
สมรรถภาพ
แอพพลิเคชันและโปรแกรมตัวอย่างที่ถูกออกแบบและสร้างมาเพื่อทำงานบนฮาร์ดแวร์ Direct3D 10 โดยไม่ได้คำนึงถึง WARP10 ควรทำงานได้เป็นอย่างดีเมื่อใช้ WARP10 อย่างไรก็ดี เราควรลดข้อกำหนดคุณภาพและความละเอียดให้ต่ำสุดเท่าที่จะทำได้เพื่อให้ได้อัตราเฟรมที่รับได้ หากนักพัฒนาคำนึงถึงความสามารถและสมรรถภาพของ WARP10 จะมีความเป็นไปได้ที่จะพัฒนาและปรับแต่งแอพพลิเคชันเพื่อให้ทำงานได้ดีทั้งกับฮาร์ดแวร์และซอฟต์แวร์
ในระหว่างการพัฒนา WARP10 ทีมพัฒนาพยายามหลีกเลี่ยงการปรับแต่งโดยกำหนดเส้นทางที่เร็ว (fast path optimizations) ที่อาจช่วยเพิ่มความเร็วให้แก่โปรแกรมทดสอบหรือแอพพลิเคชันบางตัวแต่อาจก่อให้เกิดความสับสนแก่นักพัฒนาหากเห็นสมรรถภาพที่แตกต่างกันอย่างมากเมื่อปรับแต่งแอพพลิเคชันเพียงเล็กน้อย
เนื่องจาก WARP10 สามารถใช้คอร์ซีพียูหลายตัวได้เป็นอย่างดี สมรรถภาพที่ดีที่สุดของราสเตอร์ไรเซอร์จึงแสดงออกมาเมื่อใช้กับซีพียูสี่คอร์สมัยใหม่ WARP10 ยังทำงานได้เร็วขึ้นบนเครื่องที่มีส่วนขยาย SSE4.1 นอกจากนี้ ยังได้มีการทดสอบและปรับแต่งสมรรถภาพบนเครื่องที่มีคอร์อย่างน้อยแปดตัวและ SSE4.1 มาพอควรเพราะไมโครซอฟท์เชื่อว่า เครื่องระดับบนเหล่านี้จะได้รับความนิยมแพร่หลายมากขึ้นในช่วงชีวิตของวินโดวส์ 7
เมื่อ WARP10 ทำงานบนซีพียู เราจะพบข้อจำกัดหลายประการเมื่อเทียบกับการทำงานบนการ์ดแสดงผล ความเร็วฟรอนท์ไซด์บัสของซีพียูมักไม่เกิน 10 GB ต่อวินาที ในขณะที่การ์ดแสดงผลมีหน่วยความจำเฉพาะที่มีแบนด์วิดธ์อย่างน้อย 20-100 GB ต่อวินาที ฮาร์ดแวร์กราฟิกยังมีหน่วยฟังก์ชันการทำงานตายตัวที่สามารถจัดการงานที่ซับซ้อนและยุ่งยากดังเช่น การกรองพื้นผิว, การคลายหรือแปลงฟอร์แมตแบบไม่พร้อมกันโดยมีการใช้ทรัพยากรระบบเพียงเล็กน้อย ในขณะที่การปฏิบัติการเหล่านี้บนซีพียูต้องใช้พลังงานมากกว่าและกระทบต่อสมรรถภาพมากกว่า
แอพพลิเคชัน Direct3D 10 จำนวนหนึ่งมีโหมดวัดผลภายในตัวซึ่งมีประโยชน์ระหว่างการพัฒนา WARP10 ทีมพัฒนา WARP10 นำแอพพลิเคชันเหล่านี้มาใช้งานเพื่อช่วยในการปรับแต่งสมรรถภาพของราสเตอร์ไรเซอร์ภายใต้สภาพการใช้งานจริง
ในตารางที่ 1 แสดงตัวอย่างที่ได้จากการทดสอบด้วยการเล่นเกม Crysis บน Direct3D 10 ที่ความละเอียด 800×600 โดยปรับแต่งข้อกำหนดคุณภาพทุกตัวให้ต่ำสุด
|
ซีพียู |
เวลา |
FPS เฉลี่ย |
FPS ต่ำสุด |
เฟรมต่ำสุด |
FPS สูงสุด |
เฟรมสูงสุด |
|
Core i7 8 Core @ 3.0GHz |
271.57 |
7.36 |
3.46 |
1966 |
15.01 |
995 |
|
Penryn 4 Core @ 3.0GHz |
351.35 |
5.69 |
2.49 |
1967 |
10.95 |
980 |
|
Penryn 2 Core @ 3.0GHz |
573.98 |
3.48 |
1.35 |
1964 |
6.61 |
988 |
|
Core 2 Duo @ 2.6GHz |
707.19 |
2.83 |
0.81 |
1959 |
5.18 |
982 |
|
Core 2 Duo @ 2.4GHz |
763.25 |
2.62 |
0.76 |
1964 |
4.70 |
984 |
|
Core 2 Duo @ 2.1GHz |
908.87 |
2.20 |
0.64 |
1965 |
3.72 |
986 |
|
Xeon 8 Core @ 2.0GHz |
424.04 |
4.72 |
1.84 |
1967 |
9.56 |
988 |
|
AMD FX74 4 Core @ 3.0GHz |
583.12 |
3.43 |
1.41 |
1967 |
5.78 |
986 |
|
Phenom 9550 4 Core @ 2.2GHz |
664.69 |
3.01 |
0.53 |
1959 |
5.46 |
987 |
ตารางที่ 1 การทดสอบด้วยการประมวลจากซีพียู
|
การ์ดแสดงผล |
เวลา |
FPS เฉลี่ย |
FPS ต่ำสุด |
เฟรมต่ำสุด |
FPS สูงสุด |
เฟรมสูงสุด |
|
NVIDIA 8800 GTS |
23.58 |
84.80 |
60.78 |
1957 |
130.83 |
1022 |
|
NVIDIA 8500 GT |
47.63 |
41.99 |
25.67 |
1986 |
72.57 |
991 |
|
NVIDIA Quadro 290 |
67.16 |
29.78 |
18.19 |
1969 |
49.87 |
1017 |
|
NVIDIA 8400 GS |
59.01 |
33.89 |
21.22 |
1962 |
51.82 |
1021 |
|
ATI 3400 |
53.79 |
37.18 |
22.97 |
618 |
59.77 |
1021 |
|
ATI 3200 |
67.19 |
29.77 |
18.91 |
1963 |
45.74 |
980 |
|
ATI 2400 PRO |
67.04 |
29.83 |
17.97 |
606 |
45.91 |
987 |
|
กราฟิกชิปแบบรวมของอินเทลที่สนับสนุน DX10 |
386.94 |
5.17 |
1.74 |
1974 |
16.22 |
995 |
ตารางที่ 2 การทดสอบด้วยการใช้กราฟิกการ์ด
ตัวเลขสมรรถภาพที่เราได้จากเครื่อง Penryn 3.0 GHz สี่คอร์ของอินเทลแสดงให้เห็นว่า WARP10 ให้ผลลัพธ์ออกมาดีกว่าจีพียู Direct3D 10 แบบรวมระดับล่างในบางกรณี แต่เมื่อทดสอบกับฮาร์ดแวร์กราฟิกแบบแยกระดับล่าง จะพบว่าทำงานได้เร็วกว่า WARP10 4-5 เท่า ซึ่งจีพียูเหล่านี้ใช้ทรัพยากรซีพียูระดับต่ำเช่นกัน การ์ดแสดงผลระดับกลางหรือระดับบนจะทำงานได้เร็วกว่า WARP10 อย่างเห็นได้ชัดโดยเฉพาะเมื่อแอพพลิเคชันสามารถใช้ประโยชน์จากการประมวลผลแบบขนานและแบนด์วิดธ์หน่วยความจำของการ์ดแสดงผลเหล่านี้
เราไม่ได้คิดว่า WARP10 จะมาแทนที่ฮาร์ดแวร์กราฟิก โดยเฉพาะในเมื่อฮาร์ดแวร์กราฟิกแยก Direct3D 10 ระดับล่างมีราคาต่ำกว่า 25 เหรียญสหรัฐในปัจจุบัน เป้าหมายของ WARP10 คือการช่วยให้แอพพลิเคชันสามารถทำงานบนฮาร์ดแวร์ระดับ Direct3D 10 โดยไม่ต้องมีการเขียนเส้นทางโค้ดที่แตกต่างกันหรือการทดสอบที่ต่างกันเมื่อทำงานกับฮาร์ดแวร์หรือซอฟต์แวร์
เรียบเรียงจากบทความเรื่อง Windows Advanced Rasterization Platform (WARP) In-Depth Guide เว็บไซต์ Microsoft Developer Network (msdn.microsoft.com)

