我正在学习用Intel mkl编写程序,在示例代码'mkl_malloc'和'mkl_free'中使用,我试图用'malloc'和'free'替换它们,程序仍然有效。那么,我需要使用mkl的版本吗?
答案 0 :(得分:3)
您没有严格需要来使用MKL记忆功能。如果您这样做,您的代码将无错运行。但是,为了获得最佳性能和可重现的结果,应为MKL库提供64字节边界对齐的数据,并且MKL内存函数是一种方便的方法。
要提高调用英特尔MKL的应用程序的性能,请对齐 您的数组在64字节边界上并确保领先 数组的维数可以被64整除。
和reference to reproducibility:
英特尔MKL获得良好性能的方法之一是使用新的 连续几代英特尔®提供的说明 处理器。其中一些指令使计算更有效 通过对多个浮动执行相同的浮点运算 点数一下子。加载其中一些指令的方式 但是取决于数据在内存中的位置。如果在一次运行中 在程序中,数据恰好沿着16字节对齐 边界,然后数组中的前2个双精度数 如果数组是偏移的,则在下一次运行时将它们组合在一起 从那个内存边界,然后是第二和第三双精度 数字组合在一起。这种顺序的差异可能会导致 两次运行相同程序时的结果不同 连续所有设置保持不变。
与未对齐数据(如果有)的差异可能取决于您使用的特定CPU,我相信对于最近的处理器而言,影响并不像前几代那样大。即便如此,如果可能的话,最好还是调整数据。