在Ubuntu上安装pycuda记录

1. 安装CUDA Toolkit 11.8

从MZ小师妹的摸索过程来看,其他版本的会有bug,12.0的版本太高,11.5的太低(感谢小师妹让我少走弯路)

参考网址:CUDA Toolkit 11.8 Downloads | NVIDIA Developer

在命令行输入命令:

复制代码
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
  1. 确定自己用的是cuda 11.8:

如果不是,在自己的~/.bashrc文件中添加路径:

复制代码
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64
export PATH=$PATH:/usr/local/cuda-11.8/bin
  1. 安装pycuda:
    conda install -c conda-forge pycuda

  2. 测试pycuda:

来源 PyCUDA - 上海交大超算平台用户手册 Documentation

python 复制代码
import pycuda.driver as drv
import pycuda.autoinit
from pycuda.compiler import SourceModule
import numpy

# 定义核函数
mod = SourceModule(
    """
    __global__ void add_vectors(float *a, float *b, float *c, int n)
    {
        int idx = threadIdx.x + blockIdx.x * blockDim.x;
        if (idx < n)
        {
            c[idx] = a[idx] + b[idx];
        }
    }
"""
)

# 定义向量大小
n = 10000

# 生成随机向量数据
a = numpy.random.randn(n).astype(numpy.float32)
b = numpy.random.randn(n).astype(numpy.float32)

# 分配输出内存空间
c = numpy.zeros_like(a)

# 将输入输出数据复制到 GPU
a_gpu = drv.mem_alloc(a.nbytes)
b_gpu = drv.mem_alloc(b.nbytes)
c_gpu = drv.mem_alloc(c.nbytes)

drv.memcpy_htod(a_gpu, a)
drv.memcpy_htod(b_gpu, b)

# 定义块和网格大小
blocksize = 256
gridsize = (n + blocksize - 1) // blocksize

# 执行核函数
add_vectors = mod.get_function("add_vectors")
add_vectors(
    a_gpu, b_gpu, c_gpu, numpy.int32(n), block=(blocksize, 1, 1), grid=(gridsize, 1)
)

# 将结果从 GPU 复制回 CPU
drv.memcpy_dtoh(c, c_gpu)

# 检查计算结果是否正确
assert numpy.allclose(c, a + b), "result not correct"

# 输出结果
print("a:", a)
print("b:", b)
print("c:", c)
相关推荐
码农小白AI7 小时前
AI报告审核加速融入自动化实验室:IACheck破解智能设备时代报告管理新挑战
运维·人工智能·自动化
utf8mb4安全女神7 小时前
克隆的虚拟机怎么更改ip地址
运维
赵民勇7 小时前
fuse-overlayfs命令详解
linux·容器
sulikey7 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
万能的知了8 小时前
服务器托管 vs 云主机 vs 裸金属:一个决策故事
运维·服务器·云计算
杨云龙UP9 小时前
Oracle RAC / ODA 生产环境指定 PDB 启动 SOP
linux·运维·数据库·oracle
Shingmc39 小时前
【Linux】多路转接之select
linux·网络
luweis9 小时前
企智孪生 ETA(3.3 认知算法层:ETA 的思维内核 3.4 基础架构:算力与弹性)【浙江联保网络 卢伟舜】
大数据·运维·线性代数·ai·矩阵·学习方法
极客老王说Agent9 小时前
屏幕理解能力是下一代自动化的关键吗?2026年自动化范式演进深度解析
运维·人工智能·ai·chatgpt·自动化
LT101579744410 小时前
2026年电商RPA选型指南:电商运营全流程自动化测评
运维·自动化·rpa