Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przesyłanie rozmiaru tablicy dwuwymiarowej jako parametr

Ostatnio zmodyfikowano 2013-11-14 16:54
Autor Wiadomość
Adam3423
Temat założony przez niniejszego użytkownika
Przesyłanie rozmiaru tablicy dwuwymiarowej jako parametr
» 2013-11-14 14:08:24
WItam, mam problem z zadaniem z uczelni: Napisz program mnożący 2 macierze o losowych wartościach i dodających te macierze w trybie wielowątkowym. Nie wiem jak przesłać jako parametr rozmiar macierzy (gdyż takie jest wymaganie). Jakby ktoś mógł rzucić okiem to będę wdzięczny. Jest to mój pierwszy program z użyciem openMP więc zrównoleglenie również może nie być poprawnie napisane.


C/C++
#include<iostream>
#include<time.h>
#include<omp.h>
#include<cstdio>
#include<ctime>

using namespace std;



int main( int count, char * argv[] )
{
    srand( time( NULL ) );
    const int size = atoi argv[ 1 ];
   
   
    int a[ size ][ size ];
    int b[ size ][ size ];
    int c[ size ][ size ];
    int start, stop, time1, time2;
    int numOFthreads = atoi argv[ 2 ];
   
    for( int i = 0; i < size; ++i ) {
        for( int j = 0; j < size; ++j ) {
            a[ i ][ j ] = rand();
            b[ i ][ j ] = rand();
            c[ i ][ j ] = 0;
        }
    }
   
   
    omp_set_num_threads( numOFthreads );
    start = clock();
    #pragma omp parallel //for default(none) shared(a,b,c)
    for( int i = 0; i < size; ++i ) {
        for( int j = 0; j < size; ++j ) {
            for( int k = 0; k < size; ++k ) {
                c[ i ][ j ] += a[ i ][ k ] * b[ k ][ j ];
            }
        }
    }
    stop = clock();
    time1 = stop - start;
   
    for( int i = 0; i < size; ++i ) {
        for( int j = 0; j < size; ++j ) {
            c[ i ][ j ] = 0;
        }
    }
    omp_set_num_threads( numOFthreads );
    start = clock();
    #pragma omp parallel
    for( int i = 0; i < size; ++i ) {
        for( int j = 0; j < size; ++j ) {
            c[ i ][ j ] = a[ i ][ j ] + b[ i ][ j ];
        }
    }
    stop = clock();
    time2 = stop - start;
   
    cout << "Multiplication time: " << time1 << endl;
    cout << "Addition time: " << time2 << endl;
    system( "Pause" );
   
    return 0;
}
P-96251
RazzorFlame
» 2013-11-14 15:24:36
Nie wiem czy ja jestem ślepy czy coś ale tu żadnych wątków nie ma.
P-96256
Adam3423
Temat założony przez niniejszego użytkownika
» 2013-11-14 15:40:41
Ok, chodzi mi bardziej o to jak podać rozmiar tablicy w czasie uruchamiania programu, gdyż nie podoba się kompilatorowi tak jak to zrobiłem, także proszę o pomoc. Rozmiar tab musi być const i w tym mam problem.
P-96257
pekfos
» 2013-11-14 16:20:41
C/C++
const int size = atoi argv[ 1 ];
Co to miało być? Poza tym, rozmiar zwykłych tablic musi być znany w czasie kompilacji.
P-96263
Adam3423
Temat założony przez niniejszego użytkownika
» 2013-11-14 16:54:23
miało być size= atoi(argv[1]);

Dzięki za pomoc, myślałem, że da się to jakoś obejść.
P-96265
« 1 »
  Strona 1 z 1