c++ - 如何将 4 个浮点数的 ps 向量转换为 4 个双精度数并存储到 pd 数组?
问题描述
是否可以使用SSE2
/SIMD
将__m128
值 (4 float
) 存储到 的数组中double
?
我需要从这段代码切换:
double *pC = c[voiceIndex];
__m128d v_result;
_mm_store_pd(pC, v_result);
对此:
double *pC = c[voiceIndex];
__m128 v_result_float;
_mm_store_ps(pC, v_result_float);
除了不做 4x 32 位的 128 位存储float
,我需要将它们转换为double
.
我无法更改“源”pC
数组(即double
)
解决方案
本质上,这是与您之前的问题相反的问题。在这种情况下,您需要在转换后半部分之前将高位字movhlps
( ) 转换为低位字:_mm_movelh_ps
void foo(double* dest, __m128 input)
{
// assuming dest is nicely aligned
_mm_store_pd(dest, _mm_cvtps_pd(input));
_mm_store_pd(dest+2, _mm_cvtps_pd(_mm_movehl_ps(input, input)));
}
推荐阅读
- sql - 从一个表创建到查找表的多个连接
- python - 解析文件时获取检查按钮值
- python - python:根据输入变量生成段落
- ruby-on-rails - 谁能帮我解决 rails mongoid-history gem 问题
- c# - Microsoft.ApplicationInsights.Channel.InMemoryTransmitter.Runner()
- qt - 如何处理子菜单的 onClick 或 onTriggered 事件?
- laravel - 响应标头中的 Cookie 未在浏览器中显示
- highcharts - 没有滚动导航器跳转的 Highstock
- tensorflow - 在颤振中运行 tensorflow-lite 的最佳选择是什么?
- javascript - 如何通过数组中的字符串值交换位置?