วันศุกร์ที่ 19 กุมภาพันธ์ พ.ศ. 2553

Game of Life #2 Parallel Program

ขั้นตอนการออกแบบโปรแกรม
หลักการทำงานของโปรแกรมแบบ Parallel (Shared Memory)

ในตัวโปรแกรม main() จะทำการวิ่ง loop เพื่อเรียกฟังก์ชั่น process<<<>>>(d_board,maxx,maxy)ซึ่งเป็นฟังก์ชั่นที่ทำงานใน GPU (Kernel Function) โดยใช้หลายๆ thread ทำการเซตค่าตาราง d_board (ตัวแปรใน GPU) ให้เป็น 0 ทุกค่าก่อน แล้วทำการหาผลรวมของจำนวนสมาชิกรอบตัว 8 ทิศทาง จากนั้นทำการเช็คว่าเข้าเงื่อนใขการมีชีวิตอยู่หรือไม่แล้วทำการเซตค่าคืนว่า cell นั้นจะมีชีวิตหรือไม่ ทำการคืนค่ากลับสู่ board (ตัวแปร CPU) โดยการใช้คำสั่ง cudaMemcpy(board,d_board,size,cudaMemcpyDeviceToHost) วน loop จนครบ แล้วจึงแสดงผลด้วยการบันทึกลงสู่ไฟล์ Board_parallel.output มีการใช้ shared memory โดยการมีตัวแปร sboard (ตัวแปรใน GPU) __shared__ int sboard [][] เพื่อทำการเก็บค่าตำแหน่งปัจจุบันในตาราง เมื่อทำการเปรียบเทียบเงื่อนไขการมีชีวิต แล้วจึงทำการสลับค่ากับตาราง board

Source Code


การคอมไพล์โปรแกรม:
พิมพ์คำสั่ง nvcc inputfile.cu –o outputfile
nvcc gol_par.cu -o gol_par


การเรียกใช้งานโปรแกรม:
พิมพ์คำสั่ง ./outputfile





ป้อนค่าเริ่มต้นโปรแกรมดังนี้
• ขนาดของตาราง Board สี่เหลี่ยมจัตุรัส [n]
• ค่า Ramdom Number [n]
• จำลองเวลาในการมีชีวิต Life Time [n]
• เลือกรูปแบบการจัดเก็บไฟล์ [1/2]
1. เก็บทุก Time Step อยู่ที่ไฟล์ RandomBoard_parallel.input
2. เก็บเฉพาะ Final Time Step อยู่ที่ไฟล์ Board_parallel.output



พิมพ์คำสั่งเพื่อเรียกดู file
more RamdomBoard_parallel.input

แสดงข้อมูลที่บันทึกใน file ดังรูป



แหล่งที่เก็บ source code

Server 61.95.208.65 under path file //cs72102/gol_par.cu





ไม่มีความคิดเห็น:

แสดงความคิดเห็น