Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <omp.h>
- #include <time.h>
- const int N=500;
- const int M=600;
- const int P=300;
- int main(){
- srand(time(NULL));
- int macierzA[N][M];
- int macierzB[M][P];
- long macierzWynikowa[N][P];
- int temp;
- double start, end;
- for(int i=0;i<N;i++){
- for(int j=0;j<P;j++){
- macierzWynikowa[i][j]=0;
- }
- }
- for(int i=0;i<N;i++){
- for(int j=0;j<M;j++){
- macierzA[i][j]=rand()%10;
- }
- }
- for(int i=0;i<M;i++){
- for(int j=0;j<P;j++){
- macierzB[i][j]=rand()%10;
- }
- }
- printf("Bez pragmy:\n");
- start = omp_get_wtime();
- for(int i=0;i<N;i++){
- for(int j=0;j<P;j++){
- temp = 0;
- for(int k=0;k<M;k++){
- temp += macierzA[i][k]*macierzB[k][j];
- }
- macierzWynikowa[i][j] = temp;
- }
- }
- end = omp_get_wtime();
- printf("Czas mnozenia: %lf\n",end-start);
- printf("Dla kazdego fora #pragma omp parallel for num_threads(7) schedule(static):\n");
- start = omp_get_wtime();
- #pragma omp parallel for num_threads(7) schedule(static)
- for(int i=0;i<N;i++){
- #pragma omp parallel for num_threads(7) schedule(static)
- for(int j=0;j<P;j++){
- #pragma omp critical
- {
- temp = 0;
- }
- #pragma omp parallel for num_threads(7) schedule(static)
- for(int k=0;k<M;k++){
- #pragma omp critical
- {
- temp += macierzA[i][k]*macierzB[k][j];
- }
- }
- macierzWynikowa[i][j] = temp;
- }
- }
- end = omp_get_wtime();
- printf("Czas mnozenia: %lf\n",end-start);
- printf("Dla kazdego fora #pragma omp parallel for num_threads(7) schedule(static,4):\n");
- start = omp_get_wtime();
- #pragma omp parallel for num_threads(7) schedule(static,4)
- for(int i=0;i<N;i++){
- #pragma omp parallel for num_threads(7) schedule(static,4)
- for(int j=0;j<P;j++){
- temp = 0;
- #pragma omp parallel for num_threads(7) schedule(static,4)
- for(int k=0;k<M;k++){
- #pragma omp critical
- {
- temp += macierzA[i][k]*macierzB[k][j];
- }
- }
- macierzWynikowa[i][j] = temp;
- }
- }
- end = omp_get_wtime();
- printf("Czas mnozenia: %lf\n",end-start);
- printf("Dla kazdego fora #pragma omp parallel for num_threads(7) schedule(dynamic):\n");
- start = omp_get_wtime();
- #pragma omp parallel for num_threads(7) schedule(dynamic)
- for(int i=0;i<N;i++){
- #pragma omp parallel for num_threads(7) schedule(dynamic)
- for(int j=0;j<P;j++){
- temp = 0;
- #pragma omp parallel for num_threads(7) schedule(dynamic)
- for(int k=0;k<M;k++){
- #pragma omp critical
- {
- temp += macierzA[i][k]*macierzB[k][j];
- }
- }
- macierzWynikowa[i][j] = temp;
- }
- }
- end = omp_get_wtime();
- printf("Czas mnozenia: %lf\n",end-start);
- printf("Dla kazdego fora #pragma omp parallel for num_threads(7) schedule(dynamic,3):\n");
- start = omp_get_wtime();
- #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
- for(int i=0;i<N;i++){
- #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
- for(int j=0;j<P;j++){
- temp = 0;
- #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
- for(int k=0;k<M;k++){
- #pragma omp critical
- {
- temp += macierzA[i][k]*macierzB[k][j];
- }
- }
- macierzWynikowa[i][j] = temp;
- }
- }
- end = omp_get_wtime();
- printf("Czas mnozenia: %lf\n",end-start);
- printf("Dla pierwszego fora #pragma omp parallel for num_threads(7) schedule(dynamic,3):\n");
- start = omp_get_wtime();
- #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
- for(int i=0;i<N;i++){
- for(int j=0;j<P;j++){
- temp = 0;
- for(int k=0;k<M;k++){
- #pragma omp critical
- {
- temp += macierzA[i][k]*macierzB[k][j];
- }
- }
- macierzWynikowa[i][j] = temp;
- }
- }
- end = omp_get_wtime();
- printf("Czas mnozenia: %lf\n",end-start);
- printf("Dla drugiego fora #pragma omp parallel for num_threads(7) schedule(dynamic,3):\n");
- start = omp_get_wtime();
- for(int i=0;i<N;i++){
- #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
- for(int j=0;j<P;j++){
- temp = 0;
- for(int k=0;k<M;k++){
- #pragma omp critical
- {
- temp += macierzA[i][k]*macierzB[k][j];
- }
- }
- macierzWynikowa[i][j] = temp;
- }
- }
- end = omp_get_wtime();
- printf("Czas mnozenia: %lf\n",end-start);
- printf("Dla trzecigo fora #pragma omp parallel for num_threads(7) schedule(dynamic,3):\n");
- start = omp_get_wtime();
- for(int i=0;i<N;i++){
- for(int j=0;j<P;j++){
- temp = 0;
- #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
- for(int k=0;k<M;k++){
- #pragma omp critical
- {
- temp += macierzA[i][k]*macierzB[k][j];
- }
- }
- macierzWynikowa[i][j] = temp;
- }
- }
- end = omp_get_wtime();
- printf("Czas mnozenia: %lf\n",end-start);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement