Warp shuffle函数

Warp shuffle 函数在 warp 内未退出的线程之间交换一个值,无需使用共享内存。

其实就是, 在warp内部32个线程中, 当前线程可以通过shuffle指令去获得另一个线程的值, 且这种操作无需共享内存, 直接获得, 在warp内使用很方便, 获取的方式有四种:

  1. 参与的线程, 统一拿某个值, 比如所以线程的值都拿0号线程的值, 也就是广播, 这就是**__shfl_sync(0xFFFFFFFF, val, 0)**指令
  2. 参与的线程, 统一往下(线程数小的方向)拿相隔2个位置的值, 往小方向拿值, 那就是拿自己相隔2个位置的后面的值, 这就是**__shfl_down_sync(0xFFFFFFFF, val, 2)**
  3. 参与的线程, 统一往上(线程数大的方向)拿相隔2个位置的值, 往大方向拿值, 那就是拿自己相隔2个位置的前面的值, __shfl_up_sync(0xFFFFFFFF, val, 2)
  4. 参与的线程, 这种方式特殊, 不再是加减这种运算, 而是参与的线程通过异或操作去得到要拿线程的位置, 比如**__shfl_xor_sync(0xFFFFFFFF, val, 1)**, 每个线程的索引号和1进行异或拿值, 比如0xor1=1, 1xor1=0, 2(10)xor1=3, 3(11)xor1=2, 4(100)xor1=5, 5(101)xor1=4, 规律就是参与的32个线程, 两两互相拿值, 异或就很神奇了, 也有点难,
  5. 这四个函数的三个参数的意思分别是: 参与的线程数量(用16进制表示), 我这个线程的值是多少, 具体操作的数(操作的方式以及在函数名体现)
相关推荐
小羊没烦恼!6 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读6 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车6 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁6 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超6 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int6 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
CoderYanger6 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
伞伞悦读6 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json
CCCCCCCCharlie6 天前
Linux进程控制四大核心操作
linux·开发语言
Brilliantwxx6 天前
【STM32】 SPI Flash 驱动开发实战:阻塞模式驱动 W25Q64(含工程代码)
开发语言·stm32·单片机·嵌入式硬件