我正在学习使用Intel mkl编写程序,在示例代码中使用了“ mkl_malloc”和“ mkl_free”,并且尝试将它们替换为“ malloc”和“ free”,但该程序仍然有效。那么,我需要使用mkl的版本吗?
您严格不需要使用MKL记忆功能。如果这样做,您的代码将正确运行。但是,为了获得最佳性能和可重复的结果,应为MKL库提供在64字节边界上对齐的数据,并且MKL内存功能是实现此目的的便捷方法。
为了提高调用Intel MKL的应用程序的性能,请在64字节边界上对齐阵列,并确保阵列的前导尺寸可以被64整除。
并提及可重复性:
英特尔®MKL获得良好性能的方法之一是使用新的指令,这些指令可用于后续几代英特尔®处理器。这些指令中的某些指令通过一次对多个浮点数执行相同的浮点运算来提高计算效率。但是,其中一些指令的加载方式取决于数据在内存中的放置方式。如果在程序的一次运行中,数据恰好沿16字节边界对齐,则将数组中的前2个双精度数字分组在一起,而在下一次运行中,如果数组从该内存中偏移了边界,然后将第二和第三双精度数字分组在一起。在所有设置保持相同的情况下,连续两次运行同一程序时,这种顺序上的差异会导致不同的结果。
未对齐数据(如果有)之间的差异可能取决于您使用的特定CPU,我相信对最新处理器的影响不如前几代产品大。即使这样,如果可能的话,对齐数据可能仍然是一个好主意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句