1

将普通的 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**。有人知道吗?

4

1 回答 1

2

问题是多维数组存储在一个连续的内存块中(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 个数字并取消引用它以获得一个双精度数,然后可以将其转换/转换为另一种类型。

于 2013-01-21T19:26:11.460 回答