【发布时间】:2014-01-10 15:42:13
【问题描述】:
warp 中的线程在物理上并行运行,因此如果其中一个(称为线程 X)启动原子操作,其他线程会做什么?等待?这是否意味着,当线程 X 被推送到原子队列时,所有线程都将等待,获取访问权限(互斥锁)并使用受该互斥锁保护的内存做一些事情,然后再实现互斥锁?
有没有办法让其他线程做一些工作,比如读取一些内存,所以原子操作会隐藏它的延迟?我的意思是,有 15 个空闲线程……我猜不太好。 Atomic 真的很慢,是吗?我怎样才能加速它?有什么模式可以使用它吗?
共享内存的原子操作是否会锁定银行或整个内存?
例如(没有互斥体),有__shared__ float smem[256];
- 线程 1 运行
atomicAdd(smem, 1); - 线程 2 运行
atomicAdd(smem + 1, 1);
这些线程适用于不同的银行,但通常是共享内存。他们是并行运行还是排队?如果 Thread1 和 Thread2 来自单独的经纱或一般经纱,这个例子有什么不同吗?
【问题讨论】:
标签: c++ c performance cuda atomic