Announcement
Collapse
No announcement yet.
AMD Financial Analyst Day 2020
Collapse
X
-
Originally posted by HaloGenZ View Postอารมณ์นั้นครับ แต่ Infinity ตัว SW น่าจะมองการ์ดเป็นตัวเดียวเลย ซึ่งน่าจะดีกว่า CF โขครับ
ตามที่ผมเข้าใจ วิธีเดิมๆที่ไม่ coherent มันเป็นแบบนี้ครับ, สมมุติว่ามีตัวแปรชื่อว่า SUM128 มีค่าเท่ากับ 0.0 และมีตัวแปร SCORE_ARRAY เป็นอะเรย์ที่บันทึกค่าคะแนน 128 รายการ และเราต้องการคำนวนหาค่าคะแนนรวมโดยใช้ GPU คำนวณ จะทำได้ดังนี้:1. เริ่มต้น เมื่อโหลดข้อมูลตัวแปร SCORE_ARRAY และ SUM128 ขึ้นมา มันจะไปอยู่ใน RAM ระบบ
2. คัดลอกข้อมูลตัวแปร SCORE_ARRAY และ SUM128 ไว้ใน VRAM ของ GPU
3. สั่งให้ GPU คำนวนหาผลรวมคะแนน แล้วนำค่าผลลัพท์ไปแทนที่ค่าในตัวแปร SUM128 ที่อยู่ใน VRAM (สมมุติให้ผลลัพท์คือ 9876 จะได้ GPU.SUM128 = 9876)
4. คัดลอกผลลัพท์ใน VRAM มาใส่ใน RAM ระบบ (ต่อจากข้อที่แล้ว ก็จะได้ SUM128 = GPU.SUM128)
ส่วนวิธีแบบ coherent ตามความเข้าใจผม มันจะเป็นแบบนี้:1. เริ่มต้น... (เหมือนๆกัน)
2. สั่งให้ GPU คำนวนหาผลรวมคะแนนโดยอ้างอิง (ไม่ใช่คัดลอก) ไปยังตัวแปร SCORE_ARRAY และ SUM128 แล้วนำค่าผลลัพท์ไปแทนที่ค่าในตัวแปร SUM128 ที่อยู่ใน VRAM
3. นั่นจะทำให้ SUM128 ใน VRAM ถูกแก้ไข และข้อมูล SUM128 ใน RAM ระบบจะถูกติดป้ายว่า "ไม่ถูกต้อง" (Invalidate) ไม่สามารถใช้ได้อีกและจะถูกกำจัดในภายหลัง
ขั้นตอนที่ผมทำสีน้ำเงินไว้ คือสิ่งที่โปรแกรมเมอร์ต้องเขียนโค้ดเอง
Comment
-
Originally posted by นกแสก View PostSoftware ไม่ได้มองเห็นเป็นการ์ดเดียวครับ มองเป็นหลายการ์ด แต่จะ coherent กับ RAM ระบบ ทำให้เวลาเขียนโปรแกรมไม่ต้องคอยสั่งเคลื่อนย้ายข้อมูลไปมาระหว่าง RAM กับ VRAM
ตามที่ผมเข้าใจ วิธีเดิมๆที่ไม่ coherent มันเป็นแบบนี้ครับ, สมมุติว่ามีตัวแปรชื่อว่า SUM128 มีค่าเท่ากับ 0.0 และมีตัวแปร SCORE_ARRAY เป็นอะเรย์ที่บันทึกค่าคะแนน 128 รายการ และเราต้องการคำนวนหาค่าคะแนนรวมโดยใช้ GPU คำนวณ จะทำได้ดังนี้:1. เริ่มต้น เมื่อโหลดข้อมูลตัวแปร SCORE_ARRAY และ SUM128 ขึ้นมา มันจะไปอยู่ใน RAM ระบบ
2. คัดลอกข้อมูลตัวแปร SCORE_ARRAY และ SUM128 ไว้ใน VRAM ของ GPU
3. สั่งให้ GPU คำนวนหาผลรวมคะแนน แล้วนำค่าผลลัพท์ไปแทนที่ค่าในตัวแปร SUM128 ที่อยู่ใน VRAM (สมมุติให้ผลลัพท์คือ 9876 จะได้ GPU.SUM128 = 9876)
4. คัดลอกผลลัพท์ใน VRAM มาใส่ใน RAM ระบบ (ต่อจากข้อที่แล้ว ก็จะได้ SUM128 = GPU.SUM128)
ส่วนวิธีแบบ coherent ตามความเข้าใจผม มันจะเป็นแบบนี้:1. เริ่มต้น... (เหมือนๆกัน)
2. สั่งให้ GPU คำนวนหาผลรวมคะแนนโดยอ้างอิง (ไม่ใช่คัดลอก) ไปยังตัวแปร SCORE_ARRAY และ SUM128 แล้วนำค่าผลลัพท์ไปแทนที่ค่าในตัวแปร SUM128 ที่อยู่ใน VRAM
3. นั่นจะทำให้ SUM128 ใน VRAM ถูกแก้ไข และข้อมูล SUM128 ใน RAM ระบบจะถูกติดป้ายว่า "ไม่ถูกต้อง" (Invalidate) ไม่สามารถใช้ได้อีกและจะถูกกำจัดในภายหลัง
ขั้นตอนที่ผมทำสีน้ำเงินไว้ คือสิ่งที่โปรแกรมเมอร์ต้องเขียนโค้ดเอง
Comment
Comment