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进制表示), 我这个线程的值是多少, 具体操作的数(操作的方式以及在函数名体现)
相关推荐
hsjiasb8 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
丰锋ff9 小时前
3.1 Qt事件之事件处理器
开发语言·qt
多弗朗皮卡丘9 小时前
C语言梦开始的地方7:函数
c语言·开发语言
月华路10 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding10 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
m0_3807438710 小时前
从零调用 Claude 教程
开发语言·python·node.js
起床学FPGA11 小时前
AI回答问题之后,会自动跳到最下面的问题
开发语言·javascript·ecmascript
x_x-F12 小时前
网络数据从网卡到用户态:一场基于内存所有权转移的接力赛
开发语言·网络·php
名字还没想好☜12 小时前
Java 线上内存泄漏排查实战:jmap 导堆、MAT 找 GC Roots 与四类常见泄漏
java·开发语言·jvm·内存泄漏
码匠许师傅12 小时前
【C++ 面试真题】聊聊 C++ 的多继承与虚继承
开发语言·c++·面试