Linux 平台 Nvidia GPU 的 OpenCL 开发环境搭建

对一个项目设计方案进行优化计算,因为严重非线性、多峰等问题,常规优化算法效果极差。
采用遗传算法来计算,效果不错,搜索到最优点的概率比较高。只是计算速度很慢,一个计算点大概要2个多小时,方案一次要算大约2千点,这哪算得过来啊?
考虑到遗传算法多个体的特点,天然适合并行计算,就找熟人申请了个服务器,40核的,确实速度有很大提高,一个计算点只要10分钟,两周时间可以算一次方案,可以接受吧。

最近,项目要求进行方案对比分析,要计算多个方案,这就麻烦了。

想到用 GPU,其计算核心多达数千个,应该更能加速计算。

我的电脑装的是 Nvidia MX450 显卡,比较低端,核心数 896,先用着进行编程调试,调通了再找高级机器。

考虑到通用性,没用 CUDA,而是用 OpenCL,记录下开发环境的搭建步骤:

一、操作系统是 Linux Mint,已经安装 Nvidia 的驱动。

Nvidia GPU 的 OpenCL 支持在 CUDA 包内,需先安装 CUDA 包。
运行 nvidia-smi,显示

可以看出,这个显卡支持 CUDA 12.4

二、在 https://developer.nvidia.com/cuda-toolkit-archive 下载 CUDA Toolkit 12.4.1;

三、直接安装 CUDA Toolkit 12.4.1 显示空间不足

机器上 /分区还有 10g 空间,怎会不足?
查了下,发现是 CUDA Toolkit 12.4.1 安装过程解压占用了 /tmp,导致剩余空间不足。
解决办法,在 /home 分区新建 /home/tmp,运行

sudo sh cuda_12.4.1_550.54.15_linux.run --tmpdir=/home/tmp/

安装成功。

四、安装 OpenCL

  sudo apt-get install ocl-icd-opencl-dev  clinfo

有帖子说还要安装 ocl-icd-libopencl1 opencl-headers nvidia-opencl-dev,在机器上发现 CUDA Toolkit 已安装了 ocl-icd-libopencl1 和 OpenCL的include、lib64,无需再安装这几个包,后续也验证了。

五、在~/.bash.rc增加

 export LD_LABRARY_PATH=$LD_LABRARY_PATH:/usr/local/cuda/lib64
 export PATH=$PATH:/usr/local/cuda/bin
 export CUDA_HOME=/usr/local/cuda

六、可以进行 OpenCL 程序的编程了,在 CMakeLists.txt 中增加

  target_link_libraries(${PROJECT_NAME} OpenCL)
  add_compile_definitions(CL_TARGET_OPENCL_VERSION=300)

用QtCreator新建了个 C 语言项目,跑了个向量相加的例子,成功。

后续要进行遗传算法程序向 GPU 的移植。

posted @ 2024-12-13 14:43  turbinee  阅读(665)  评论(0)    收藏  举报