Archive for October, 2010

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

การคำนวนด้วย GPU นี้เป็นเทคโนโลยีในยุคใหม่ที่เหมาะสำหรับการคำนวนข้อมูลจำนวนมาก ๆ ที่ต้องการความเร็วสูงในการประมวลผล
โดยระบบจะรองรับการ์ดจอที่ผลิตออกมาตั้งแต่ปี 2008 เป็นต้นไป (ซึ่งผมได้พัฒนาและทดสอบกับ nvidia ยังไม่แน่ใจว่าจะรองรับการ์ดของ ATI ได้หรือไม่)

ในบทความนี้ผมขอยกเอา การคำนวนค่าไพแบบมอลติคาร์โลที่เคยได้เสนอไปแล้วในบทความก่อน ๆ
มาคำนวนใหม่บน GPU เพื่อเปรียบเทียบให้เห็นความแตกต่าง

#โค้ดคำสั่งโปรแกรมภาษาไทยธอน
แสดงผล("เริ่มโปรแกรม")
หน่วยประมวลผล = จีพียู(2000000) #จำนวนรอบ(การย้ำ)คำนวน 2000000 รอบ

แหล่งข้อมูล1 = หน่วยประมวลผล.สร้างอาเรย์แบบสุ่มค่า() # สำหรับค่า x ในพิกัด(x,y)
หน่วยประมวลผล.ตั้งค่าบัฟเฟอร์(0,แหล่งข้อมูล1)#บันทึกบัฟเฟอร์ไว้ในตัวเอนจิ้น
แหล่งข้อมูล2 = หน่วยประมวลผล.สร้างอาเรย์แบบสุ่มค่า() # สำหรับค่า y ในพิกัด(x,y)
หน่วยประมวลผล.ตั้งค่าบัฟเฟอร์(1,แหล่งข้อมูล2)

โปรแกรมบนจีพียู = """
//#//pragma OPENCL EXTENSION cl_khr_fp64 : enable
 __kernel void montePI (__global float* a, __global float* b, __global float* c, int iNumElements)
{
    // find position in global arrays
    int iGID = get_global_id(0);
    if (iGID >= iNumElements)
    {
        return;
    }
	float dist;
	dist = sqrt(pow(a[iGID], 2.0f) + pow(b[iGID], 2.0f));
	if (dist <= 1.0)
		c[iGID] = 1.0;
	else
		c[iGID] = 0.0;
}

"""

 อ่านต่อ...
Advertisements