The PGI Accelerator that was used (version 12.5) does not support calls to subbroutines and functions, so any such calls must be replaced with inlined code. Withim the forward model there were several calculations that were performed in pieces using temporary variables. For example, temp = f1(a),temp = f2(temp),b = f3(temp), where fn is shorthand for any series of arithmetic operations. These werecombined into a single calculation to remove the temporary variables. The above example would become b = f3(f2(f1(a))). This was done to minimize the amount of memory that was needed on the GPU. Then, each scalar variable a that is written is replaced by an element of an array variable a(i,j,...,k) so that the number of indices matches the number of loop that enclose the operation. For example, any variable enclosed only by the master loop do i = 1,n...enddo is given one index a(i). Any variable enclosed in two loops do i = 1,n,do j = 1,k...enddo, enddo is given two indices a(i,j). This ensures that each loop can run independently without overwriting any other loop's data. This only needs to be done for variables that are written to during the forward model or values that are read in but different for each loop, Other variables, forexample the lookup tables used in the radiation calculations, do not require separate copies for each grid box because all grid boxes simply read them and they are the same for all grid boxes. A variable such as surface emissivity needs a copy for each loop because the emissivity for each grid box can be different.
ตัวเร่ง PGI ที่ใช้ (รุ่น 12.5) ไม่สนับสนุนเรียก subbroutines และฟังก์ชัน เพื่อให้สายดังกล่าวต้องถูกแทนที่ ด้วยรหัส inlined Withim แบบไปข้างหน้ามีการคำนวณหลายที่ดำเนินการในชิ้นส่วนที่ใช้ตัวแปรชั่วคราวได้ เช่น อุณหภูมิ = f1 (a) อุณหภูมิ = f2 (ชั่วคราว), b = f3(temp), fn อยู่ย่อสำหรับชุดของคณิต Werecombined เหล่านี้ในการคำนวณครั้งเดียวเพื่อเอาตัวแปรชั่วคราว ตัวอย่างข้างต้นจะกลายเป็น b = f3(f2(f1(a))) นี้ทำเพื่อลดจำนวนของหน่วยความจำที่จำเป็นบน GPU แล้ว แต่ละตัวแปรสเกลาที่เขียนถูกแทนที่ ด้วยองค์ประกอบของการ a(i,j,...,k) ตัวแปรอาร์เรย์เพื่อให้จำนวนของดัชนีตรงกับจำนวนห่วงที่ใส่การดำเนินการ เช่น ตัวแปรใด ๆ ในพื้นที่ปิด โดยเฉพาะการวนรอบหลักฉัน = 1, n...enddo จะได้รับหนึ่งดัชนี a(i) ตัวแปรใด ๆ ในสองลูปฉัน = 1, n ทำ j = 1, k...enddo, enddo ให้สองดัชนี a(i,j) แน่ใจว่า แต่ละวงสามารถเรียกใช้โดยไม่เขียนทับข้อมูลของลูปอื่น ๆ ใด ๆ ได้อย่างอิสระ นี้ต้องทำสำหรับตัวแปรที่เขียนไปในระหว่างการส่งต่อรุ่นหรือค่าที่จะอ่านในแต่แตกต่างกันสำหรับแต่ละวง ตัวแปร ตัวอย่างตารางการค้นหาที่ใช้ในการคำนวณรังสี อื่น ๆ ไม่ต้องสำเนาแยกต่างหากสำหรับแต่ละกล่องตารางเนื่องจากตารางทั้งหมดกล่องเพียงแค่อ่าน และสำหรับกล่องตารางทั้งหมดเหมือนกัน ตัวแปรเช่น emissivity ผิวต้องสำเนาสำหรับแต่ละวง เพราะ emissivity สำหรับแต่ละช่องตารางจะแตกต่างกัน
การแปล กรุณารอสักครู่..

