cuda shared memory 静态分配和动态分配_桑来93的博客-程序员宅基地

技术标签: [CUDA笔记]  

静态分配

加上前缀 shared

__shared__ int _ss[1024];1

动态分配

当我们在编程时,不清楚shared memory 数组开多大,就要用到动态分配。
分为两部分:
1, 声明

extern __shared__ int _s[]; 

2, 在调用kernel 时加上数组的大小。

xxx_kernel<<<grid, block, sharedMemSize>>>();1

内存分布

下面通过一个例子,说明同时使用静态和动态分配时, 内存分配情况。
kernel 代码:

__global__ void sharedMemTest()
{
    extern __shared__ int _s[];
    __shared__ int _ss[1024];
    if (threadIdx.x==0)
        printf("blockIdx.x is %d s is at %x, ss is at %x\n", blockIdx.x, _s, _ss);
}

调用kernel代码:

{
        dim3 block(32);
        dim3 grid(32);
        sharedMemTest << <grid, block, 4*1024>> >();
        cudaDeviceSynchronize();
    }

输出结果如下:

blockIdx.x is 27 s is at 1001000, ss is at 1000000 
blockIdx.x is 6 s is at 1001000, ss is at 1000000 
blockIdx.x is 9 s is at 1001000, ss is at 1000000 
blockIdx.x is 18 s is at 1001000, ss is at 1000000 
… 
blockIdx.x is 30 s is at 1001000, ss is at 1000000 
blockIdx.x is 10 s is at 1001000, ss is at 1000000

可以看出以下几点:
1, 每个block 都有自己独立的shared memory地址空间。
2, 静态开辟的空间总是从地址1000000开始。
3, 动态开辟空间是在静态空间之后的。

如果将动态开辟地址大小设置太大,导致整个block 使用的shared memory 空间超过maxSharedMemoryPerBlock,会导致kernel 不执行。例如将调用代码改成下面:

{
        dim3 block(32);
        dim3 grid(32);
        sharedMemTest << <grid, block, 48*1024>> >();
        cudaDeviceSynchronize();
    }

由于我的显卡中maxSharedMemoryPerBlock = 48KB,动态空间+静态 = 49KB所以程序并没有输出。


本文来自 朝气 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/galaxy_wolf/article/details/50738200?utm_source=copy

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qjh5606/article/details/82897255

智能推荐

安卓自定义alertdialog中edittext点击不出现输入键盘解决方法_hello_rickey的博客-程序员宅基地

AlertDialog dialog=new AlertDialog.Builder(tabcontent1.this).create(); dialog.setView(((Activity)tabcontent1.this).getLayoutInflater().inflate(R.layout.add_dialog, null)); dialog.show(); W

怎么为DragonBoard 410c定制Android系统_崔传凯的博客-程序员宅基地

上一篇博文《初识DragonBoard 410c》已经为大家简单介绍了DragonBoard 410c这款平台,并且也介绍了Ubuntu系统和Android系统烧写方法。今天,将介绍一下Android系统定制方面的内容。这样你就可以自己基于Android系统进行修改、定制、开发等,来满足自己的需求。

Java服务端和客户端开发辅助工具Utils_FeelTouch Labs的博客-程序员宅基地_java-object-diff

包括了各种工具类、辅助类、管理类等Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md收集中国国内可用APIcommons-lang: https://github.com/apache/commons-langApache Commons Lang, a package of Jav...

JVM调优_崔显龙的博客-程序员宅基地

本文内容1 优化层面2 JVM调优1 优化层面1.1 设计层面系统的设计层面是要最先考虑的问题。一个糟糕的设计,会直接导致系统性能出现问题。例如,对于支付宝和微信的红包系统,若设计出现问题,即便程序优秀、硬件强劲,也于事无补。反之,若设计良好,则事半功倍。1.2 程序层面在一个良好的设计下,程序本身的优劣就决定了性能的高低。高质量的代码会提高资源的利用率...

Java基础 输入输出流_wings0571to010的博客-程序员宅基地

笔者由于身体不适,这次就草草的整理了一下第九章 输入输出流9.1 文件File(String filename)File(String directoryPath , String filename)File(File f, string filename) filename:文件名directoryPath:文件路径f:目录9.1.1 文件的属性pub...

计算机网络安全技术的影响因素与防范措施_cuilichen4622的博客-程序员宅基地

随着网络时代的到来,社会信息传递的方式和速度有了极大的发展。社会沟通进一步加强。随着互联网规模的不断扩大,网络在给人们带来丰富的信息资源的同时,也存在安全隐患,计算机网络安全成为亟待解决的问题。[@[email protected]]一、计算机网络安全...

随便推点

世界顶级的程序员们告诉你:这些书都是你应该读的_weixin_34355715的博客-程序员宅基地

在很早之前就想整理一份来自经验丰富的顶级程序员推荐阅读的书籍清单,全栈工程师Dmitry Shvetsov整理了Bob叔以及Jeff Atwood and DHH等世界知名程序员曾经在博客中推荐过的书单,下面我们就一起来看看深受大神们青睐的书籍都是哪些?世界顶级的程序员们告诉你:这些书都是你应该读的Toptal公司副总裁Bozhidar Batsov在他的演讲中提到:作为一名程序员,需要掌握15本...

Android 标题栏上加一个返回按钮 超简单的返回_晓雨哥哥写代码的博客-程序员宅基地

Android 标题栏上加一个返回按钮在Java页面onCreate方法中添加ActionBar actionBar = getSupportActionBar();if(actionBar != null){ actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);}...

DB2服务器链接中几种遇到的出错的解决_cuishuobi4947的博客-程序员宅基地

1、DB2中几种遇到的SQL1032N出错的解决 在使用DB2以来,碰到了几次出现提示SQL1032N错误,每次出错时出错信息大概如下:11/21/2004 22:15:33 0 0 SQL1042C 发生意外的系统错误。SQL...

资料:数据挖掘综述汇编_cuanyue4880的博客-程序员宅基地

-- 原文下载 http://www.chinabi.net/blog/UploadFiles/2007-6/69838799.rar[@[email protected]](本文由数据挖掘研究院www.dmresearch.net整理转摘,原作者不...

Oracle 日记_cuanjingyue4687的博客-程序员宅基地

oracle 使用绑定变量的好处:更好的执行速度。更好的安全性,防止sql注入 ...

推荐文章

热门文章

相关标签