無GPU情況下對cuda程式進行功能性測試

zwlwf發表於2024-07-14

安裝cuda-toolkit, 在沒有gpu的情況下,不能安裝其中的cuda driver, 不勾選,裝cuda toolkit即可。

安裝gpgpu-sim程式。gpgpu的模擬程式,目前僅僅支援cuda11。而cuda11最高支援的ubuntu為20.0。但在22.0的ubuntu上下載cuda11,也可以編譯。

參看gpgpu README.md編譯,過程中報錯如下,可去掉invaliad token前後的雙引號。

gpgpu-sim_distribution/build/gcc-/cuda-11000/release/cuda-sim/ptx_parser_decode.def:4:13: error: unable to find string literal operator 'operator""invalid' with 'const char [28]', 'long unsigned int' arguments
1304     4 | DEF(YYUNDEF,"YYUNDEF                 /* "invalid token"  */")

另外gpgpu中判斷cuda版本的函式get_app_cuda_version也有問題,直接修改成return 11,本地用,不規範但好使。

static int get_app_cuda_version() {
  int app_cuda_version = 0;
  return 11;

gpgpu的核心原理是替換了cudart.so, 原cpu端的程式和gpu device打交道透過這個so完成,替換為gpgpu的so之後,原來跑在device的指令,變成跑在模擬程式指令上。一個簡單的端到端示例如下,

# 從nvidia sample複製vectorAdd的例子到本地
cp ~/NVIDIA_CUDA-11.0_Samples/0_Simple/vectorAdd/* . 
# 若沒有gpu,可以破罐子破摔,將編譯的gpgpu中的libcudart.so替換原本的cuda11 so,
# sudo ln -sfT /path/to/gpgpu/build/libcudart.so /usr/local/cuda/
# 手動啟動編譯命令
nvcc vectorAdd.cu -o app -I/home/zwl/NVIDIA_CUDA-11.0_Samples/common/inc -g --cudart shared
cp gpgpu-sim_distribution/configs/tested-cfgs/SM2_GTX480/gpgpusim.config .
cp gpgpu-sim_distribution/configs/tested-cfgs/SM2_GTX480/gpuwattch_gtx480.xml .
# 執行程式,執行前先設定一下環境
export CUDA_INSTALL_PATH=/usr/local/cuda
source ~/software/gpgpu-sim_distribution/setup_environment debug
./app

相關文章