【问题标题】:SSE: cast double** to _m128d**SSE:将 double** 转换为 _m128d**
【发布时间】:2013-01-21 19:16:25
【问题描述】:

将普通的 double* 转换为 _m128d* 非常简单易懂。 假设你有一个这样的数组:

double arr[8] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0};

然后_m128d 演示文稿看起来像这样:

_m128d m_arr[8] = { [1.0,2.0] , [3.0,4.0] , [5.0,6.0] , [7.0,8.0] };

因为总是存储 2 个值,如果你可以这么说的话(这就是我的想象)。 但是,如果我改用 3x3 矩阵,这些值将如何拆分???例如:

double mat[3][3] = { {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0} };

我试图将矩阵中的所有值相加,但并没有真正了解如何使用 SSE 有效地做到这一点,因此我需要了解如何处理矩阵 _m128d**。 有人知道吗?

【问题讨论】:

  • 二维数组不是双指针。
  • 是的没错,很迂腐。我希望这个问题无论如何都清楚
  • 哦,你知道的。很抱歉假设相反。
  • 如果我想知道的话,我会问一个关于矩阵和指针的问题。如果你不想为这个问题做出贡献,那就把你的冒犯态度留给自己吧。但我想你没有
  • 我不是故意冒犯的。老实说,我假设您认为二维数组与双指针兼容。现在我相信已经理解并回答了您的问题。

标签: c++ sse sse2


【解决方案1】:

问题是多维数组存储在一个连续的内存块中(C 标准保证这一点)。所以你可以使用一个简单的指针来引用它们:

double mat[3][3] = { {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0} };
double *ptr = (double *)mat;

然后你可以使用这个指针遍历这 9 个数字并取消引用它以获得一个双精度数,然后可以将其转换/转换为另一种类型。

【讨论】:

  • 谢谢,这其实很有用。
猜你喜欢
  • 2023-04-01
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2010-11-09
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多