Intel MKL 性能数据

intel_cyu 2008-03-31 11:08:28
加精
下面,我们提供一些常用的Intel MKL 函数的性能数据: 

1)通用矩阵计算(DGEMM )是一个广为使用的数学函数。 下图给出了Intel MKL 8.0 与ATLAS*的矩阵计算函数的性能数据。ATLAS* (Automatically Tuned Linear Algebra Software) 是比较流行的线性代数的计算函数库。它实现了绝大多数的BLAS 与LAPACK 的函数。ATLAS 的网站是: http://math-atlas.sourceforge.net/.*
Intel MKL 实现了多线程的优化。 在双核和多核处理器上,它能够为DGEMM函数带来2-5倍的性能提升。下图中,我们能够发现: 1)相比于ATLAS 函数库, Intel MKL 能够有明显性能提 2)Intel MKL BLAS 函数提供性能优越的多线程的支持



2) ScaLAPACK 是集群上求解线性方程的标准程序包。它是线性代数程序包(LAPACK)函数的一个子集。下图显示了对于不同问题与不同内存大小,在64 位英特尔至强处理器的 32 节点集群上, Intel MKL的性能. 图中数据表明:1)Intel MKL ScaLAPACK 性能明显超过 NETLIB ScaLAPACK。 2). 与使用 ATLAS* BLAS 与 NETLIB ScaLAPACK 代码相比,英特尔 MKL 的性能更为突出。



3). Intel MKL傅立叶变换函数已针对中等和大型问题进行高度优化。下面的图表将Intel MKL 的性能与广为使用的FFT计算函数FFTW的性能进行了比较。该图表主表明:1)Intel MKL提供优异的傅立叶变换的性能。2) 英特尔® MKL 为多处理器系统提供出色的可伸缩性。 3)在中等和大型转换方面,英特尔® MKL 比 FFTW 更出色。
1 维转换



2 维转换





优化注意事项


即使不是专门针对英特尔微处理器的优化,英特尔编译器也有可能无法为非英特尔微处理器实现相同程度的优化。这些优化包括 SSE2、SSE3 和SSSE3 指令集和其他优化。 英特尔不保证任何优化在非英特尔制造的微处理器上的可用性、功能或有效性。本产品中依赖于微处理器的优化旨在配合英特尔微处理器一起使用。不一定针对英特尔微架构的某些优化专为英特尔微处理器保留。请参见适用产品的“用户和参考指南”了解本注意事项中涵盖的特定指令集的更多相关信息。

注意事项修订版 #20110804

...全文
2212 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
memeng2003 2010-05-27
  • 打赏
  • 举报
回复
跪求 MKL FFT 多线程例子(好用的)

http://topic.csdn.net/u/20100527/15/bcdc740b-f3b7-4f04-ad55-d77039b366be.html

LZ帮帮忙。

看大侠应该是研究过这个的,能帮忙解决一下我的问题么?

先谢谢了

happylifeandwork 2010-01-11
  • 打赏
  • 举报
回复
其实 dgemm其中的kernel代码大部分都是汇编手写的。

如果想了解其中的kernel的话,直接看汇编代码就行了。

不过,如果对体系结构不熟悉的话,看得可能比较晕。

laxila 2008-09-30
  • 打赏
  • 举报
回复
顶一下,楼主没有功劳也有苦劳啊!呵呵,谢谢楼主了,。
majiajun_no_5 2008-09-30
  • 打赏
  • 举报
回复
获益匪浅
majiajun_no_2 2008-09-29
  • 打赏
  • 举报
回复
很好
majiajun_no_13 2008-09-28
  • 打赏
  • 举报
回复
快乐顶贴,快乐看贴,快乐学习
chriswyg 2008-09-26
  • 打赏
  • 举报
回复
至少atlas代码是公开的,可以从中学到东西。
mkl东西再好也学不到本事啊
linglong117 2008-05-13
  • 打赏
  • 举报
回复
呵呵,不是很明白
intel_cyu 2008-04-27
  • 打赏
  • 举报
回复
刚才拜读的 “xin_200” 的“个人空间”,“xin_200”兄是优化的高手。:-)
的确,比起原有,Net LIB 的函数,GOTO、ATLAS性能提高不少。

fortran2003/xin_200, 有个提议:
如果,在使用中,如果发现一些MKL的性能的问题,欢迎在论坛上贴出来? 发现问题,才能有提高。。。
fortran2003 2008-04-22
  • 打赏
  • 举报
回复
intel对mkl做了多少优化我不得而知,我不是intel工作人员。但是我相信,优化主要来自:
1)intel 自家编译器的高效率;
2)依据intel的那两本书(优化手册、多处理器编程技术)中的原理,对lapack等包的算法对处理器优化,尤其是算法要对sse指令有利。

在基本算法层面进行的优化是很少的,那不是intel的专长。

