ffs()之类的函数,在进行某些数据结构上的插入之类的操作的时候, 快速判断warp整体需要多少个空间, 而每个具体的warp内部的线程又在什么位置上需要操作.这种非常方便.再例如说, 像是昨天的章节中...,所提到的快速聚合原子操作(1个block或者warp整体对同样的地址上进行原子操作),NV曾经推荐过的手工操作, 现在变成编译器自动展开进行了,也是利用了这点.先选出当前有效的线程(__activemask..., 这个还没说道), __popc统计全部需要进行的原子操作数量,执行1次总体原子操作, 将原始值传播回来(shuffle), 然后继续大家上__ffs之类的确定自己的最终模拟原子操作后的位置.
(2)...完全不影响你正常在GPU软件开发工作上班.但是有了, 你可以, 例如减少一些加班.
需要补充的事:(1)硬件实际上(5.X/6.X/7.X)总是将这些固定的规约操作和按位统计一体完成的....相比N卡, 等于0代价.但是很遗憾的是, 都7年过去了.至今AMD没有将它们导出到OpenCL C中.所以你依然只能看, 不能用.所以选择N卡是一个明智的选择.