CUDA学习3
创始人
2024-06-02 00:11:36
0

昨天试着在GPU上输出了"HELLO WORD!"以及cuda的存储问题,那么今天先开始看第一个:线程管理:

核函数在主机端启动的时候,他的执行会移动到设备上去,这个时候,设备上会产生大量的线程,而且每一个线程都在执行由核函数指定的语句,所以,怎么样去组织线程是CUDA的一个关键部分,CUDA明确了线程层次抽象的概念,以便于我们组织线程,这里我们展示书上的一个两层的线程层次结构:

图一

由一个内核启动所产生的线程统称为一个网格,同意网格中的所有线程共享相同的全局存储空间,一个网格由多个线程块构成,一个线程块内又包含了一组线程,同一线程块内的线程写作可以通过以下方式来实现:

  1. 同步

  1. 共享内存

但是,不同块内的线程不能够协作!!!

线程依靠两个坐标变量来找:

  1. blockidx:线程块在线程网格内的索引

  1. threadidx:线程块内的线程索引

这两个变量是核函数中需要预先初始化的,当执行一个核函数的时候,CUDA运行时就会给每个线程分配以上两个变量,基于这种思想,我们就可以很轻松的把数据给分配到不同的线程中去,

CUDA是可以组织三维的网格和块的:

blockIdx.x
blockIdx.y
blockIdx.z
threadIdx.x
threadIdx.y
threadIdx.z

他的结构是一个包含二维块的二维网格,网格和快的维度由下面两个内置变量指定:

  1. blockDim:线程快的维度:每个线程块中的线程数

  1. gridDim:线程格的维度,每个线程格中的线程数来表示

和上面一样也是三维的;

通常,一个线程格会被组装成线程块的二维数组形式,一个线程块会被组织成线程的三维数组形式。

CUDA程序中有两种不同的网格和块变量:

  1. 手动定义的dim3数据类型(仅主机端可见)

  1. 预定义的uint3数据类型(仅设备端可见)

主机端作为内核调用的一部分,可以用dim3来定义一个网格和块的维度,执行核函数的时候,CUDA运行时会自动生成相应的内置预初始化的网格,块和线程变量,在核函数内均可以被访问且都是uint3类型。网格大小是块的倍数,跟着书上的学着写一下:checkDimension.cu文件:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include
#include
#include
__global__ void checkDimension() {printf("threadindex:(%d,%d,%d) blockindex:(%d,%d,%d)    blockdimindex:(%d,%d,%d)""griddim:(%d,%d,%d)\n", threadIdx.x, threadIdx.y, threadIdx.z, blockIdx.x, blockIdx.y, blockIdx.z, blockDim.x, blockDim.y, blockDim.z, gridDim.x, gridDim.y, gridDim.z);}
int main() {int nElem = 6;dim3 block(3);dim3 grid((nElem + block.x - 1) / block.x);printf("grid.x%d,grid.y%d,grid.z%d\n", grid.x, grid.y, grid.z);printf("block.x%d,block.y%d,block.z%d\n", block.x, block.y, block.z);checkDimension << > > ();cudaDeviceReset();return 0;
}

图二:运行结果

对于一个给定的数据大小,确认网格和块尺寸的一般步骤是:

  1. 确定块的大小

  1. 在已知数据大小和块大小的基础上计算网格维度

要确定块的尺寸,通常要考虑的是

  1. 内核的性能特性

  1. GPU资源的限制

相关内容

热门资讯

安卓导航怎么重做系统,系统重做... 你的安卓导航是不是突然卡壳了,或者你只是想给它来个焕然一新的大变身?别急,今天就来手把手教你如何给安...
安卓手写平板系统重装,轻松恢复... 你那安卓手写平板系统是不是突然间就闹起了别扭,各种卡顿、崩溃,让你头疼不已?别急,今天就来给你详细说...
小米刷安卓13系统教程,小米手... 亲爱的米粉们,你是否已经迫不及待想要升级你的小米手机到最新的安卓13系统呢?别急,今天我就要手把手教...
语音包在哪里安卓系统,语音包生... 你有没有想过,有时候一句话就能让气氛瞬间活跃起来?没错,就是那些有趣的语音包!它们就像魔法一样,能让...
htc g10安卓系统,性能与... 你知道吗?最近我在手机圈里发现了一个小秘密,那就是HTC G10这款手机。这款手机搭载的安卓系统,简...
那几款手机是安卓系统 说到手机,安卓系统可是占据了半壁江山呢!市面上那么多手机,哪几款才是安卓系统中的佼佼者呢?今天,就让...
三星安卓系统评测,体验升级 你有没有发现,手机市场里总是有那么几个品牌,它们就像明星一样,总是能吸引我们的目光?今天,咱们就来聊...
老电脑装安卓6.0系统,轻松安... 你那台老电脑是不是已经服役多年,性能越来越不给力了?别急,今天就来给你支个招——给老电脑装上安卓6....
流畅度最高的安卓系统,揭秘安卓... 你有没有想过,为什么你的手机用起来那么顺滑,而别人的手机却总是卡得要命?这背后,其实隐藏着一个秘密—...
安卓手机系统服务在哪有,安卓手... 你有没有遇到过这种情况:手机里装了各种各样的应用,但是有时候想找某个服务却怎么也找不到?别急,今天就...
安卓11系统有哪些版本 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,那就是安卓11系统的魅力所在!自从安卓11...
rog3安卓系统更新,体验极致... 亲爱的玩家们,你是否已经迫不及待地想要了解最新的Rog3安卓系统更新了呢?那就跟我一起,深入探索这次...
安卓系统隐藏应用appstor... 亲爱的手机控们,你是否曾好奇过,安卓系统里那些神秘的隐藏应用?没错,就是那些你不经意间就能发现,却又...
安卓系统车机互联软件 你有没有发现,现在开车的时候,手机和车机之间的互动越来越频繁了呢?想象你正驾驶着爱车,一边享受着音乐...
荣耀play4安卓系统,智能生... 你有没有发现,最近手机圈里又掀起了一股热潮?没错,就是荣耀Play4这款新机!它不仅外观时尚,性能强...
安卓模拟苹果多开系统,打造跨平... 你有没有想过,在安卓手机上也能享受到苹果系统的多开功能呢?没错,这就是今天我要跟你分享的神奇话题——...
广汽埃安是安卓系统吗,搭载安卓... 你有没有想过,你的爱车广汽埃安,它的操作系统是不是安卓呢?这个问题,估计不少车友都在心里默默琢磨过。...
安卓系统是google的吗,谷... 你有没有想过,安卓系统是不是谷歌的亲生孩子呢?这个问题,就像是在问苹果是不是苹果树的宝宝一样,让人好...
安卓系统的设置程序下载,轻松掌... 你有没有发现,手机里的安卓系统设置程序真是五花八门,让人眼花缭乱?今天,就让我带你一起探索这个神秘的...
安卓系统的手机家园,打造个性化... 你有没有发现,现在手机的世界里,安卓系统的手机家园可是越来越热闹了呢!想象每天打开手机,就像走进了一...