不同工具下的矩阵乘法速度测试

      今天花了一些时间将基于以上几种工具(cuda&arrayfire&matlab)的矩阵乘法的速度进行了测试比较,验证了一些想法吧。

首先是c(CPU)的乘法测试:写的有点繁琐,后面在cuda程序中进行了综合

C.matrix.cpp

void Matrix_print(double **a,long nl, long nh)
/*
矩阵的输出
*/
{
	int i,j;
	for(i=1;i<=nl;i++)
	{
		for(j=1;j<=nh;j++)
		{
			
				cout<<a[i][j]<<",";       
		}
		cout<<endl;
	}
}

double **Matrix(long nrl,long nrh,long ncl,long nch)
/*
分配一个矩阵 m[nrl..nrh][ncl..nch]
*/
{
	long i,nrow=nrh-nrl+1,ncol=nch-ncl+1;
	double **m;

	m=(double **)malloc((size_t)((nrow)*sizeof(double *))); //分配row个行指计
	if(!m) nrerror("allocation matrix row failure!");
	m-=nrl;

	m[nrl]=(double *)malloc((size_t)((nrow*ncol)*sizeof(double))); //分配row*col个内存空间
    if(!m[nrl]) nrerror("allocation matrix col failure!");
	m[nrl]-=ncl;

	for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;
	return m;
}

void CMatrix_multiply(complex **a,int row1,int col1,complex **b,int row2,int col2,complex **c)
/*
复数矩阵乘法
 c=a x b
*/
{
<span style="white-space:pre">	</span>int i,j,k;


<span style="white-space:pre">	</span>if(col1!=row2) nrerror("第一个矩阵的列数不等于第二个矩阵的行数,不能相乘!");
<span style="white-space:pre">	</span>for(i=1;i<=row1;i++)
<span style="white-space:pre">		</span>for(j=1;j<=col2;j++)
<span style="white-space:pre">		</span>{
             c[i][j].real=0;
<span style="white-space:pre">			</span> c[i][j].imag=0;
             for(k=1; k<=col1;k++) 
<span style="white-space:pre">			</span> {
<span style="white-space:pre">				</span> c[i][j]=Cadd(c[i][j],Cmultiply(a[i][k],b[k][j]));
<span style="white-space:pre">			</span> }
<span style="white-space:pre">		</span>}
}
</pre><pre code_snippet_id="1721460" snippet_file_name="blog_20160619_3_9040794" name="code" class="cpp">#include "stdio.h"
#include "stdlib.h"
#include<vector>
#include<time.h>

void main()
{
	int const NN=8;
	double **data1,**data2,**result;
	data1=Matrix(1,NN,1,NN);
	data2=Matrix(1,NN,1,NN);
	result=Matrix(1,NN,1,NN);
	for(int i=1;i<NN+1;i++)
	{
		for(int j=1;j<NN+1;j++)
		{
			data1[i][j]=rand()/(double)(RAND_MAX);
			data2[i][j]=rand()/(double)(RAND_MAX);
		}
	}

	//Matrix_print(data1,NN,NN);
	//Mat
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值