การบิลด์สำหรับ GPU¶
FrontISTR สามารถทำงานบน GPU โดยใช้ความสามารถ OpenACC ของ NVIDIA HPC SDK หน้านี้อธิบายขั้นตอนการบิลด์โดยเปิดใช้ GPU และวิธีการรัน
สำหรับไลบรารีที่เป็นข้อกำหนดเบื้องต้น โปรดดู ไลบรารีที่จำเป็นและไลบรารีเสริม
ขั้นตอนการบิลด์¶
ใช้คอมไพเลอร์ของ NVIDIA HPC SDK (nvc, nvc++, nvfortran) ในสภาพแวดล้อมคลัสเตอร์ HPC ต้องโหลด NVIDIA HPC SDK ตามคู่มือของสภาพแวดล้อมก่อนบิลด์ (ตัวอย่าง: module load nvhpc)
เนื่องจากไลบรารีเสริม เช่น METIS, MUMPS และ MKL ไม่รองรับ GPU ตัวอย่างคำสั่งด้านล่างจึงปิดใช้งานไลบรารีเหล่านี้ (WITH_METIS=OFF เป็นต้น)
ดังที่อธิบายไว้ใน ขั้นตอนการบิลด์ด้วย CMake เมื่อระบุ NVIDIA HPC SDK (nvc, nvc++, nvfortran) เป็นคอมไพเลอร์ CMakeLists.txt จะตั้งค่า -gpu=ccnative,mem:managed โดย ccnative เป็นตัวเลือกที่ตรวจหา GPU ของสภาพแวดล้อมบิลด์โดยอัตโนมัติและเลือกเป้าหมายที่เหมาะสม จึงไม่ต้องแก้ไขด้วยตนเองสำหรับแต่ละสภาพแวดล้อม ส่วน mem: เป็นตัวเลือกที่กำหนดวิธีจัดการหน่วยความจำ GPU และจำเป็นต้องระบุเนื่องจากการติดตั้ง GPU ของ FrontISTR ใช้ Unified Memory เป็นสมมติฐาน mem:managed เป็นค่าเริ่มต้นสำหรับสภาพแวดล้อมทั่วไปที่ CPU และ GPU มีหน่วยความจำแยกจากกัน
Note: ในสถาปัตยกรรมที่ CPU และ GPU เชื่อมรวมกันด้วย NVLink เช่น Miyabi (GH200) จะใช้
mem:unifiedแทนmem:managedดังนั้นให้แก้ไขตามสภาพแวดล้อมที่ใช้งาน (-gpu=ccnative,mem:unified)
OpenACC + OpenMP (ไม่มี MPI)¶
mkdir build
cd build
CC=nvc CXX=nvc++ FC=nvfortran cmake \
-DWITH_MPI=OFF -DWITH_OPENMP=ON \
-DWITH_METIS=OFF -DWITH_MUMPS=OFF \
-DWITH_MKL=OFF -DWITH_LAPACK=OFF \
-DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
..
make -j
OpenACC + OpenMP + MPI¶
เมื่อใช้ MPI คอมไพเลอร์ wrapper ของ MPI (mpicc เป็นต้น) ต้องถูกตั้งค่าให้เรียกคอมไพเลอร์ NVIDIA HPC SDK (nvc เป็นต้น) ภายใน ในสภาพแวดล้อมคลัสเตอร์ HPC เมื่อโหลด NVIDIA HPC SDK และไลบรารี MPI ด้วยคำสั่ง เช่น module load หลายระบบจะตั้งค่าเช่นนี้โดยอัตโนมัติ แต่เวอร์ชันที่แนะนำและขั้นตอนการโหลดแตกต่างกันในแต่ละสภาพแวดล้อม โปรดดูคู่มือผู้ใช้ของสภาพแวดล้อมนั้นสำหรับรายละเอียด
mkdir build
cd build
CC=mpicc CXX=mpic++ FC=mpif90 cmake \
-DWITH_MPI=ON -DWITH_OPENMP=ON \
-DWITH_METIS=OFF -DWITH_MUMPS=OFF \
-DWITH_MKL=OFF -DWITH_LAPACK=OFF \
-DWITH_ML=OFF -DWITH_REFINER=OFF -DWITH_REVOCAP=OFF \
..
make -j
วิธีการรัน¶
ขั้นตอนการรันบิลด์ GPU โดยพื้นฐานไม่ต่างจากกรณี CPU สำหรับขั้นตอนการรันทั่วไป โปรดดู คู่มือการรัน
การทำโปรไฟล์¶
สามารถเก็บข้อมูลโปรไฟล์ด้วย NVIDIA Nsight Systems (nsys)