我需要对 Intel_mkl 程序使用 mkl_malloc 吗?

clo*_*ose 4 intel-mkl

我正在学习用Intel mkl编写程序,在示例代码中使用了'mkl_malloc'和'mkl_free',我尝试用'malloc'和'free'替换它们,程序仍然有效。那么,我需要使用 mkl 的版本吗?

rha*_*oto 7

您并不严格需要使用 MKL 内存函数。如果您这样做,您的代码将不会出现错误。但是,为了获得最佳性能和可重复的结果,您应该为 MKL 库提供在 64 字节边界上对齐的数据,并且 MKL 内存函数是执行此操作的便捷方法。

\n\n

这是性能参考

\n\n
\n

为了提高调用英特尔 MKL 的应用程序的性能,请在 64 字节边界上对齐数组,并确保数组的前导维度可被 64 整除。

\n
\n\n

以及可重复性的参考

\n\n
\n

英特尔 MKL 获得良好性能的方法之一是使用连续几代英特尔\xc2\xae\n 处理器提供的新指令。其中一些指令通过同时对多个浮点数执行相同的浮点运算来提高计算效率。然而,其中一些指令的加载方式取决于数据在内存中的位置。如果在程序的一次运行中,数据恰好沿 16 字节边界对齐,则数组中的前 2 个双精度数字将被分组在一起,而在下一次运行中,如果数组相对于该内存边界的偏移量,则第二个和第三个双精度数字被分组在一起。当连续运行同一程序两次并且所有设置保持相同时,这种顺序差异可能会导致不同的结果。

\n
\n\n

未对齐数据(如果有)的差异可能取决于您所使用的特定 CPU,并且我相信对最新处理器的影响不如前几代处理器那么大。即便如此,如果可能的话,对齐数据可能仍然是一个好主意。

\n