并行计算的环境配置(cuda,OPENML,MPI)以wsl为例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
提示:这里可以添加本文要记录的大概内容:
本文通过windows自带的subsystem for linux(wsl),对比MPI和cuda对并行程序的加速能力。
提示:以下是本篇文章正文内容,下面案例可供参考
一、先决条件
WSL+vscode+c语言!!!
wsl和vscode的安装参考以下文章:
(9 封私信 / 78 条消息) Win11上配置Linux子系统(WSL)+vscode使用 - 知乎
WSL2的安装与配置(创建Anaconda虚拟环境、更新软件包、安装PyTorch、VSCode)-CSDN博客
window中的c和c++语言环境的配置参考:
(7 封私信) 基于 VS Code 搭建编程环境——C/C++ 篇 - 知乎
Linux中的c和c++语言环境的配置参考:
(7 封私信) 详解Linux下使用vscode编译运行和调试C/C++ - 知乎
其中注意以下几点:
1.task.json 配置,用F1+tasks:configuration task(在F1 中search)
二、cuda环境配置
cuda是我们用gpu实现高性能计算的基础,cuda本质上是通过直接在gpu上编程,从而实现并行式的调用和相关计算。那么什么是cuda,我们要如何安装?最后我们如何编程这是下面我们解决的问题。
1.什么是cuda?nvidia的驱动版本怎么选?
重点需要关注的有下方三个红色框选:

最下方就是你的显卡型号,左上角是当前的显卡驱动版本,右上角是当前显卡驱动最高支持的 CUDA 版本(向下兼容),但并不代表环境中的 CUDA 版本!!!
所以,当你发现 CUDA 版本出问题时,记得来这里看看:右上角红框的数字是多少?
引用于https://www.zhihu.com/question/622711856/answer/21538453583
作者:AI码上来
1.1 Pytorch 下安装
大白话来讲:
- CUDA(Compute Unified Device Architecture)是由 NVIDIA 开发的并行计算库,旨在充分发挥 GPU 的并行计算能力,实现计算加速。
- CuDNN(CUDA Deep Neural Network library)建立在 CUDA 之上,提供了一系列针对CNN/RNN等模型中算子的高效实现,比如卷积、池化、激活函数等。(通常,CUDA和CuDNN需要搭配使用)
- nvcc 则是 CUDA 的编译器。
有同学说我在本地执行nvcc -V,提示找不到这个指令啊。
对啊,说明你在本地没安装 cuda,哪来的编译器呢?
那我要一顿操作,先下载并安装 cuda 么?
推荐你不用,因为你安装 cuda,大概率是用 Pytorch 等深度学习库,需要依赖它。
而当你安装不同版本的 Pytorch,你会发现它要求的 CUDA/CuDNN 版本还不一样。
所以,我们这一部分,不需进行任何操作,等你用到不同版本深度学习库时,再来安装对应版本的 CUDA和CuDNN 即可!
接着往下看!
Pytorch 非常友好,因为它会自动根据你的当前环境,安装对应版本的CUDA和CuDNN。
所以,如果你的项目依赖 Pytorch,压根无需手动安装CUDA和CuDNN。
最优雅的方式是,新建一个虚拟环境,一键安装指定版本的 torch 即可,比如:
conda env create -n torchenv python==3.8
conda activate torchenv
pip install torch==2.0.1
作者:AI码上来
链接:https://www.zhihu.com/question/622711856/answer/21538453583
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.搭建cuda
现在我们开始搭建cuda:

具体参考WLS2安装CUDA保姆级教程_wsl2 cuda-CSDN博客
最后检验安装用nvcc --version,如下输出就视为安装成功。
binpj@bin:~$ source ~/.bashrc
binpj@bin:~$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Wed_Jan_15_19:20:09_PST_2025
Cuda compilation tools, release 12.8, V12.8.61
Build cuda_12.8.r12.8/compiler.35404655_0
参考文献:
(7 封私信) WSL2安装CUDA,nvidia环境小白教程和踩坑记录 - 知乎
3.测试cuda
#include <iostream>
#include <cuda_runtime.h>
// Simple CUDA error checking macro
#define CHECK(call) \
{ \
cudaError_t err = call; \
if (err != cudaSuccess) { \
std::cerr << "CUDA error in " << __FILE__ << ":" << __LINE__ \
<< " : " << cudaGetErrorString(err) << std::endl; \
exit(EXIT_FAILURE); \
} \
}
int main() {
int dev = 0;
cudaDeviceProp devProp;
// Get GPU device properties
CHECK(cudaGetDeviceProperties(&devProp, dev));
std::cout << "Using GPU device " << dev << ": " << devProp.name << std::endl;
std::cout << "--------------------------------------------" << std::endl;
std::cout << "Number of SMs: " << devProp.multiProcessorCount << std::endl;
std::cout << "Shared memory per block: "
<< devProp.sharedMemPerBlock / 1024.0 << " KB" << std::endl;
std::cout << "Max threads per block: " << devProp.maxThreadsPerBlock << std::endl;
std::cout << "Max threads per SM: " << devProp.maxThreadsPerMultiProcessor << std::endl;
std::cout << "Max warps per SM: "
<< devProp.maxThreadsPerMultiProcessor / 32 << std::endl;
std::cout << "Warp size: " << devProp.warpSize << std::endl;
std::cout << "Max grid dimensions (x, y, z): ("
<< devProp.maxGridSize[0] << ", "
<< devProp.maxGridSize[1] << ", "
<< devProp.maxGridSize[2] << ")" << std::endl;
std::cout << "Max block dimensions (x, y, z): ("
<< devProp.maxThreadsDim[0] << ", "
<< devProp.maxThreadsDim[1] << ", "
<< devProp.maxThreadsDim[2] << ")" << std::endl;
std::cout << "Compute capability: "
<< devProp.major << "." << devProp.minor << std::endl;
std::cout << "Total global memory: "
<< devProp.totalGlobalMem / (1024.0 * 1024.0) << " MB" << std::endl;
return 0;
}
输出为
binpj@bin:~/SWD$ ./gpu_info
Using GPU device 0: NVIDIA GeForce RTX 4060 Ti
--------------------------------------------
Number of SMs: 34
Shared memory per block: 48 KB
Max threads per block: 1024
Max threads per SM: 1536
Max warps per SM: 48
Warp size: 32
Max grid dimensions (x, y, z): (2147483647, 65535, 65535)
Max block dimensions (x, y, z): (1024, 1024, 64)
Compute capability: 8.9
Total global memory: 8187.5 MB
三、openMP的环境搭建
Ubuntu系统上openMP环境的配置_ubuntu openmp-CSDN博客
本质上gcc自带openMP,不用更多的环境配置!!以下这个代码输出openMP的version:
echo | gcc -fopenmp -dM -E - | grep -i openmp
下面是一个openmp_hello:
// openmp_hello.c
#include <stdio.h>
#include <omp.h>
int main() {
// 设置线程数
omp_set_num_threads(4);
// 并行区域 - 修正语法
#pragma omp parallel
{
// 获取当前线程号和总线程数
int thread_id = omp_get_thread_num();
int num_threads = omp_get_num_threads();
printf("Hello from thread %d out of %d threads\n", thread_id, num_threads);
}
return 0;
}
如果你想知道自己cpu的核心数
// check_cores.c
#include <stdio.h>
#include <omp.h>
int main() {
int num_cores = omp_get_num_procs();
printf("系统有 %d 个处理器核心\n", num_cores);
return 0;
}
(base) binpj@bin:~/project/helloworld$ ./core
系统有 28 个处理器核心
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐

所有评论(0)