
现在numpy 1.8已发布,根据文档,所有ufuncs都应使用SSE2,我想再次检查一下Seberg关于SSE2的评论是否有效。
为了执行该测试,创建了新的python 2.7安装-在
icc运行Ubuntu的AMD opteron内核上使用标准选项编译了numpy 1.7和1.8
。
这是在1.8升级之前和之后进行的测试:
import numpy as npimport timeitarr_1D=np.arange(5000,dtype=np.double)arr_2D=np.arange(500**2,dtype=np.double).reshape(500,500)arr_3D=np.arange(500**3,dtype=np.double).reshape(500,500,500)print 'Summation test:'print timeit.timeit('np.sum(arr_3D)','import numpy as np; from __main__ import arr_1D, arr_2D, arr_3D',number=5)/5print timeit.timeit('np.einsum("ijk->", arr_3D)','import numpy as np; from __main__ import arr_1D, arr_2D, arr_3D',number=5)/5print '----------------------n'print 'Power test:'print timeit.timeit('arr_3D*arr_3D*arr_3D','import numpy as np; from __main__ import arr_1D, arr_2D, arr_3D',number=5)/5print timeit.timeit('np.einsum("ijk,ijk,ijk->ijk", arr_3D, arr_3D, arr_3D)','import numpy as np; from __main__ import arr_1D, arr_2D, arr_3D',number=5)/5print '----------------------n'print 'Outer test:'print timeit.timeit('np.outer(arr_1D, arr_1D)','import numpy as np; from __main__ import arr_1D, arr_2D, arr_3D',number=5)/5print timeit.timeit('np.einsum("i,k->ik", arr_1D, arr_1D)','import numpy as np; from __main__ import arr_1D, arr_2D, arr_3D',number=5)/5print '----------------------n'print 'Einsum test:'print timeit.timeit('np.sum(arr_2D*arr_3D)','import numpy as np; from __main__ import arr_1D, arr_2D, arr_3D',number=5)/5print timeit.timeit('np.einsum("ij,oij->", arr_2D, arr_3D)','import numpy as np; from __main__ import arr_1D, arr_2D, arr_3D',number=5)/5print '----------------------n'Numpy 1.7.1:
Summation test:0.1729885101320.0934836149216----------------------Power test:1.935246896740.839519000053----------------------Outer test:0.1303808212280.121401786804----------------------Einsum test:0.9790524959560.126066613197
numpy 1.8:
Summation test:0.1165515899660.0920487880707----------------------Power test:1.236836194990.815982818604----------------------Outer test:0.1318081760410.127472200394----------------------Einsum test:0.7817500114440.129271841049
我认为这是结论性的,因为SSE在时序差异中起着很大的作用,应该注意的是,仅重复这些测试时序就只有〜0.003s。其余的差异应包含在该问题的其他答案中。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)