是这样,代码本身就是CUDA的语法,本来就没有想着能够具有可移植性。
只是希望代码本身能够具有CUDA本身的可兼容足以啊。
那些PTX指令应该都具有自动兼容吧,WARP等概念都具有版本兼容吧,这些足够了!
:L归根结底这俩问题不都是同一个问题么。。。无非就是非合并访问引起了global的多次访问,而有效数据带宽又太低,所以还是要合并访问来提高有效数据带宽~
显然不是!田园你说的不对。
你说需要神马32*400个周期那是不对的。
考虑场景:每个线程在跨距>32B的情况下,读取4B数据,同时bypass L1, 在一种固定的L2 port宽度为32B, 固定延迟为400个周期(指SM的基本频率,不是SP的频率算的)的假想卡上。
为1个warp完成128B的数据读取。果断总延迟(到warp里的最后一个线程要求的数据就绪),是400 + 32, 而不是400 * 32, 所以你的说法是错的,而ICE的说法比较客观(略微增加).
你闭口不谈你之前的说法,却在一味的赞同ICE的说法(有效利用的带宽是128B / (32B/次 * 32次) = 12.5%)。不是勇敢的讨论行为。
另:对此文给出的场景下的有效带宽的计算方式,和profiler的计算公式以及报告结果是吻合的。无需置疑。
我不是对你的批判。而只是对真理的渴求。对的就是对的。错的就是错的。
只有这样,我和你才能一起进步。
EDIT: 将文中的“某卡”改成“假想卡", 以便拒绝某对我的不存在完全正好400周期恒定不变的卡的型号的要求。
songyong2您的回复和针对的ICE的帖子毫无关系!!你在说什么!你确信你看过ICE此帖子了么?
举个例子, 我也回复一下您的帖子:
回复:“请问您的显卡能够游泳吗?您的显卡能比菲尔普斯更有夺冠呼声么?”
神马?您看不懂?这就对了。这就是我如何感觉您的回帖的。
我建议您仔细看看ICE大在说神马,再引用,再回复。不要浪费您的网络的流量。随意粘帖或者敲入一堆内容无利于您键盘。
嘟嘟。望三思!
OK,有机会向您请教CPU优化问题。
:handshake
嗯嗯。不过我只懂某一家的CPU(无法提供其名称)。
而且我建议您不要在此论坛询问。这里是CUDAZone China!
假设没有Cache的情况下,如果warp内32个线程全部都从不同段取数据的话,那不是需要访问32次global memory?而单次global memory的访问延迟都是400-800个cycle,那32次怎么会是400+32?
因为不是第一次访存400周期完成以后才开始第二次访存,导致每次都是完全不重合的400周期。
这部分资料在哪,我以前还真没注意过这个问题~看看去~:L
因为是流水线的。
见过快递公司大车卸包裹么?
车在仓库门口,一个人在车上,一个人在车下,中间还有一帮人传递,最后一个人在仓库门口。他们接力传递,从车上往仓库里扔。
假设车上那个人每10秒捡起一个包裹,而这1个包裹从车上仍下,经过多次倒手,扔进仓库里,历时1分钟,
那么800个包裹需要多久?
是 1分钟每包裹 * 800个包裹吗?是800分钟吗?如果是,劳动检察部分可以来调理快递公_司了,因为已经超过了法定工作时间。
但实际上不是,实际上这800个包裹,因为接力流水传递,只需要800 * 10/60 + 1 = 134分钟即可。
他们只干了2个小时。而不是13个小时还多。
请田园三思。
这个应该跟带宽有关吧?应该是乘个系数吧?
400+32*coef
嗯,系数似乎正好是1.
请问这个和带宽有什么关系呢?为何系数恰好是1?
仅仅属于个人理解,不知对错,望评判:
我想数据请求有个带宽的概念吧?不是那么顺畅一个周期一个吧?
而且如果内核函数本身访存密度较高,这个系数就不是1了,而是跟代码访存密度有关与当前GPU状态有关大于1的一个值。
如上纯属个人瞎想胡猜,还望指教!
谢谢各位的帮忙!
要有好的建议,希望大家继续提出来
建议你看看张舒的那本书的那个例子。
可能跟你的需求不见得一样,但可以借鉴。
另外你的需求说得不是很清楚。