#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
int main()
{
int i, j, k;
int m, n;
int *array_A;
int *array_B;
int *array_C;
int sum = 0;
clock_t start_time, finish_time;
double duration = 0.0;
double start_omp_time, finish_omp_time;
double duration_omp = 0.0;
printf(" m = ");
scanf("%d",&m);
printf(" n = ");
scanf("%d",&n);
array_A=NULL;
array_B=NULL;
array_C=NULL;
array_A = (int*)malloc(sizeof(int) * (m*n));
array_B = (int*)malloc(sizeof(int) * (n*m));
array_C = (int*)malloc(sizeof(int) * (m*m));
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
array_A[i*m+j] = i+j;
}
}
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
array_B[i*n+j] = 1;
}
}
for (i=0;i<m;i++)
{
for (j=0;j<m;j++)
{
array_C[i*m+j] = 0;
}
}
start_time = clock();
start_omp_time = omp_get_wtime();
for(i=0; i<m; i++)
{
for(j=0;j<m;j++)
{
sum = 0;
#pragma omp parallel for num_threads(1) private(k)
firstprivate(i) firstprivate(j)
for(k=0; k<n; k++)
{
sum = sum + array_A[i*m+k] * array_B[k*n+j];
}
array_C[i*m+j] = sum;
}
}
finish_time = clock();
评论1