楼上的那句“不正常”正好印证了我的观点。你还会看到更多的“不正常”。intel的新simd指令集AVX出来后,mkl的速度一些情形下可能还要翻倍。
xin_200 2008-04-21
  • 打赏
  • 举报
回复
不是很同意3楼的说法。基本算法与高效实现是两回事,尤其是BLAS的高效实现。不断有BLAS的文章发表于顶级的科学计算期刊,就基本算法,它们是没有区别的,只是在实现上的一些细节变化,往往10%的性能提升即可说明这些变化的合理性。
MKL有段时间落后于ATLAS,现在超过ATLAS也属正常,但超过这么多有些不正常。可能是ATLAS在支持多线程上有个BUG,以ATLAS的积累和升级速度,赶上也只是个时间问题。
目前一般认为GOTO BLAS是最高效的。GOTO对BLAS的感觉确实超越了MKL的开发人员。
fortran2003 2008-04-15
  • 打赏
  • 举报
回复
对处理器的优化是intel的强项。包括多核优化,对simd指令优化,提高cache命中率和分支预测正确率。intel确有可能对lapack等算法进行优化,以提高指令级并行,并引入线程级并行。
intel_cyu 2008-04-14
  • 打赏
  • 举报
回复
3楼的同学实际提出一个很好的问题。除了利用Compiler 外,Intel MKL 还进行了哪些优化的工作, 每类函数的优化方法可能不尽相同,这里,列出一些主要的考虑因素:

1) 并行化: Intel MKL 优化中尽量并行化函数的执行,对于多核的处理器,并行化尤为重要。比如说,Intel MKL对BLAS3 与LAPACK中的一些函数进行的多线程优化,相比于单线程的程序,并行化的代码会有明显的性能提高, 从上面的一些性能数据,我们也能看到这些区别。另外的一个例子如BLAS2 的 xGEMV函数,以前,我们认为 xGEMV 函数是内存访问密集的函数,性能的瓶颈在于对内存数据的访问,因此,多线程该函数,不一定会带来太多的性能提升,但是在很多的应用中,该函数调用前,数据很肯被访问过,它们已经存在于Cache 中。 这种情况,多线程执行gemv函数的时候,能够帮助提高程序的性能,Intel MKL正考虑将这些函数并行执行。

2) CPU 架构相关的优化: 对于一些关键的核心的函数, 我们考虑CPU 架构相关的优化,通过一些编写一些汇编代码,能够让它们在不同的处理器上,有更快的执行速度。举例来说,通常加、乘等数学运算在计算单元执行的时候会有一些延迟,为了能够让CPU的流水线不会停滞(减少这种延迟的影响),通常在得到计算结果前,会加入一些其他的操作。但是这些做法,对CPU的寄存器的使用带来一些压力。因此我们需要综合考虑这些问题。通常,Compiler 能够帮助考虑这些因素,但是,编写良好的汇编代码能够进一步提高程序的效率。

3)数据结的构优化:在计算过程中,我们希望数据尽量是在Cache中,而不是在使用的数据时,仍然需要等待内存中的数据,这对函数的性能至关重要。如果,对2D的FFT 变换, 通常我们不会对所有的2D的数据进变换,我们只是选择一2D数据的部分行,这样可以使得计算的中间结果能够保持在Cache中。对于这种优化,并不能够对所有的函数很容易做到,比如,对一些稀疏矩阵的问题,数据是通过索引来存放的,这方面优化可能有些困难。MKL函数会尽量去寻找这方面的机会。

4)算法的优化:相比其他的优化,算法最为重要。 但是,在数据计算中,有关各种算法的研究非常从分,因此, MKL函数,这方面能够提高的空间较少。但是,这通常是也是我们尽量去提高的一个重要方面。 比如,对于矩阵与矩阵的运算,也有一些算法能够进一步减少计算量,MKL的10.0中,包括一个新的ZGEMM3M的函数,相比于DGEMM函数,有更快的技术速度。

5)自动优化代码生成:优化的一个热点是自动优化的代码的生产, 比如的一个典型的例子是spiral (http://www.spiral.net/ ) Intel MKL 也开发一些这样的工具来生成优化代码。

当然,这里的概括不尽全面。我们在实际优化的时候,具体的方法更不止如此。抛砖引玉,大家一起来拍砖!
fortran2003 2008-04-05
  • 打赏
  • 举报
回复
mkl其实就是剽窃lapack,atlas,scalapack,然后使用自家的编译器优化编译。

icc,ifort的高效率大家都知道,包含了对sse优化的intrinsics,利用这些,很容易让mkl“很快”。

我想,intel大概不大可能有重新创造矩阵算法的能力和时间。

楼主完全是在炒作。不老实。
wangfeng7838 2008-04-04
  • 打赏
  • 举报
回复
看完了,虽然没看明白,不过,还是支持一下
liupinghaiyan 2008-04-03
  • 打赏
  • 举报
回复
看完了,虽然没看明白,不过,还是支持一下.

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