Fermi Architecture

สำหรับวันนี้เราจะมาพูดถึง Fermi Architecture กันซึ่งเป็นหนึ่งในการออกแบบ GPU Architecture ของบริษัท NVIDIA ต้องบอกว่า ณเวลานี้อุปกรณ์ที่มีการออกแบบแบบนี้หายไปจากท้องตลาดแล้วแต่อาจจะมีใช้กันอยู่

สำหรับประวัติของ graphics processing unit (GPU) นั้น เริ่มคิดค้นจากบริษัท NVIDIA ในปี 1999 จากนั้นต่อมาจึงมีการประยุกต์นำ GPU ไปประมวลผลงานที่ไม่เกี่ยวข้องกับกราฟิคและพัฒนาจนได้ผลิตภัณฑ์ general purpose graphics processing unit (GPGPU) ต่อมาในปี 2007 ทาง NVIDIA ได้เสนอ CUDA SDK ขึ้น ทำให้การเขียนโปรแกรมเพื่อให้ไปประมวลผลใน GPU นั้นทำได้ง่ายขึ้น โดยสถาปัตยกรรมที่รองรับ CUDA รุ่นแรกคือ G80 (GeForce 8800, Quadro FX 5600 และ Tesla C870) จากนั้นในปี 2008 จึงนำเอาข้อแนะนำจากผู้ใช้ที่นำ GPU ไปประมวลผลงานต่างๆและนำมาพัฒนาในสถาปัตยกรรม GT200 ให้มีประสิทธิภาพสูงขึ้น และพัฒนาเป็น Fermi Architecture ในปี 2009 ซึ่งเป็นสถาปัตยกรรมที่เหมาะกับการประมวลผลแบบ GPU มากที่สุดในยุคนั้น

Year Event
1999 First invention of GPU
2001 GPGPU is born
2006 Invent of G80 Architecture
2007 CUDA was introduced
2008 GT200, the improvement of G80
2009 Fermi, the successor of GT200

สำหรับสถาปัตยกรรม CUDA นั้นประกอบด้วยส่วนสำคัญดังนี้

  • Kernel คือส่วนของโปรแกรมหรือฟังก์ชันที่ต้องการนำไปรัน GPU โดยปกติจะอยู่ในรูปแบบของฟังก์ชัน
  • Thread คือส่วนการทำงานย่อยสุดของ GPU มีรีจิสเตอร์และเมมโมรี่เป็นของตัวเองแต่ก็ไม่ได้เยอะมาก
  • Thread Block (Warp) คือกลุ่มรวมของ Thread ในที่นี้คือ 32 Thread คือ 1 warp ซึ่งสามารถติดต่อสื่อสารแต่ละ Thread ผ่านทาง shared memory โดยปกติ 1 warp จะทำงานภายใต้ 1 CUDA core นอกจากนั้นแต่ละ block ยังติดต่อสื่อสารผ่านทาง shared-memory
  • Grid คือกลุ่มของ Thread block โดยสามารถติดต่อแต่ละ grid ผ่านทาง DRAM ของ GPU
CUDA Architecture

CUDA Architecture

เมื่อรู้จักแล้วว่า CUDA คืออะไรแล้ว มาทำความรู้จักกับสถาปัตยกรรม Fermi โดยในสถาปัตยกรรม Fermi ได้มีการนำเสนอเทคโนโลยีใหม่ ดังนี้

  • Third Generation Streaming Multiprocessor (SM) ใน generation นี้ ได้มีการเพิ่มจำนวน CUDA core มากขึ้นเป็น 32 core ต่อ 1 SM (ซึ่งจำนวน SM นั้นขึ้นอยู่กับรุ่นของ GPU) และแต่ละ core นั้นยังมีการเพิ่มหน่วยการประมวลผล double precision ทำให้สามารถประมวลผลได้ละเอียดขึ้นอีกด้วย นอกจากนั้นยังมีการเพิ่มส่วนของ warp scheduler เพื่อให้สามารถประมวลผล warp แบบขนานพร้อมกันได้มากขึ้น และภายใน SM ได้มีการปรับเพิ่มส่วนของ shared memory ให้มากขึ้น โดยสามารถเลือกได้ว่า จะเอาเป็น shared memory หรือ cache L1
  • Second Generation Parallel Thread Execution ISA สำหรับสถาปัตยกรรม Fermi นั้นได้มีการนำเสนอ instruction set ใหม่ คือ Parallel Thread eXecution (PTX) 2.0 ซึ่งมีการพัฒนาในส่วนของการเข้าถึงเมมโมรี่ให้สามารถแยกเป็นส่วน local, shared และ global และยังมีการพัฒนาส่วนของคำสั่งที่เกี่ยวกับจำนวนทศนิยมโดยถ้าเราใช้คำสั่งเช่นการคูณตามด้วยบวก โดยปกติส่วนประมวลผลมักจะปัดค่าก่อนนำไปทำการบวก แต่ด้วยการพัฒนาระบบคำสั่งใหม่ Fused Multiply-Add (FMA) ทำให้สามารถเก็บทศนิยมจากนั้นบวกก่อนจึงค่อยปัดทีหลัง เพื่อความถูกต้องที่มากขึ้น
  • New Memory Subsystem สำหรับ Fermi ได้มีการเพิ่มส่วนของ cache L1 และ L2 เข้าไป โดย L1 สามารถเลือกได้เป็น 2 แบบดังนี้ คือ 1. 48 KB shared memory และ 16 KB cache L1 หรือ 2. 16 KB shared memory และ 48 KB cache L1 นอกจากนั้นยังมีการนำ ECC (Error Checking & Correction) มาประยุกต์ใช้เพื่อเพิ่มความถูกต้องสำหรับเมมโมรี่อีกด้วย นอกจากนั้นยังเพิ่มความเร็วของ atomic instruction เพื่อให้สามารถทำงานพวก read-modify-write ได้อย่างมีประสิทธิภาพมากยิ่งขึ้น
  • NVIDIA GigaThread Engine ซึ่งระบบนี้สามารถทำให้ GPU สามารถทำ context switching ได้เร็วมากขึ้น ทั้งยังสามารถประมวลผลหลายๆ kernel ได้พร้อมๆกัน

นอกจากนั้น NVIDIA ยังพัฒนาระบบ debug เพื่อให้สามารถติดตามการทำงานของ GPU ได้ นั่นคือสามารถติดตามการทำงานของแต่ละ warp ใน GPU ได้ว่าประมวลผลคำสั่งอะไรอยู่ ทำให้สามารถหาความผิดพลาดได้ว่ามาจาก thread ใด ซึ่งได้ชื่อเรียกว่า Nexus โดย Nexus เป็น Add-on บน Visual Studio เพราะงั้นใครโปรแกรมบน Linux ก็อดไปนะครับ

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s