我需要使用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
是一个int)
答案 0 :(得分:4)
通常,它们不会是16字节对齐的,尽管C ++规范中没有任何内容可以阻止编译器在16字节边界上对齐这样的数组。根据您使用的编译器,通常有一种特定于编译器的方法来请求数组在16字节边界上对齐。例如,对于gcc
,您可以使用:
static float m1[SIZE][SIZE] __attribute__((aligned(16)));
或者,您可以使用平台上可用的posix_memalign()
,memalign()
或其他对齐分配API来获取具有所需对齐方式的内存块。在最坏的情况下,您甚至可以使用标准malloc()
或operator new
分配内存,然后自己处理对齐调整。