You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AVX2指令获取非零32位整数通道对应的8位掩码

AVX2环境下最高效实现方案

该需求可通过2条核心AVX2指令完成,完全兼容英特尔、AMD全系列支持AVX2的处理器,是当前理论最优的实现:

实现逻辑

  • 先对8个32位整数通道逐位做大于0的比较,符合条件的通道会被标记为全1(0xFFFFFFFF),不符合的标记为全0(0x00000000)
  • 直接提取每个32位通道的最高位,拼接为8位整数掩码

代码实现(C语言内置函数版本)

#include <immintrin.h>
#include <stdint.h>

uint8_t get_nonzero_i32_mask(__m256i input_vec) {
    const __m256i zero_vec = _mm256_setzero_si256();
    // 逐32位通道比较:input_vec[i] > 0时对应通道为全1,否则为全0
    const __m256i cmp_result = _mm256_cmpgt_epi32(input_vec, zero_vec);
    // 类型cast无任何指令开销,提取每个32位通道最高位拼成8位掩码
    const int raw_mask = _mm256_movemask_ps(_mm256_castsi256_ps(cmp_result));
    /* 
    如果你需要的位序与示例一致(首个通道对应掩码最高位),
    取消下一行注释即可,编译器会自动生成单条位反转指令
    */
    // return __builtin_bitreverse8((uint8_t)raw_mask);
    return (uint8_t)raw_mask;
}

兼容性与性能说明

  • 用到的_mm256_cmpgt_epi32、_mm256_movemask_ps均为AVX2规范强制要求的指令,英特尔Haswell及更新架构、AMD Excavator及更新架构100%支持
  • 整个实现仅需2条实际执行的指令,现代处理器上延迟不超过4个周期,吞吐量可达每周期执行1次以上

内容的提问来源于stack exchange,提问作者drip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:06:03