主要内容

coder.gpu.kernel

编译指示映射-循环到GPU内核

描述

coder.gpu.kernel ()是循环级的pragma,必须立即放在for循环之前。它生成一个由循环参数计算出的维数的内核。

请注意

coder.gpu.kernelPragma覆盖软件执行的所有并行循环分析检查。使用coder.gpu.kernelfun的更高级功能之前coder.gpu.kernel编译指示。

coder.gpu.kernel (B、T)是循环级的pragma,必须立即放在for循环之前。它生成一个具有指定维度的内核B而且TB (Bx, 1)数组是否定义网格中沿维度的块数x而且yz不习惯)。T (Tx,泰,Tz)数组是否定义了块中的线程数xy,z

的值为-1B而且T表示GPU Coder™必须自动推断网格和块尺寸。的coder.gpu.kernelPragma为无效的网格和块尺寸生成错误。

例子

coder.gpu.kernel (B T M,名称)预计相同B而且T参数。可以指定可选参数而且的名字是一个正整数,指定每个流多处理器的最小块数。有时,增加可以减少内核内的寄存器使用并提高内核占用率。的值为-1表示GPU Coder必须使用默认值“1”。的名字是一个字符数组,允许您自定义生成的内核的名称。

指定内核pragma将覆盖所有并行循环分析检查。这种覆盖允许在并行循环分析不能证明所有迭代彼此独立的情况下并行化循环。首先,确保循环是安全的并行化。

这个函数是一个代码生成函数。在MATLAB中没有效果®

例子

全部折叠

的用法内核pragma,并生成CUDA®代码。

在一个文件中,写入入口点函数标量它接受两个向量输入x, y的大小1 x4096一个标量输入规模.函数有两个-不同迭代长度的循环,一个用于向量相加,一个用于求累积和。把coder.gpu.kernel (1024)Pragma在第一个循环之外。这个编译器创建了一个包含1024个线程的块的内核。把coder.gpu.kernel(8512512年,“还原”)Pragma在第二圈外。这个编译器创建了一个包含8个块的内核,每个块有512个线程。为这个块创建的内核名为reduction。

函数[vout, sout1] =标量(x,y,scale) sout1 = 0;输出电压= coder.nullcopy(0(大小(x)));coder.gpu.kernel (1024);vout(I) = x(I) + y(I);结束coder.gpu.kernel (8512512“还原”);I =1:4096 sout1 = (x(I)*scale) + sout1;结束结束

使用codegen函数生成CUDA的MEX函数。

codegen配置coder.gpuConfig(墨西哥人)...arg游戏{1(1, 4096,“双”)的(1,4096,“双”),coder.typeof (0)}...报告标量

GPU Coder创建了两个内核:scalars_kernel1对于向量加法和scalarsreduction累积和的核。初始化不需要内核sout1 = 0

cudaMemcpy(gpu_y, y, 32768U, cudaMemcpyHostToDevice);cudaMemcpy(gpu_x, x, 32768U, cudaMemcpyHostToDevice);scalars_kernel1<<>>(gpu_y, gpu_x, gpu_vout);cudaMemcpy(gpu_sout1, sout1, 8U, cudaMemcpyHostToDevice);scalarsreduction<<>>(scale, gpu_x, gpu_sout1);cudaMemcpy(vout, gpu_vout, 32768U, cudaMemcpyDeviceToHost);cudaMemcpy(sout1, gpu_sout1, 8U, cudaMemcpyDeviceToHost);

scalars_kernel1每个块有1024个线程,每个线程用于添加每个元素。scalarsreductionKernel有8个块,每个块有512个线程,总共有4096个线程。

在指定内核维度时,可以使用变量或表达式。例如,您可以重写标量入口点函数,以便在编译时指定网格和块尺寸。

函数[vout, sout1] = scalars(x,y,scale, a, b) = 0;输出电压= 0(大小(x));coder.gpu.kernel (1024);vout(I) = x(I) + y(I);结束coder.gpu.kernel([a,a*b,1], [a*b, 1, 1],“还原”);I =1:length(x) sout1 = (x(I)*scale) + sout1;结束结束

使用codegen函数生成CUDA的MEX函数。

codegen配置coder.gpuConfig(墨西哥人)...arg游戏{1(1, 4096,“双”)的(1,4096,“双”),20日8日4}...报告标量

版本历史

介绍了R2017b

Baidu
map