Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++] parallel reduce e f.object

    ciao.
    Sto leggendo per divertirmi la libreria threading buildinhg block ,per la programmazione multicore.
    Si basa tutta su template e function object.
    questo function object serve per trovare il valore minimo di un array.
    [code]
    class MinIndexFoo {
    const float *const my_a;
    public:
    float value_of_min;
    long index_of_min;
    void operator( )( const blocked_range<size_t>& r ) {
    const float *a = my_a;
    for( size_t i=r.begin(); i!=r.end( ); ++i ) {
    float value = Foo(a[i]);
    if( value<value_of_min ) {
    value_of_min = value;
    index_of_min = i;
    }
    }
    }
    MinIndexFoo( MinIndexFoo& x, split ) :my_a(x.my_a),value_of_min(FLT_MAX), index_of_min(-1)
    {}
    void join( const SumFoo& y ) {
    if( y.value_of_min<value_of_min ) {
    value_of_min = y.value_of_min;
    index_of_min = y.index_of_min;
    }
    }
    MinIndexFoo( const float a[] ) :my_a(a),value_of_min(FLT_MAX),index_of_min(-1)
    {
    }
    };
    //funzione chiamante
    long ParallelMinIndexFoo( float a[], size_t n ) {
    MinIndexFoo mif(a);
    parallel_reduce(blocked_range<size_t>(0,n,YouPickA GrainSize), mif );
    return mif.index_of_min;
    }
    [code]
    Questo è un function object che ritorna l'indice con il valore minimo di un array
    sum foo è un altro function object cosi:
    codice:
    class SumFoo {
      float* my_a;
    public:
      float sum;
      void operator( )( const blocked_range<size_t>& r ) {
         float *a = my_a;
         for( size_t i=r.begin(); i!=r.end( ); ++i )
         sum += Foo(a[i]);
      }
    SumFoo( SumFoo& x, split ) : my_a(x.my_a), sum(0) {}
    void join( const SumFoo& y ) {sum+=y.sum;}
    SumFoo(float a[] ) :my_a(a), sum(0){}
    };
    e ritorna la somma di un array.
    non riesco a capire queste funzioni:
    MinIndexFoo( const float a[] ) :my_a(a),value_of_min(FLT_MAX),index_of_min(-1)
    cosa concatenano?
    altre funzioni?
    e com nel function object sum e nel minimo vengono fatti i join tra i valori , in modo da restituire il valore di insieme dei vari blocchi inviati.
    e a cosa serve la funzione join dato che non è mai chiamata,
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Le join viene chiamata all'interno di altre funzioni, che però non hai mostrato.
    Una di sicuro viene invocata all'interno di paralle_reduce, l'altra, boh!
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3

    Re: [c++] parallel reduce e f.object

    Originariamente inviato da giuseppe500

    non riesco a capire queste funzioni:
    MinIndexFoo( const float a[] ) :my_a(a),value_of_min(FLT_MAX),index_of_min(-1)
    è un costruttore della classe MinIndexFoo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.