C++ 在CUDA内核中调用推力函数___
我已经了解到,CUDA的较新版本支持动态并行性,我可以使用C++ 在CUDA内核中调用推力函数___,c++,cuda,gpu,thrust,C++,Cuda,Gpu,Thrust,我已经了解到,CUDA的较新版本支持动态并行性,我可以使用推力::设备参数在内核函数中调用推力函数,如thrush::exclusive_scan \uuuu全局\uuuuu无效内核(int*inarray、int-n、int*result){ 外部共享内部s[]; int t=threadIdx.x; s[t]=inarray[t]; __同步线程(); 推力::排他扫描(推力::设备,s,n,结果); __同步线程(); } int main(){ //准备工作 内核(inarray,n,r
推力::设备
参数在内核函数中调用推力函数,如thrush::exclusive_scan
\uuuu全局\uuuuu无效内核(int*inarray、int-n、int*result){
外部共享内部s[];
int t=threadIdx.x;
s[t]=inarray[t];
__同步线程();
推力::排他扫描(推力::设备,s,n,结果);
__同步线程();
}
int main(){
//准备工作
内核(inarray,n,result);
}
我感到困惑的是:
推力
,这样我就可以执行If
到线程idx
;如果不是,那么块中的线程如何相互通信,以确保对推力的调用已经完成,并且它们应该忽略它(这似乎有点虚构,因为没有一种系统的方法来确保用户的代码)。简而言之,当我在内核中使用推力::设备参数调用推力函数时,到底发生了什么
推力::seq
而不是推力::设备
推力::seq
if (!threadIdx.x) thrust::exclusive_scan(...
或类似的\uu syncthreads()
,(在CDP情况下使用cudaDeviceSynchronize()
)推力::seq
而不是推力::设备
推力::seq
if (!threadIdx.x) thrust::exclusive_scan(...
或类似的\uu syncthreads()
,(在CDP情况下使用cudaDeviceSynchronize()
)