我需要使用 SIMD/Intel SSE 来优化矩阵乘法。给出的示例代码如下所示:
*x = (float*)memalign(16, size * sizeof(float));
Run Code Online (Sandbox Code Playgroud)
但是,我使用的是 C++,而[found that][1]不是malloc(在执行 SIMD 之前),我应该使用new. 现在,我通过 SIMD/SSE 进一步优化,所以我需要对齐内存,所以问题是:我是否需要memalign/_aligned_malloc或者我的数组是否声明为
static float m1[SIZE][SIZE];
Run Code Online (Sandbox Code Playgroud)
已经对齐了吗?(SIZE是一个整数)
通常,它们不会是 16 字节对齐的,尽管 C++ 规范中没有任何内容可以阻止编译器在 16 字节边界上对齐此类数组。根据您使用的编译器,通常有一种特定于编译器的方法来请求数组在 16 字节边界上对齐。例如,对于gcc,您可以使用:
static float m1[SIZE][SIZE] __attribute__((aligned(16)));
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用posix_memalign()、memalign()或平台上可用的其他对齐分配 API 来获取具有所需对齐方式的内存块。最坏的情况是,您甚至可以使用标准malloc()或方法分配内存operator new,然后自己处理对齐调整。
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |