1. 引言
__syncthreads()
仅支持单一block内线程间的同步。 而Cooperative Groups支持跨grid,跨多个GPU设备的同步。
相关代码实现可看:
- https://github.com/olcf/cuda-training-series
cudaLaunchCooperativeKernel
参数定义为:
template < class T >
__host__cudaError_t cudaLaunchCooperativeKernel ( const T* func, dim3 gridDim, dim3 blockDim, void** args, size_t sharedMem = 0, cudaStream_t stream = 0 ) [inline]
Launches a device function.
Parameters
func
- Device function symbol
gridDim
- Grid dimentions
blockDim
- Block dimentions
args
- Arguments
sharedMem
- Shared memory (defaults to 0)
stream
- Stream identifier (defaults to NULL)
cudaLaunchCooperativeKernel
会调用kernel func
函数,将该函数运行在gridDim (gridDim.x gridDim.y gridDim.z)
个grid of blocks,每个block内包含了blockDim (blockDim.x blockDim.y blockDim.z)
个threads。 【当前,每个block最多仅能有1024个threads,每个grid最多有65535个blocks。】 运行该kernel的设备必须具有非零的设备属性值cudaDevAttrCooperativeLaunch
。
若采用cooperative groups方式,kernel必须使用cudaLaunchCooperativeKernel
来调用。
可采用atomics with bitfields这种更简单的方式来实现,如:
// A global var with 64 bits can track 64 blocks,
// use an array if you need to track more blocks
__device__ uint64_t CompleteMask;
//This is where we put in all the smarts
//from the CPU reference solver
__global__ void doWork() {
atomicAnd(&CompleteMask, 0);
//do lots of work
const auto SollMask = (1
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?