Linux Mint 22 虚拟机安装 CUDA Toolkit
本机没有 NVIDIA GPU,只是无聊想要试试能不能在没有 GPU 的机器(宿主机没 GPU)上做编译工作。
按照 官网链接,选择 Ubuntu 即可。cuda-repo-ubuntu2404-12-6-local_12.6.1-560.35.03-1_amd64.deb 这个文件占了 3.2G,安装之后就更大了。
安装完成之后,可以在 /usr/local/cuda-12.6/bin/ 中找到 nvcc
。加到 PATH 之后,编译都能正常进行,但是因为没有 GPU,运行时 CUDA 相关的 API 都会报错,仅此而已。
#include <iostream>
// https://leimao.github.io/blog/Proper-CUDA-Error-Checking/
#define CHECK_CUDA_ERROR(val) check((val), #val, __FILE__, __LINE__)
void check(cudaError_t err, const char* const func, const char* const file,
const int line)
{
if (err != cudaSuccess)
{
std::cerr << "CUDA Runtime Error at: " << file << ":" << line
<< std::endl;
std::cerr << cudaGetErrorString(err) << " " << func << std::endl;
// We don't exit when we encounter CUDA errors in this example.
// std::exit(EXIT_FAILURE);
}
}
#define CHECK_LAST_CUDA_ERROR() checkLast(__FILE__, __LINE__)
void checkLast(const char* const file, const int line)
{
cudaError_t const err{cudaGetLastError()};
if (err != cudaSuccess)
{
std::cerr << "CUDA Runtime Error at: " << file << ":" << line
<< std::endl;
std::cerr << cudaGetErrorString(err) << std::endl;
// We don't exit when we encounter CUDA errors in this example.
// std::exit(EXIT_FAILURE);
}
}
__global__ void calc(int n, float *x, float *y) {
for (int i = 0; i < n; ++i) {
*x += *y;
}
}
int main() {
constexpr int n = 10;
float *x, *y;
CHECK_CUDA_ERROR(cudaMalloc(&x, n * sizeof(float)));
CHECK_CUDA_ERROR(cudaMalloc(&y, n * sizeof(float)));
// 懒得初始化了
calc<<<1, 1>>>(n, x, y);
CHECK_LAST_CUDA_ERROR();
CHECK_CUDA_ERROR(cudaFree(x));
CHECK_CUDA_ERROR(cudaFree(y));
}
输出:
CUDA Runtime Error at: main.cu:42
CUDA driver version is insufficient for CUDA runtime version cudaMalloc(&x, n * sizeof(float))
CUDA Runtime Error at: main.cu:43
CUDA driver version is insufficient for CUDA runtime version cudaMalloc(&y, n * sizeof(float))
CUDA Runtime Error at: main.cu:45
CUDA driver version is insufficient for CUDA runtime version
CUDA Runtime Error at: main.cu:46
CUDA driver version is insufficient for CUDA runtime version cudaFree(x)
CUDA Runtime Error at: main.cu:47
CUDA driver version is insufficient for CUDA runtime version cudaFree(y)