CUDA核函数share memory

本文介绍了CUDA核函数的运行参数,特别是关于share memory的使用。内容包括静态和动态分配share memory的方法,以及如何在调用核函数时设置动态分配的大小。通过示例代码展示了当share memory超过每块允许的最大值时,程序的行为变化。
摘要由CSDN通过智能技术生成

标签: 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>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值