matrix
unknown
plain_text
9 months ago
2.1 kB
7
Indexable
#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include <ctime>
using namespace std;
#define N 500
#define NUM_THREADS 4
int matrixA[N][N], matrixB[N][N], resultSeq[N][N], resultPar[N][N];
void initializeMatrix(int matrix[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
matrix[i][j] = rand() % 100;
}
}
}
void multiplySequential() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
resultSeq[i][j] = 0;
for (int k = 0; k < N; k++) {
resultSeq[i][j] += matrixA[i][k] * matrixB[k][j];
}
}
}
}
struct ThreadData {
int startRow;
int endRow;
};
void* multiplyParallel(void* arg) {
ThreadData* data = (ThreadData*)arg;
for (int i = data->startRow; i < data->endRow; i++) {
for (int j = 0; j < N; j++) {
resultPar[i][j] = 0;
for (int k = 0; k < N; k++) {
resultPar[i][j] += matrixA[i][k] * matrixB[k][j];
}
}
}
pthread_exit(NULL);
}
double getTime() {
return (double)clock() / CLOCKS_PER_SEC;
}
int main() {
srand(time(0));
initializeMatrix(matrixA);
initializeMatrix(matrixB);
double start, end;
start = getTime();
multiplySequential();
end = getTime();
cout << "Sequential Execution Time: " << (end - start) << " seconds" << endl;
pthread_t threads[NUM_THREADS];
ThreadData threadData[NUM_THREADS];
int rowsPerThread = N / NUM_THREADS;
start = getTime();
for (int i = 0; i < NUM_THREADS; i++) {
threadData[i].startRow = i * rowsPerThread;
threadData[i].endRow = (i == NUM_THREADS - 1) ? N : (i + 1) * rowsPerThread;
pthread_create(&threads[i], NULL, multiplyParallel, (void*)&threadData[i]);
}
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
end = getTime();
cout << "Parallel Execution Time: " << (end - start) << " seconds" << endl;
return 0;
}
Editor is loading...
Leave a Comment