全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1291 1
2016-01-30
打算用IML矩阵运算的方式替代掉base编程的方法,将做一系列的实验,比较两种方法的效率。
1、矩阵可以节约更多的代码
2、矩阵代表了一种更高维度的思考方法

运算数据ex:a={0 0 -2.5  4 0  3  0.5  8 -1...};

****************************base方法*************************************

data ss;

set test;

do i=1 to 10000000;

if col1 > 0 then p+1;

else if col1 < 0 then n+1;

end;

run;

循环1000万次

***********************IML方法******************************

proc iml;

a={0 -1 1 5 2 4 0 -1 2 6 9 -1 };

do i=1 to 10000000;

b=a>0;

c=a<0;

b_res=b[,+];

c_res=c[,+];

end;


quit;

****************************************************************************************

比较:代码的字数上差不多,但执行效率base的要高2个数量级。

a为3元素  IML: 4.69s Base:0.04s

a为6元素  IML:4.75s Base:0.06s

a为9元素  IML:4.66s Base:0.06s

a为12元素IML:4.69s Base:0.06s

a为18元素IML:4.85s Base:0.06s

a为45元素IML:5.91s Base 0.04s

(IML:600ns/次  Base:4ns/次)

结果:Base比IML快2个数量级

原因分析:

1、IML可能有许多预载项

2、IML的操作全部是“实”的,无论是比较(a>0)或者是累加b[,+],都是对所有元素进行了比较以及写入(最费时)。

3、Base使用逻辑判断,理论上比较的次数比IML要少一半(roughly),赋值的次数少一半。

结论:

1、IML的操作都是“实”操作,在进行大规模计算的时候要特别注意(100倍的时间代价)

2、是否有更好的IML语句?(或者更好的矩阵运算工具)

3、在关键代码上,IML比Base少一半,是存在很大的简洁性的。在构建更复杂的程序(算法)时,

更精简的关键逻辑意味着更少的错误和更高复杂功能的实现。


下一步:

继续比较其他方面的性能差异。


*************关键代码比较********************************************************

IML:

b=a>0;

c=a<0;

b =b[,+];


c =c[,+];

Base:

if col1 > 0 then p+1;


else if col1 < 0 then n+1;




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-1-30 23:33:07
我的cpu是4G hz,也就是0.25ns一个周期,4ns用了16个时钟周期。(8核的,所以指令可能被并行处理,不考虑分支)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群