并行矩阵相乘的时间问题
[i]这是我写的一个串,并行矩阵的代码,请教高手指点程序的错误。
/ 矩阵相乘.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<time.h>
#include<stdio.h>
#include"omp.h"
#define N 100
double a[N][N];
double b[N][N];
double c[N][N];
void init_arr(double row,double col,double off,double a[][N])//初始化矩阵
{
int i,j;
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
{a[i][j]=row*i+col*j+off;}
}
}
void print_arr(char *name,double array[][N])//输出矩阵
{
int i,j;
printf("\n%s\n",name);
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
{printf("%g\t",array[i][j]);}
printf("\n");
}
}
void serial_MatriMul ( const double *a, const double *b, double *c)//串行算法
{
int i, j, k;
for (i = 0; i < N; i++) {
int row_i = i*N;
int row_c=i*N;
for (j = 0; j < N; j++) {
c[row_c+j]=0.0;
for (k = 0; k < N; k++) {
c[row_c+j] +=a[row_i+k] * b[k*N+j];
}
}
}
}
/*void Parallel_Matrix_Multiply(const double *a,const double *b,double *c)//并行算法
{
int i,j,k;
int index;
int border=N*N;
i=0;
j=0;
#pragma omp parallel private(i,j,k) num_threads(4)//设定线程数
for(index=0;index<border;index++)
{
i=index / N;
j=index % N;
int row_i=i*N;
int row_c=i*N;
c[row_c+j]=0.0;
for(k=0;k<N;k++)
{
c[row_c+j]+=a[row_i+k]*b[k*N+j];}
}
}*/
int _tmain(int argc, _TCHAR* argv[])
{clock_t t1,t2;
init_arr(3,-2,1,a);
init_arr(-2,1,3,b);
t1=clock();
serial_MatriMul(reinterpret_cast<double *>(a),reinterpret_cast<double *>(b),reinterpret_cast <double *>(c));
// Parallel_Matrix_Multiply(reinterpret_cast<double *>(a),reinterpret_cast<double *>(b),reinterpret_cast <double *>(c));
t2=clock();
print_arr("A:",a);
print_arr("B:",b);
print_arr("C:",c);
printf("time=%lf seconds\n",((double)(t2-t1))/CLOCKS_PER_SEC);
return 0;
}