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

如何用C++向量内联函数从256位双精度向量提取首个double值?

从256位双精度向量提取首个double值的简洁方法

针对包含4个double的256位AVX向量(__m256d类型),有两种简洁的提取首个元素的方式:

方法一:专用标量转换指令

_mm256_cvtsd_f64是AVX提供的专门用于从256位双精度向量中提取低64位元素(即第一个double)的内联函数,效率最优:

#include <immintrin.h>

double extract_first(__m256d vec) {
    return _mm256_cvtsd_f64(vec);
}

方法二:按索引提取

如果需要提取任意位置的元素,可使用_mm256_extract_pd并指定索引0,编译器会自动优化为高效指令:

#include <immintrin.h>

double extract_first(__m256d vec) {
    return _mm256_extract_pd(vec, 0);
}

编译注意事项

编译时需开启对应指令集支持:

  • GCC/Clang:添加编译选项 -mavx
  • MSVC:添加编译选项 /arch:AVX

实验性C标准方法(C20及以上)

若使用C++20的实验性SIMD库,可直接通过下标访问首个元素,代码更直观:

#include <experimental/simd>
namespace stdx = std::experimental;

double extract_first(stdx::native_simd<double> vec) {
    return vec[0];
}

注:该特性目前属于实验阶段,不同编译器的支持程度有所差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:37:09