各位大大请问一下关于硬体方面的问题

想请问一下

在宣告 block 与 thread 时 可以将其配置成三维结构

而 block 的三维 其实只有两维 (第三维 限制为1)
但是 thread 就可以配置成三维

请问一下 block 这样限制 有其意义呢??
是方便日后扩充升级吗??

另外…

记忆体中
Constant 与 Texture 一样都有 缓存

那这两种记忆体 哪种速度比较快??

有大大能分享 这六种记忆体之间 彼此存取的快慢速度比较吗??

谢谢大大了…

最近要写关于CUDA的文章…所以问比较多非程式相关的东西 感谢^^

自己写文章就通过自己去获得答案,否则那还叫你写的吗

关于这个限制目前我也不知道为什么,cyrosly如果知道,盼见告!不过可以确定的是很方便扩充,因为目前只能声明二维,但是第三维默认的是1,将来不限制了的时候,就可以很方便的处理,因为毕竟1只是unsigned int中的一个特殊数字,呵呵!

另外,一般而言,constant比texture要快,但是其容量也比较小。

[

cyrosly教训的是>"<

但是就是因为找不到"理由",
大部分的文献都是只有说明有其限制,但是没有解释为什么.

至于是否是为了未来的扩充所埋下的伏笔,也是自行猜测的.
所以才问讨论区的大大有人知道正确的原因吗?

或是cyrosly可以提供有答案的文献,小弟自己去搜寻答案…

constant memory未必比texture memory快,如果把缓存结构看做是他们存储体的一部分。比如constant和texture的L1缓存都是相同的物理介质(至少GT200和之前架构的硬件是这样),但texture有自己单独的数据传输管线,如果不纹理滤波模式是点采样,则理论上一样快(事实上这是把而外的计算操作开销也包含在内,否则仅仅是访问数据时一样快的),而且考虑到不同的应用,结果也是不一样的,因为GT200和之前架构的硬件在访问contant memory时有限制,同一个warp中的所有线程必须访问相同的地址,否则会序列化操作,fermi已经没有这个限制了,可以全速,记得我以前写的那篇矩阵与向量乘法的文章中就说到在将来的硬件中利用全速的constant memory进行优化的意见。

[ 本帖最后由 cyrosly 于 2010-6-8 07:03 编辑 ]

关于grid布局为什么限制成2维的,我个人的看法是硬件设计和线程调度复杂度以及访存效率有关,2D事实上已经足够了。没必要在这里较真,没什么实际意义。在看driver api中的cuLaunchGrid函数,设置grid布局的参数只有2个,而不是3个,所以即使你明白了为什么这样做,你又能怎样,打算在程序设计时告诫自己:第三维由于…原因只能设置成一,所以不要设置成其他值(这样就真是幽默了,cuLaunchGrid函数就只给用户了2个布局参数,你即使想设置第三维也没这个权利啊)

我说他快更重要的原因在于:一,它们的缓存数量差不多,二、由于constant声明的少(实际上,我几乎没有声明过超过8K的constant),都能够保证比较高的缓存命中率。当然如果数据的二维局部性非常好的话,也可能例外:)

[

大概了解了…因为我看有一些文章是写说 grid 与 block 都是dim3结构,但是grid有其限制
所以才有这个疑问…

到头来~grid其实能配置的也只是二维结构…

谢谢大大指教

我觉得将来使用三维的也很正常,毕竟现实世界中三维的东西太常见了