银行冲突与CUDA中合并访问之间的关系

| 我尝试将一些数据从共享内存传输到全局内存。一些连续的线程将访问一个存储体(但不是相同的32位)。因此,存在一些银行冲突。 (我使用Visual Profiler进行检查) 但是,这些数据也将合并,然后传输到全局内存。 (我使用Visual Profiler进行检查) 为什么将数据以合并的方式写入全局内存?在我看来,流式多处理器会根据银行的带宽,一个接一个地弹出32位字。因此,无法在全局内存中合并内存事务。 我可能在这里犯一些错误。请帮助找出错误或给我一个合理的解释。谢谢。     
已邀请:
您在这里进行了两种不同的操作:读操作会导致银行冲突,而写操作可能无法合并。由于共享内存比全局内存快得多,因此通常需要首先担心合并访问。 合并意味着线程正在写入较小范围的内存地址。例如,如果线程1写入地址1,而线程2写入地址2,则很好。如果分别写入地址* 1和4,则情况更糟。不太重要的是,如果线程写入以32的倍数开头的递增地址(例如地址32和33),则是最佳选择。*(我在这里宽松地使用\“ address \”,表示4字节偏移量)。 当多个线程访问具有相同低位(特别是等效的mod 16)的共享内存地址时,将发生库冲突。如果两个线程使用相同的存储体,则它们将被序列化,这意味着一个线程将在另一个线程之后执行,而不是两个线程都同时访问内存。     

要回复问题请先登录注册