CUDA基本知识--(不断更新)

2 篇文章 0 订阅
2 篇文章 0 订阅

CUDA基本知识–(不断更新)


CPU和GPU是一种异构结构。包括多个多核CPU和GPU。GPU是CPU的协处理器。GPU通过PCiE总线与机遇CPU的主机相连接来操作。
因此成为CPU是主机端,GPU是设备端。

CUDA是一种通用得并行计算平台和编程模型;
其分为内存层次架构和线程层次结构。内核与主机是异步的;

主机代码:是在CPU上面运行的,主要的工作就是设备端的环境、代码和数据。
设备代码:GPU上运行,提高并行数据的执行速度。

一些指标:

GPU容量特征:CUDA核心数量、内存大小。
GPU性能:峰值计算性能、内存宽带

CPU和GPU的优势:
CPU适合计算处理控制密集型的任务;
GPU适合处理包含数据并行的计算密集的任务;

一些修饰符 :

* global:告诉编译器这个函数将会从CPU中调用,在GPU上执行。*
<<<grid,block>>>: 启动设备上的grid个块,每个块block个线程。
__device__:仅在设备端调用
__host__:仅在主机中调用**

API函数:
cudaDeviceReset():显示释放和清空当前进程中与设备有关的资源;
cudaMalloc():
cudaMemcpy(): cudaMemcpyHostToHost 等标志位函数;致使主机阻塞
cudaMemset() cudaMemFree()
cudaGetErrorString() :将错误代码转换成为可读信息
cudaDeviceSynchronize():强制主机并行所有核函数执行

一些基本操作:
nvcc -arch sm_20 hello.cu -o hello
-arch sm_20 是编译器为Fermi架构生成设备代码

GPU内存:
全局内存和共享内存

数据在全局内存中线性存储的可以用blockIdx.x和threadIdx.x来进行操作。

GPU线程管理:
一个内核启动所产生的所有线程统称为一个网络;
所有的网络中的所有线程共享相同的全局内存空间;

同一个线程块协同合作通过:同步、共享内存 不同块内的线程不能协作;

线程依靠blockIdx和threadIdx来区分
blockDim 线程快维度,每个线程块的线程数
gridDim线程格维度,每个维度格中的线程数

核计时:
1、CPU计时 利用gettimeofday 系统调用来确定
2、nvprof 工具计时

优化需要知道的几点:
1、改变执行配置对内核性能有影响;
2、传统的核函数实现一般不能获得最佳性能;
3、对于给定的核函数,尝试不同的网格和线程块大小可以获得更好的性能;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值