忘了哪里看到有人说:Global memory的读取数据快,写入数据慢。特此求证?
那就是说对global memory里的g_a计算
g_a=g_a+1
时间主要是花在写操作里面?
还有版主可否稍微多说明一点关于各内存读写速度的差别及原因?
跪谢!
LZ您好,各级RAM似乎并无读快写慢的说法,所以我也无从向您解释。
祝您好运~
哦,那我一直都搞错了。
如果是g_a=g_a+1.0的话,g_a在global memory上
你看我这样理解对吗?
去global memory上读g_a要花几百的cycle,计算过程几个cycle,写到global memory上几百个cycle。
LZ您好,您的理解是正确的,同时又是不正确的。
1:您理解的正确之处在于,访问global memory确实是长延迟的操作,需要数百个cycles才行。
2:您理解可能不正确的地方在于,这几百个cycles只是延迟,而不一定会影响计算效率,计算单元在计算完这几个cycles以后,并不会等着访存的几百个cycles结束才继续向后执行。实际上GPU上会有大量的resident threads,按照warp为单位,一批批地去访存,当读取结果拿到的时候,才被切换到SP等计算单元上计算,计算之后被切换出SP等计算单元实现结果回写,同时另外一个就绪的warp会被切换到SP等计算单元上继续计算。
也就是说通过大量的threads来掩盖这样的延迟。
不过按照您的例子,计算的时间依然过短,最后会卡在访存上而使计算单元有所空闲(就是所有的resident threads都在等待读取结果或者在回写结果而不是一直有就绪的warp供计算)。
大致如上,供您参考。
祝您编码顺利~
嗯,明白!感谢版主!