เร่ง PGI ที่ใช้ (รุ่น 12.5) ไม่รองรับการโทรไปยัง subbroutines และฟังก์ชั่ดังนั้นสายดังกล่าวจะต้องถูกแทนที่ด้วยรหัส inlined Withim รูปแบบไปข้างหน้ามีหลายการคำนวณที่ได้ดำเนินการในชิ้นใช้ตัวแปรชั่วคราว ยกตัวอย่างเช่นอุณหภูมิ = F1 (a) = อุณหภูมิ F2 (ชั่วคราว), B = F3 (ชั่วคราว) ซึ่งเป็นชวเลข Fn สำหรับชุดของการดำเนินการทางคณิตศาสตร์ใด ๆ เหล่านี้ werecombined เข้าไปในการคำนวณเดียวในการลบตัวแปรชั่วคราว ตัวอย่างข้างต้นจะกลายเป็น B = F3 (F2 (F1 (ก))) นี้ทำเพื่อลดปริมาณของหน่วยความจำที่เป็นสิ่งที่จำเป็นในการที่ GPU จากนั้นแต่ละตัวแปรสเกลาที่เขียนจะถูกแทนที่ด้วยองค์ประกอบของตัวแปรอาร์เรย์ (I, J, ... , k) เพื่อให้จำนวนของดัชนีตรงกับหมายเลขของวงที่ล้อมรอบการดำเนินงาน ยกตัวอย่างเช่นตัวแปรใด ๆ ที่ล้อมรอบด้วยวงต้นแบบเพียง แต่ทำ i = 1, N ... enddo จะได้รับหนึ่งในดัชนี (i) ตัวแปรใด ๆ ที่ล้อมรอบในสอง loops ทำ i = 1, N, ทำ J = 1, ... k enddo, enddo จะได้รับสองดัชนี (I, J) เพื่อให้แน่ใจว่าแต่ละวงสามารถทำงานได้อย่างอิสระโดยไม่ต้องเขียนทับข้อมูลวงอื่น ๆ ของ นี้เพียงต้องการที่จะทำได้สำหรับตัวแปรที่จะมีการเขียนในช่วงรุ่นหรือค่าที่อ่าน แต่ที่แตกต่างกันสำหรับแต่ละห่วงตัวแปรอื่น ๆ , ตามตัวอย่างตารางการค้นหาที่ใช้ในการคำนวณรังสีไปข้างหน้าไม่จำเป็นต้องมีสำเนาแยกต่างหากสำหรับแต่ละช่องตาราง เพราะกล่องตารางทั้งหมดเพียงแค่อ่านพวกเขาและพวกเขาจะเหมือนกันสำหรับกล่องตารางทั้งหมด ตัวแปรเช่นการแผ่รังสีพื้นผิวที่ต้องการสำเนาสำหรับแต่ละห่วงเพราะการแผ่รังสีสำหรับแต่ละช่องตารางสามารถแตกต่างกัน
การแปล กรุณารอสักครู่..

การ PGI ตัวเร่งที่ใช้ ( รุ่น 12 ) ไม่สนับสนุนโทรไป subbroutines และฟังก์ชัน ดังนั้นใด ๆเช่นสายจะต้องถูกแทนที่ด้วย inlined รหัส withim แบบไปข้างหน้ามีการคำนวณต่าง ๆ ที่แสดงในชิ้นโดยใช้ตัวแปรชั่วคราว ตัวอย่างเช่น , F1 temp = ( ) = F2 ชั่วคราว ( ชั่วคราว ) , B = F3 ( ชั่วคราว ) ที่องค์การสหประชาชาติเป็นชวเลขสำหรับชุดใด ๆของการดำเนินการเลขคณิต เหล่านี้ werecombined ในการคำนวณเดียวเพื่อลบตัวแปรชั่วคราว ตัวอย่างข้างต้นจะกลายเป็น B = F3 ( F2 ( f1 ( ) ) ) นี้ทำเพื่อลดปริมาณของหน่วยความจำที่จำเป็นบน GPU . แล้ว แต่ละตัวแปรสเกลาที่เขียนจะถูกแทนที่ด้วยองค์ประกอบของอาร์เรย์ตัวแปร ( I , J . . . . . . . K ) เพื่อให้จำนวนของดัชนีตรงกับหมายเลขของลูปที่แนบการดําเนินงาน ตัวอย่างเช่นตัวแปรล้อมรอบเท่านั้นโดยนายห่วงฉัน = 1 , . . . . . . . . enddo ให้ดัชนีหนึ่ง ( ฉัน ) ตัวแปรควบสองห่วงฉัน = 1 , n , j = 1 , . . . . . . . . . enddo enddo , จะได้รับสองดัชนี ( i , j ) นี้ช่วยให้มั่นใจว่า แต่ละวงก็วิ่งอย่างอิสระ โดยไม่มีการเขียนทับข้อมูลใด ๆอื่น ๆ ห่วงของ เพียงต้องการที่จะทำสำหรับตัวแปรที่เขียนไว้ในหน้านางแบบหรือค่านิยมที่อ่านแต่ตัวแปรอื่น ๆที่แตกต่างกันสำหรับแต่ละห่วง คือ ตารางที่ใช้ในการค้นหาของการไม่ต้องใช้สำเนาที่แยกต่างหากสำหรับแต่ละตาราง ตาราง ทุกกล่อง เพราะกล่องเพียงแค่อ่านพวกเขาและพวกเขาจะเป็นเหมือนกล่อง ตารางทั้งหมด ตัวแปรเช่น emissivity พื้นผิวต้องการคัดลอกสำหรับแต่ละห่วงเพราะ emissivity สำหรับแต่ละตาราง กล่องสามารถแตกต่างกัน
การแปล กรุณารอสักครู่..
