matrix
unknown
plain_text
a month ago
2.1 kB
4
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