有关bank conflict 和warp的三个小问题

诚心请教两个问题:1、有关bank conflict 。资料里看到,说共享内存分配给某一个线程块后,里面的数据按bank结构存储,可是没看明白具体的存储的模式,还有就是是不是不论分配给线程块的共享内存有多大,都是按固定的模式存储数据?
2、有关warp。看到有资料说,一个warp通常包含32个线程,想问一下一个多处理器同一时间最多能执行多少个warp。
3、有关bank conflict ,看到资料里说,一个块共享内存分成16个bank,而且warp分为两个halfwarp ,也就是说一个halfwarp包含16个线程 线程调度器会定期从一个warp切换到另一个warp,如果是这样,又怎么会产生bank conflict 呢?

LZ您好:

1:每个bank您可以看作是一个shared memory的控制器,并控制了一组存储空间,总的shared memory的存储空间被分为了bank数量份(16份或者32份)。对于1.x版本计算能力的硬件来说是16banks,对于2.x和3.x的硬件来说是32 banks。bank的宽度是4字节。

那么假定我申请了100个4B宽度的int数据的shared memory空间,那么第0~31(按照32banks为例)个数据会依次存放于bank0~bank31,第32~63个数据会存在bank0~bank31的下一行,以此类推。

bank0管理的数据的地址是0+n324B,bank1是14B+n32*4B,以此类推。相邻的4B数据总是在相邻的bank里面。

bank的数组组织情况大致如此。

2:一个SM能管理的最大warp数量就是最大的resident threads数量除以32。如果是考虑同一时刻有多少warp正在SM的处理单元上执行任务,那么和具体的SM的发射能力有关,印象中FERMI SM2.1的硬件好像是2个warp。如果您需要此信息,建议查看一下手册上关于不同硬件架构发射能力的说明。

3:如前所说,在计算能力为1.x的硬件上,shared memory是16banks的,每次服务于半个warp(half-warp)。但这个和有没有bank conflict没有关系,只要half-warp里面有一个以上的线程访问同一个bank控制器管理的不同地址,必然发生bank conflict。

大致如上,供您参考。

祝您编码愉快~

经好友提醒,我再补充一下,计算能力3.x的GPU(kepler)的shared memory提供了64bit mode,bank宽度为8B。同时也支持32bit mode,这个和之前是一样的。

具体您可以查阅一下programming guide。

祝您好运~

呵呵大致明白了,又想到两个疑点请教版主:1、我知道 一个warp里的两个half warp之间因为是两个请求而且不是同步的所以他们之间不存在冲突,但是一个块可以分成多个warp ,如果同一时间2个warp里的多个线程同时访问同一个bank控制器管理的不同地址,会不会发生冲突呢?2、如果half warp内多有的线程同时访问同一个bank控制器管理的不同地址 就会发生广播么?麻烦版主:)

LZ您好:

1:不存在这种情况,同时resident在一个SM上的所有blocks的所有warp,同一时间只能有一个warp(对于2.x和3.x)或者一个half-warp(对于1.x)访问该SM的shared memory。因为shared memory是一个SM才有一套的,而这一套只有32/16个banks提供服务。

2:如果他们访问的是该bank的不同的4B(对于kepler的shared memory的64bit模式,是8B),不会发生广播,会发生bank conflict。如果是多个线程访问同一个bank的某个4B里面的不同的1B或者2 B,那么不会发生bank conflict(对于kepler的64bit shared memory mode,是同一bank里面的某个8B里面的不同的1B,2 B,4B,不会发生bank conflict)。

祝您好运~

:)麻烦版主

[

不麻烦的,欢迎您常来论坛转转,祝您晚安!

呵呵又发现一问题,我记得手册里说一个SM结构通常会包含几个多处理器,那么每个多处理器都有自己的shared memory,而且处理blocks的时候还会根据他们的请求分给他们,那么是每个block分到的shared memory都分成16个bank,还是。。。

我的台式机是GEforce310,现在安装了vs2008,toolkit5.0,现在还不能运行,不知道还少什么东西,每次运行出来的结果都是:未能加载系统项目默认值文件“C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCProjectDefaults\CoreWin.vsprops”。如果不安装此文件,则无法加载项目。请重新安装产品。

请求各位高手指点。

您已经重复发帖,并在无关的他人帖子中乱回复了。给予您警告一次。

[

SM就是流多处理器的缩写,所以您说的SM包含多个多处理器的说法是不正确的,请您核实。

另外,一个SM上resident多个block的时候,各个block是分享SM的shared memory资源的,但因为shared memory分为多个bank是硬件特性,实际与block分享情况无关。

祝您编码愉快!

不好意思,给大家填麻烦了,不过感谢版主,我的问题已解决。

:D这下都清楚了谢谢版主

不客气的,欢迎您常来论坛~

祝您一切顺利~

今天看到samples中有一个 scan的例子 我记得这个叫做电梯调度 例子里的程序注释不是很清楚 我没太弄明白 在这个例里 他主要实现的是什么功能 想请教下版主 他的程序注释是
////////////////////////////////////////////////////////////////////////////////

// Basicccan codelets

////////////////////////////////////////////////////////////////////////////////

//Naive inclusive scan:O(N * log2(N)) operations

//Allocate 2 * 'size’local memory, initialize the first half

//with ‘size’ zerosavoiding if(pos >= offset) condition evaluation

//and saving instructions

LZ您好,我不清楚此具体例子作者的注释意图如何,亦无看过此例子,无法就某算法给出对应注释的解释了,请您根据原文的上下文揣摩一二。

祝您好运~

恩恩 麻烦版主了:)