Khronos Group เปิดตัว OpenGL 4.4, OpenCL 2.0, และ OpenCL SPIR

by mr_tawan
22 July 2013 - 15:15

ในงาน SIGGRAPH 2013 ซึ่งเป็นงานประชุมด้านคอมพิวเตอร์กราฟฟิกที่จะมีทั้งผู้ผลิตฮาร์ดแวร์ ซอฟต์แวร์ และนักวิจัยจากหลาย ๆ มหาวิทยาลัยเข้ามาร่วมสัมนากัน ทาง Khronos Group ซึ่งเป็นผู้กำหนดคุณลักษณะของ API ต่าง ๆ หลายตัว ได้ประกาศเปิดตัวมาตรฐาน OpenGL เวอร์ชัน 4.4, OpenCL เวอร์ชัน 2.0 และ OpenCL SPIR

OpenGL 4.4

ฟีเจอร์ใหม่ของ OpenGL 4.4 นั้นจะเป็นฟีเจอร์ระดับล่าง ๆ โดยส่วนขยายตัวที่เด่น ๆ ที่ถูกเข้ามารวมอยู่ในแกนของ OpenGL เวอร์ชั่นนี้นั้นก็มี

  • ARB_buffer_storage - ส่วนขยายเกี่ยวกับ buffer โดยจะเพิ่มเรื่อง immutable storage ซึ่งทำให้ buffer ไม่ถูกทำลายหรือขยาย/ลดขนาดลง นอกจากนี้ยังรองรับการระบุว่าจะสร้าง buffer บนพื้นที่ส่วนไหนของระบบ (หน่วยความจำหลัก, หน่วยความจำบน gpu, ฯลฯ)
  • ARB_enhanced_layouts - ส่วนขยายเกี่ยวกับลักษณะ layout ของโครงสร้างข้อมูลที่ใช้ในโปรแกรม shader

นอกจากฟีเจอร์ใหม่ของแกนของ OpenGL แล้ว ยังมีส่วนขยายอย่างเป็นทางการใหม่ ๆ เพิ่มเข้ามาด้วย เช่น

  • ARB_sparse_texture - ส่วนขยายที่รองรับการเก็บเท็กซ์เจอร์เฉพาะส่วนที่จำเป็นต้องใช้งานจริง ๆ
  • ARB_bindless_texture - ส่วนขยายที่ทำให้ไม่จำเป็นต้องผูกเทกซ์เจอร์เข้ากับ slot ก่อนที่จะถูกใช้งาน นอกจากนั้นแล้วยังทำให้โหลดเทกซ์เจอร์ได้มากขึ้นเพราะไม่ถูกจำกัดด้วยจำนวน slot ที่มีอยู่ในระบบ

OpenCL SPIR

OpenCL เป็น API ที่เกี่ยวกับการคำนวณทั่วไปบน GPU (หรือที่เรียกว่า GPGPU) ซึ่งเปิดตัวมาตั้งแต่ปี 2008 ส่วน OpenCL SPIR (ย่อมาจาก Standard Portable Interface Representation) นั้นเป็นส่วนขยายของ OpenCL ที่จะเป็นรูปแบบกลางของโปรแกรมที่เขียนด้วย OpenCL ทำให้โปรแกรมที่ถูกคอมไพล์บนแพลตฟอร์มหนึ่งสามารถนำไปใช้บนอีกแพลตฟอร์มหนึ่งได้ เพราะว่าโค้ดนั้นจะถูกคอมไพล์ให้ไปอยู่ในรูปของ SPIR ซึ่งแพลตฟอร์มที่รองรับมาตรฐานนี้สามารถอ่านและนำไปประมวลผลได้นั่นเอง (ถ้านึกไม่ออกก็นึกถึง Java byte code หรือ .NET IL ก็ได้ครับ)

SPIR ถูกสร้างขึ้นบนพื้นฐานของ LLVM และตัวคอมไพเลอร์นั้นถูกสร้างบน CLang อีกทีหนึ่งครับ

OpenCL 2.0

สำหรับเวอร์ชั่นหลักที่สองของ OpenCL นั้นเน้นการรองรับสถาปัตยกรรมระบบแบบ HSA (Heterogeneous System Architecture) ซึ่งโดยพื้นฐานแล้วเป็นการทำงานร่วมกันระหว่าง CPU และ GPU ในระบบ โดยฟีเจอร์ใหม่ก็ได้แก่

  • shared virtual memory ซึ่งทำให้ CPU และ GPU สามารถเข้าถึงข้อมูลชุดเดียวกันได้ (โดยไม่ต้องทำสำเนา)
  • dynamic parallelism รองรับการสร้าง kernel (เป็นวัตถุที่แทนฟังก์ชั่นใน OpenCL) ย่อย ๆ ได้จาก kernel ใด ๆ
  • generic address space ทำให้สามารถเขียนฟังก์ชั่นแล้วเข้าถึง address space (เป็นการระบุว่าตัวแปรนี้มีที่มาจากหน่วยความจำส่วนไหนของระบบ) ใด ๆ ก็ได้ เมื่อเทียบกับ OpenCL 1.x ที่ผู้เขียนจะต้องระบุว่าพารามิเตอร์ที่ส่งเข้าไปนั้นต้องมาจาก address space ไหน และต้องเขียนฟังก์ชั่นใหม่เพื่อรองรับ address space ที่แตกต่างกัน

ที่มา: AnandTech

Blognone Jobs Premium