标签: CUDAExample
CUDA核函数运行参数
核函数是GPU每个thread上运行的程序。必须通过gloabl函数类型限定符定义。形式如下:
__global__ void kernel(param list){ }
核函数只能在主机端调用,调用时必须申明执行参数。调用形式如下:
Kernel<<<Dg,Db, Ns, S>>>(param list);
其中,参数Ns是一个可选参数,用于设置kernel函数中动态分配shared memory大小,动态分配shared memory应小于每个块允许的最大share memory大小,单位为byte。不需要动态分配时该值为0或省略不写。
share memory
share memory的分配方式分为静态分配和动态分配,静态分配指的是在核函数中申请固定大小的share memory,动态分配指的是在核函数运行过程中设置share memory的大小。两者可以单独存在与核函数中,也可以共同存在核函数中,但是必须保证总大小不大于每一块中share memory的大小。在核函数调用是在<<<>>>中第三个参数就是用来设置动态申请share memory最大尺寸的允许值,也就是说,核函数中使用的动态share memory应该小于设置的大小,即第三个参数的大小。第四个参数S是一个cudaStream_t类型的可选参数,初始值为零,表示该核函数处在哪个流之中。
以下例子说明第三个参数:
测试例子硬件配置
cpu Intel 至强四核E3-1231 V3 @ 3.40GHz
显卡 NVIDIA GeForce GTX 980
vs2013 x64
测试代码
// This example shows how to use the share memory
// System includes
#include <stdio.h>
#include <assert.h>