【c++ cuda】1.CUDA 部署 基础概念和环境搭建

部署运行你感兴趣的模型镜像

1.串行和并行

1.1Sequential processing(串行)

- 指令/代码块依次执行
- 前一条指令执行结束以后才能执行下一条语句
- 一般来说,当程序有数据依赖or分支等这些情况下需要串行
例如下面两个代码:
//1 依赖
a = b + c;
d = a + b;
// 2分支
if (...){
   .....
}else{
   ....
}

1.2串行和并行的区别

如下图所示:在下述情况下

statement 2 依赖 statement 1
statement 5 依赖 statement 4
statement 3 是一个 循环,跟所有的statement没有任何关系
有四个core可以使用
- 同样操作,串行需要46个时钟周期,而并行只需要20个,并且可以进一步优化。

- 我们可以把 statement 3的循环拆成四份来执行,并且把其中过两个放到第四个core中,进一步压缩时钟周期到16.

- 为了进一步压缩时钟周期。针对statement 5 依赖 statement 4这一部分进行压缩,假设在statement 4没有执行完的时候,statement 5 就可以知道结果,这是statement 5就可以执行,进一步压缩到14 cycles.

1.3总结

把没有数据依赖的代码分配到各个core各自执行 (schedule, 调度)
把一个大的loop循环给分割成多个小代码,分配到各个core执行(loop
optimization)
在一个指令彻底执行完以前,如果已经得到了想要得到的数据,可以提前执行下
一个指令(pipeling, 流水线)
我们管这一系列的行为,称作parallelization (并行化)。我们得到的可以充分利用多
核多线程的程序叫做parallelized program(并行程序)
• 并行指指令/代码块同时执行,充分利用multi-core(多核)的特性,多个core一起去完成一个或多个任务

2.概念辨别

 并行与并发

进程和线程

注意:右图显示了加速比具有一定的上限,出现饱和的现象。

SIMD(Single Instruction Multiple Data) 

指的是原先需要多次操作的过程,只需要一次完成,下图展现了区别。

其他概念 

lantency:
        • 完成一个指令所需要的时间
memory latency:
        • CPU/GPUmemory获取数据所需要的等待时间
        • CPU并行处理的优化的主要方向
throughput(吞吐量):
        • 单位时间内可以执行的指令数
        • GPU并行处理的优化的主要方向
Multi-threading:
        • 多线程处理

 memory latency

CPU/GPUmemory获取数据所需要的等待时间,获取数据的时间。

下图右上,展示了CPU读取数据,先访问Cache,没有发现数据,则访问下级的memory,则需要更多时间。

3.CPU的优化方式

3.1 Pipeline (流水线执行)

- 提高throughput的一种优化

- 一条指令有5部分组成 

在第一个指令没有执行完是,利用多余的资源去执行第二个指令,如下图。

3.2 多级缓存

 

3.3 其他

1. Pre-fetch
        • 减少memory latency的一种优化
2. Branch-prediction(分支预测)
        • 简单来说,就是根据以往的branch得走向,去预测下一次branch的走向
3.Multi-threading
        • 充分利用计算资源的一种技术
        • 让因为数据依赖或者cache missstallcore去做一些其他的事情
        • 提高throughput的一种技术

总结 

4.GPU 优化方式

• 由于throughput非常的高,所以相比与CPUcache miss所产生的latency对性能的影响比较小
GPU主要负责的任务是大规模计算(图像处理、深度学习等等),所以一旦fetch好了数据以后,就会一直连续
处理,并且很少cache miss

SIMT

 5.总结上面四章

CPUGPU的分工不同
CPU:
        • 适合复杂逻辑的运算
        • 优化方向在于减少memory latency
        • 相关的技术有,cache hierarchy, pre-fetch, branch-prediction, multi-threading
        • 不同于GPUCPU硬件上有复杂的分支预测器去实现branch-prediction
        • 由于CPU经常处理复杂的逻辑,过大的增大core的数量并不能很好的提高throughput
GPU:
        • 适合简单单一的大规模运算。比如说科学计算,图像处理,深度学习等等
        • 优化方向在于提高throughput
        • 相关的技术有,multi-threadingwarp schedular
        • 不同于CPUGPU硬件上有复杂的warp schedular去实现多线程的multi-threading
        • 由于GPU经常处理大规模运算,所以在throughput很高的情况下,GPU内部的memory            latency上带来的性能损失不是那么明显
        • 然而CPUGPU间通信时所产生的memory latency需要重视

6.环境搭建

需要下述环境:

  • gpu
  • 对应的CUDAcuDNN版本
  • c++环境
  • 推荐使用Ubuntu linux 系统
  • 编辑器(VScode等)

待更新 

您可能感兴趣的与本文相关的镜像

PyTorch 2.7

PyTorch 2.7

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### 如何在 Dev-C++ 中配置 CUDA #### 安装必要的软件驱动程序 确保已正确安装了CUDA开发环境,并且系统支持CUDA编程。此外,需要具备基本的C/C++编程知识[^1]。 为了使Dev-C++能够编译运行CUDA代码,必须先完成以下准备工作: - 更新显卡驱动至最新版本。 - 确认系统的CUDA兼容性硬件需求满足条件。 #### 获取并安装CUDA Toolkit 对于Linux用户来说,在CentOS 7上可以考虑手动安装特定版本的CUDA工具包,并将其路径加入用户的环境变量中。例如,针对CUDA 10.1的不同更新版本,可以从NVIDIA官方网站获取相应的`.run`文件来执行本地化部署[^3]。 然而,值得注意的是,官方并不直接提供关于如何在Dev-C++里集成CUDA的支持文档;通常情况下,Visual Studio或命令行界面是更常见的选择用于编写调试CUDA应用程序。尽管如此,仍然可以通过一些自定义设置尝试实现这一目标。 #### 自定义编译器选项 要在Dev-C++环境下成功构建带有CUDA扩展功能的应用程序,可能涉及复杂的编译参数调整以及外部库链接操作。具体步骤如下所示: 1. **创建新的项目模板** 打开Dev-C++后新建一个源码文件作为项目的起点,保存为`.cu`结尾以便识别这是CUDA源文件而不是普通的C/C++文件。 2. **指定nvcc作为默认编译器** 修改IDE内部使用的编译指令链,让其调用NVIDIA提供的`nvcc`而非gcc/g++来进行预处理、编译及连接过程中的某些阶段工作。这往往意味着要编辑Makefile或者通过图形界面上的相关菜单项输入额外的命令行开关。 3. **引入CUDA头文件与库位置** 设置附加包含目录(Include Path),指向CUDA SDK所处的位置,使得编译期间能顺利找到所需的API声明其他依赖资源。同样地,也要告知链接器去哪里寻找静态/动态链接库(.lib/.a),从而顺利完成最终可执行文件的生成。 4. **测试简单的CUDA Hello World程序** ```cpp #include <stdio.h> __global__ void helloFromGPU(void) { printf("Hello from GPU!\n"); } int main() { printf("Hello from CPU\n"); helloFromGPU<<<1, 1>>>(); cudaDeviceSynchronize(); } ``` 上述代码片段展示了怎样利用全局函数(`__global__`)向设备端派遣任务,并同步等待计算完成后继续后续流程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值