ข้ามไปที่เนื้อหา

การบิลด์สำหรับ 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)

ไม่มี MPI

nsys profile -t cuda -s none -o profile_result /path/to/FrontISTR/build/fistr1/fistr1

มี MPI

nsys profile -t cuda,mpi -s none -o profile_result \
  mpiexec -n <จำนวนโปรเซส> /path/to/FrontISTR/build/fistr1/fistr1 -t 8
AI-assisted translation May contain errors Official docs Status