主要内容

coder.gpu.kernelfun

将功能映射到GPU内核的编译指示

描述

例子

coder.gpu.kernelfun ()是一个全局级别的编译指示,试图地图中的所有计算函数它驻留在GPU。这个函数内循环并行化到GPU内核只有通过并行循环分析检查。这一分析试图证明每个循环迭代都是相互独立的。

这个编译指示不需要任何输入参数。它自动生成内核尺寸的计算基于循环参数。

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

例子

全部折叠

这个例子展示了如何使用kernelfun在功能和生成CUDA编译指示®代码。

在一个文件中,写的入口点函数标量接受两个向量输入x, y的大小1 x4096和一个标量输入规模。这个函数有两个不同的迭代长度的循环,一个用于向量加法和一个寻找累计总和。把coder.gpu.kernelfun ()编译指示中标量函数。

函数(输出电压,sout1) =标量(x, y,规模)coder.gpu.kernelfun;sout1 = 0;输出电压= coder.nullcopy (0 (1024));i = 1:1024电压输出(i) = x (i) + y(我);结束i = 1:4096 sout1 = (x(我)*规模)+ sout1;结束结束

使用codegen函数来生成CUDA墨西哥人的功能。

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

GPU编码器创建三个内核:scalars_kernel1初始化sout1 = 0,scalars_kernel2向量加法,scalars_kernel3是累计金额减少内核。

scalars_kernel1 < < < dim3 (1 u, 1 u, 1 u), dim3 (32 u, 1 u, 1 u) > > > (gpu_sout1);cudaMemcpy (gpu_y y 32768 u, cudaMemcpyHostToDevice);cudaMemcpy (gpu_x x 32768 u, cudaMemcpyHostToDevice);scalars_kernel2 < < < dim3 (2 u, 1 u, 1 u), dim3 (512 u, 1 u, 1 u) > > > (gpu_y, gpu_x gpu_vout);scalars_kernel3 < < < dim3 (8 u, 1 u, 1 u), dim3 (512 u, 1 u, 1 u) > > >(规模、gpu_x gpu_sout1);cudaMemcpy(输出电压、gpu_vout 32768 u, cudaMemcpyDeviceToHost);cudaMemcpy (sout1 gpu_sout1 8 u, cudaMemcpyDeviceToHost);

scalars_kernel2有两个街区512线程块共有1024个线程,一个用于添加每个元素。同样的,scalars_kernel3有八块,每个块512个线程导致共有4096个线程。GPU编码器还执行的数量最小化的优化cudamMemcpy函数调用。在本例中,输入的副本x在GPU,没有额外的吗cudamMemcpy之间是必需的scalars_kernel2scalars_kernel3。除了内存优化,任何顺序代码之间的内核线程映射到CUDA GPU上的数据。

版本历史

介绍了R2017b