gpt4 book ai didi

c++ - 初始化为 `float[10][10]` 的数组是否已针对 SIMD/SSE 进行内存对齐?

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:19 31 4
gpt4 key购买 nike

我需要使用 SIMD/英特尔 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 是一个整数)

最佳答案

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

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

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

关于c++ - 初始化为 `float[10][10]` 的数组是否已针对 SIMD/SSE 进行内存对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12709631/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com