行列積を例にAAutoの運転速度を見る
AAutoに接触したばかりで、行列積でAAutoの運転速度テストをします.注意システム構成によっては、実行結果に差があります.コードをつけましょう.
AAutoコード:
実行時間:12569ミリ秒
(Releaseコンパイル)実行時間:234ミリ秒
MATLABコード:
コマンドウィンドウで実行:
>> A=ones(400);tic,B=matmul(A);toc Elapsed time is 0.904675 seconds.
メモ:システム構成WinXP SP 3、intel core 2 CPU Quad Q 8300 2.50 GHz、メモリキングストン2本の計4 GB.
AAutoコード:
import time.performance
function matmul(A,n){
B={}
for(i=1;n)
for(j=1;n)
{
v=0;
for(k=1;n)
v=v+A[i+n*(k-1)]*A[k+n*(j-1)]
B[i+n*(j-1)]=v
}
return B
}
io.open()
n=400
A={}
for(i=1;n)
for(j=1;n)
A[i+n*(j-1)]=1;
tk=time.performance.tick()
B=matmul(A,n)
io.print(n++" "++time.performance.tick()-tk++" ")
execute("pause")
io.close()
実行時間:12569ミリ秒
#include<iostream>
#include<ctime>
using namespace std;
void matmul(double *A,int n,double *B)
{
double v(0);
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
{
v=0;
for(int k=0;k<n;++k)
v+=A[i+n*k]*A[k+n*j];
B[i+n*j]=v;
}
}
int main()
{
int n=400;
double *A=new double[n*n];
double *B=new double[n*n];
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
A[i+n*j]=1.0;
clock_t tk=clock();
matmul(A,n,B);
cout<<n<<" "<<clock()-tk<<" "<<endl;
delete[] A;
delete[] B;
}
(Releaseコンパイル)実行時間:234ミリ秒
MATLABコード:
function B=matmul(A)
n=size(A,1);
B=zeros(n);
for i=1:n
for j=1:n
v=0;
for k=1:n
v=v+A(i,k)*A(k,j);
end
B(i,j)=v;
end
end
コマンドウィンドウで実行:
>> A=ones(400);tic,B=matmul(A);toc Elapsed time is 0.904675 seconds.
メモ:システム構成WinXP SP 3、intel core 2 CPU Quad Q 8300 2.50 GHz、メモリキングストン2本の計4 GB.