【发布时间】:2017-07-21 04:24:44
【问题描述】:
在我的程序中,我想分配 32 byte 对齐的内存来使用 SSE/AVX。我要分配的金额大约是2000*1300*17*17*4(large data set)。我尝试使用函数_aligned_malloc() 和_mm_malloc,但对于较大的大小,它不会分配内存并导致访问冲突异常。如果分配的数量很小,比如512*320*4*17*17(small data set),那么代码就可以正常工作。
这些函数在为大数据集分配完成时返回一个空指针。但在输入数据量较小时工作正常。同样在这里,如果我只是使用new 使用未对齐的内存分配,那么代码也适用于大型数据集。
最后,有人能告诉我在 AVX 中使用对齐内存是否有任何显着的性能提升。
编辑:根据post 进行一些研究后,它说new 从空闲存储分配内存,malloc() 从堆分配内存。在这里,我超出了最大堆大小为_aligned_malloc() return errno 12 这意味着ENOMEM 在这种情况下有人可以告诉我解决这个问题。
【问题讨论】:
-
不到 10MB。您的系统中有多少(虚拟?)内存?系统能否保证它可以分配一块连续的内存(这可能是您遇到的问题)?
-
哦,你做检查分配函数是否返回空指针?
-
我有 12GB 内存。对不起,我需要超过 10MB。它不是2000 * 1300。它的 2000*1300*17*17。如果我使用 new 它工作正常并且没有问题。然而,内存使用量在 11.9 左右达到峰值。在高级设置中显示“所有驱动器的总页面文件大小为 15247MB”,这是系统管理的仅驱动器 C
-
是的,它返回一个空指针。谢谢你的提示。我会修改问题。
-
SSE/AVX 需要对齐 32?你能把它放在问题中吗?
标签: c++ memory memory-alignment avx