2

我需要使用 SIMD/Intel SSE 优化我的矩阵乘法。给出的示例代码如下所示:

*x = (float*)memalign(16, size * sizeof(float));

但是,我使用的是 C++,[found that][1]而不是malloc(在执行 SIMD 之前),我应该使用new. 现在,我正在通过 SIMD/SSE 进一步优化,所以我需要对齐内存,所以问题是:我需要memalign/_aligned_malloc或者我的数组声明为

static float m1[SIZE][SIZE];

已经对齐了?(SIZE是一个整数)

4

1 回答 1

4

通常,它们不会是 16 字节对齐的,尽管 C++ 规范中没有任何内容可以阻止编译器在 16 字节边界上对齐这样的数组。根据您使用的编译器,通常有一种特定于编译器的方式来请求数组在 16 字节边界上对齐。例如,对于gcc,您将使用:

static float m1[SIZE][SIZE] __attribute__((aligned(16)));

或者,您可以使用平台上可用的posix_memalign()memalign()或其他对齐分配 API 来获取具有所需对齐的内存块。作为最坏的情况,您甚至可以使用标准分配内存malloc()operator new然后自己处理对齐调整。

于 2012-10-03T13:41:52.560 回答