【发布时间】:2018-08-03 01:06:10
【问题描述】:
函数mkl_malloc 类似于malloc,但有一个额外的alignment 参数。这是原型:
void* mkl_malloc (size_t alloc_size, int alignment);
我注意到alignment 的不同值的不同表现。除了反复试验之外,是否有规范或记录有条不紊的方法来确定alignment 的最佳价值?即正在使用的处理器、正在调用的函数、正在执行的操作等。
这个问题广泛适用于任何使用 MKL 的人,所以我很惊讶它不在参考手册中。
更新:我已尝试使用 mkl_sparse_spmm,但没有注意到将对齐设置为 2 到 1024 字节的幂的性能有显着差异,之后性能趋于下降。我使用的是英特尔至强 E5-2683。
【问题讨论】:
-
这个回答对上一个问题有帮助吗? stackoverflow.com/a/6705570/1212725
-
谢谢,但不是。我想知道对于给定的操作和硬件,对齐的什么值会给我带来最佳性能。
-
直觉上,对齐似乎应该与处理器的字长相匹配。您看到了什么结果?
-
谢谢!我发现 2 到 1024 的幂给出了非常相似的性能......但我一直在尝试受内存访问限制的稀疏操作。我将再次尝试密集操作。
-
一般情况下可以使用
_Alignof(max_align_t)。但是,这实际上取决于数据的类型。在当前的 x86-64 上,_Alignof(max_align_t) == 16,但 AVX512 向量需要64,而 AVX2 向量需要32。
标签: c linear-algebra memory-alignment blas intel-mkl