主要内容

parallel.gpu.CUDAKernel

内核可执行在GPU上

描述

一个CUDAKernel对象表示一个CUDA GPU内核,可以执行。你从铜和PTX文件创建内核。对于如何创建和使用的一个例子CUDAKernel对象,看到CUDA GPU上或PTX代码运行

请注意

你不能保存负载CUDAKernel对象。

创建

描述

例子

克恩= parallel.gpu.CUDAKernel (ptxFile,cuFile)创建一个CUDAKernel对象使用PTX代码ptxFile和CUDA®源文件cuFile。PTX文件必须包含只有一个入口点。

使用函数宏指令克恩作为输入来执行CUDA GPU上的内核。在执行您的内核对象的更多信息,请参阅运行一个CUDAKernel

例子

克恩= parallel.gpu.CUDAKernel (ptxFile,cuFile,函数)创建一个CUDAKernel定义的函数入口点函数函数必须明确定义适当的内核PTX文件中的入口点。

例子

克恩= parallel.gpu.CUDAKernel (ptxFile,cProto)创建一个CUDAKernel对象使用PTX文件ptxFile和C原型cProtocProto是内核调用C函数原型吗克恩代表。PTX文件必须包含只有一个入口点。

克恩= parallel.gpu.CUDAKernel (ptxFile,cProto,函数)创建一个CUDAKernel从PTX文件对象和C原型定义的函数入口点函数函数必须明确定义适当的内核PTX文件中的入口点。

输入参数

全部展开

PTX文件名称或PTX代码。

你可以提供一个PTX文件的名称,或通过其内容为字符串。

例子:“simpleEx.ptx”

数据类型:字符|字符串

CUDA的源文件,指定为一个特征向量。

函数检查CUDA源文件找到的函数原型CUDA内核PTX代码中定义的。CUDA源文件必须包含一个内核定义开始“__global__”

例子:“simpleEx.cu”

数据类型:字符|字符串

入口点函数,指定为一个特征向量。函数必须明确定义适当的入口点PTX文件。

请注意

parallel.gpu.CUDAKernel函数PTX文件中搜索指定的入口点,和匹配子串出现。因此,你应该没有名字的入口点的子字符串。

例子:“add1”

数据类型:字符|字符串

内核调用C原型,指定为一个特征向量。指定多个输入参数之间用逗号分隔。

例子:“*浮动,浮动,int”

数据类型:字符|字符串

属性

全部展开

大小的一块在内核线程,指定为一个向量的长度为1的正整数,2或3(因为线程块可以三维)。的元素的乘积ThreadBlockSize必须不超过MaxThreadsPerBlock这个内核,没有的元素ThreadBlockSize能超过相应的元素吗GPUDevice财产MaxThreadBlockSize

例子:(8 8 8)

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

这个属性是只读的。

最大线程数量允许在单个块CUDA内核。的元素的乘积ThreadBlockSize不得超过这个值。

例子:1024年

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

网格大小的线程块,指定为一个整数向量长度为3的。这是有效的线程块的数量由GPU独立了。这个向量的元素都可以超过对应的元素的向量MaxGridSize财产的GPUDevice对象。

例子:(977 1)

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

动态共享内存的数量(以字节为单位),每个线程块可以使用。每个线程块有一个可用的共享内存区域。这个内存共享多处理器的寄存器。SharedMemorySize必须不超过MaxShmemPerBlock财产的GPUDevice对象。

正如所有记忆,这需要分配之前内核启动。通常对这个共享内存区域的大小与线程块的大小。设置这个值在内核可以确保每个线程块可以访问这个共享内存区域。

例子:16000年

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

这个属性是只读的。

在PTX代码入口点的名字叫做由内核。

例子:“_Z13returnPointerPKfPy”

数据类型:字符|字符串

这个属性是只读的。

左手边的最大数量的论点内核支持。金宝app不能大于右侧参数的数量,如果输入是常数或标量将更少。

例子:1

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

这个属性是只读的。

所需数量的右手边参数需要调用这个内核。所有输入需要定义标量值的输入,一个向量输入/输出的元素,和一个输出参数的大小。

例子:5

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

这个属性是只读的。

单元阵列特征向量的长度NumRHSArguments。每一个特征向量表明MATLAB的预期®数据类型的输入是通过指定一个数字类型等uint8,,或其次是这个词标量向量指示如果我们经过引用或值。此外,如果这种说法只是一个输入到内核,它是前缀;如果这是一个输入/输出,它是前缀inout。这允许您决定如何有效地调用内核与MATLAB数组和gpuArray内核对象,看哪个输入被视为输出。

例子:{“inout双矢量”}{在双矢量的}{在双矢量的}{在uint32标量的}{在uint32标量的}

数据类型:细胞

对象的功能

函数宏指令 在GPU计算内核
setConstantMemory 设置一些常数在GPU内存
existsOnGPU 确定gpuArray或CUDAKernel GPU

例子

全部折叠

这个例子显示了如何创建一个CUDAKernel对象使用PTX文件和一个铜文件,或者使用PTX文件和函数原型。

CUDA源文件simpleEx.cu包含以下代码:

/ * *添加一个常数向量。* / __global__空白addToVector (c *π浮动,浮动,int vecLen) {int idx = blockIdx。x * blockDim。x + threadIdx.x;如果(idx < vecLen){π(idx) + = c;}}

编译铜文件到一个PTX文件使用mexcuda-ptx选择。

mexcuda-ptxsimpleEx.cu
建筑“NVIDIA CUDA编译器”。墨西哥人成功完成。

创建一个使用PTX CUDA内核文件和铜文件。

kern = parallel.gpu.CUDAKernel (“simpleEx.ptx”,“simpleEx.cu”);

创建一个使用PTX CUDA内核文件的函数原型addToVector函数。

kern = parallel.gpu.CUDAKernel (“simpleEx.ptx”,“*浮动,浮动,int”);

前面两个语句返回一个内核对象,您可以使用它们来调用addToVectorCUDA内核。

这个例子显示了如何创建一个CUDAKernel对象从PTX文件与多个入口点。

假设你的铜文件,myfun.cu,包含一个函数add1添加两个一起双打和一个函数add2添加两个向量在一起。

__global__空白add1(双*,双b) {* + = b;}__global__空白add2(双* v1, const双* v2) {int idx = threadIdx.x;[idx] v1 + v2 = [idx];}

编译铜文件到一个PTX文件使用mexcuda-ptx选择。

mexcuda-ptxmyfun.cu
建筑“NVIDIA CUDA编译器”。墨西哥人成功完成。

PTX文件包含两个入口点对应add1add2功能。PTX代码包含多个入口点时,您必须指定一个条目在创建您的内核。

创建一个内核添加两个双打和指定入口点add1

k = parallel.gpu.CUDAKernel (“myfun.ptx”,“myfun.cu”,“add1”);

版本历史

介绍了R2010b