Последовательная программа перемножения матриц:
#include <stdio.h>
#include <windows.h>void MatrixInitialization(double**, double**, double**, int);
void main(int argc, char** argv)
{
int i,j,k, Size;Size = 512; // Размер матрицы по умолчанию.
// Присвоение значения размера матрицы из параметра командной строки.
if(argc == 2) Size = atoi(argv[1]);
printf("Size = %d.\n", Size);// Выделение памяти для хранения матриц.
double **MatrixA = new double* [Size];
double **MatrixB = new double* [Size];
double **MatrixC = new double* [Size];
for (i=0; i<Size; i++)
{
MatrixA[i] = new double [Size];
MatrixB[i] = new double [Size];
MatrixC[i] = new double [Size];
}// Инициализация матриц.
MatrixInitialization(MatrixA, MatrixB, MatrixC, Size);//Перемножение матриц.
unsigned long int StartTime = GetTickCount();
for (i=0; i<Size; i++)
{
for (j=0; j<Size; j++)
{
for (k=0; k<Size; k++)
MatrixC[i][j] = MatrixC[i][j] + MatrixA[i][k]*MatrixB[k][j];
}
}
unsigned long int EndTime = GetTickCount();
printf("Time multiplying: %.2f sec.\n",(float)(EndTime-StartTime)/1000);// Освобождаем память, занятую ранее для хранения матриц.
for (i=0; i<Size; i++)
{
delete[] MatrixA[i];
delete[] MatrixB[i];
delete[] MatrixC[i];
}
delete[] MatrixA;
delete[] MatrixB;
delete[] MatrixC;
}void MatrixInitialization(double **pAMatrix, double **pBMatrix, double **pCMatrix, int Size)
{
int i,j;
for (i=0; i<Size; i++)
{
for (j=0; j<Size; j++)
{
pAMatrix[i][j] = 1;
pBMatrix[i][j] = 2;
pCMatrix[i][j] = 0;
}
}
}