NVIDIA CUDA 学习 (3) Thread Cooperation

本文介绍了CUDA编程中的线程合作,包括设置并行块和线程,混合设置,处理长向量相加,处理图片以及共享显存和同步的概念。通过示例展示了如何利用__shared__关键字实现线程间高速共享数据,并讨论了同步语句的使用注意事项,如避免在条件语句中使用__syncthreads()。
摘要由CSDN通过智能技术生成

设置并行块

add<<<N,1>>>( dev_a, dev_b, dev_c );
//N blocks x 1 thread/block = N parallel threads

这句话里面的1,就是the number of threads per block we want the CUDA runtime to create on our behalf,每个块的线程个数。

设置并行线程

add<<<1,N>>>( dev _ a, dev _ b, dev _ c );

我们把1和N反过来,就是一个N线程的单块程序。当我们获取索引的时候需要换一个表达来获取线程的索引:
在这里插入图片描述

混合设置

int tid = threadIdx.x + blockIdx.x * blockDim.x;

在这里插入图片描述

add<<< (N+127)/128, 128 >>>( dev _ a, dev _ b, dev _ c );

我们可以把thread per block给顾定成128,然后根据N来分配需要多少个block。(N+127)/128实际上就是求ceil的过程。

if (tid < N)
	c[tid] = a[tid] + b[tid];

因此,前面的历史遗留问题:判断小于N就被用作判断最后的block的这个thread是不是超过了我们问题所需要求解的范围N。

长向量相加

__global__ void add( int *a, int *b, int *c ) {
   
	int tid = threadIdx.x + blockIdx.x * blockDim.x;
	while (tid < N) {
   
		c[tid] = a[tid] + b[tid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值