gpt4 book ai didi

c++ - SSE:将__m128和__m128i转换为两个__m128d

转载 作者:太空狗 更新时间:2023-10-29 20:31:23 24 4
gpt4 key购买 nike

两个相关的问题。

这就是我的代码需要处理大量数据的情况。它在内循环中完成,性能很重要。

  1. 将 __int32 数组转换为 double (或将 __m128i 转换为两个 __m128d)。
  2. 将 float 数组转换为 double (或将 __m128 转换为两个 __m128d)。

基本上,我需要具有以下签名的函数:

void convert_int_to_double(__int32 const * input, double * output);
void convert_float_to_double(float const * input, double * output);

输入输出指针对齐,元素个数为4的倍数,主要问题是如何将__m128快速解包为两个__m128d。

最佳答案

内在函数 _mm_cvtepi32_pd_mm_cvtps_pd将值转换为 double 值。

这应该是循环:

__m128i* base_addr = ...;
for( int i = 0; i < cnt; ++i )
{
__m128i epi32 = _mm_load_si128( base_addr + i );
__m128d v0 = _mm_cvtepi32_pd( epi32 );
epi32 = _mm_srli_si128( epi32, 8 );
__m128d v1 = _mm_cvtepi32_pd( epi32 );
....
}

关于c++ - SSE:将__m128和__m128i转换为两个__m128d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4430839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com