gpt4 book ai didi

intel - 使用 SSE 指令进行 16 字节内存对齐

转载 作者:行者123 更新时间:2023-12-03 02:00:25 26 4
gpt4 key购买 nike

我正在尝试通过替换

来消除我的应用程序的 SSE 指令的未对齐加载和存储
_mm_loadu_ps()

_mm_load_ps()

并分配内存:

float *ptr = (float *) _mm_malloc(h*w*sizeof(float),16)

而不是:

float *ptr = (float *) malloc(h*w*sizeof(float))

但是当我使用以下方式打印指针地址时:

printf("%p\n", &ptr)

我得到输出:

0x2521d20
0x2521d28
0x2521d30
0x2521d38
0x2521d40
0x2521d48
...

即使我使用了 _mm_malloc 函数,这也不是 16 字节对齐的?当对 SSE 指令使用对齐的加载/存储操作时,我会产生段错误,因为数据不是 16 字节对齐的。

有什么想法为什么它没有正确对齐或有任何其他想法来解决这个问题吗?

提前致谢!

<小时/>

更新

使用

printf("%p\n",ptr)

解决了内存对齐的问题,数据确实正确对齐了。

但是,当尝试对此数据进行对齐加载/存储时,我仍然遇到段错误,我怀疑这是一个指针问题。

分配内存时:

contents* instance;
instance.values = (float *) _mm_malloc(h*w*sizeof(float),16);

我有一个结构:

typedef struct{
...
float** values;
...
}contents;

在代码中,我然后在另一个函数中执行,并使用指向作为参数传递的内容的指针:

__m128 tmp = _mm_load_ps(&contents.values);

你们看到我遗漏了什么吗?感谢迄今为止的所有帮助:)

最佳答案

更改:

printf("%p\n", &ptr)

至:

printf("%p\n", ptr)

需要 16 字节对齐的是 ptr 指向的内存,而不是实际的指针变量本身。

关于intel - 使用 SSE 指令进行 16 字节内存对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8487906/

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