Strumenti Utente

Strumenti Sito


magistraleinformaticanetworking:spm:spm14exe1

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
magistraleinformaticanetworking:spm:spm14exe1 [19/11/2014 alle 07:19 (10 anni fa)] – [Sample solutions] Marco Daneluttomagistraleinformaticanetworking:spm:spm14exe1 [17/12/2014 alle 06:29 (10 anni fa)] (versione attuale) Massimo Torquati
Linea 101: Linea 101:
 === Sample solutions === === Sample solutions ===
 Sample solutions for the prime number examples [[sample_prime14|here]] Sample solutions for the prime number examples [[sample_prime14|here]]
 +
 +====== Class work 3 ======
 +
 +===== Matrix multiplication =====
 +Implement a C++ program computing the standard ijk matrix multiplication algorithm between two matrices A and B of size MxP and PxN, respectively. 
 +
 +Then parallelize the code using the FastFlow ParallelFor and ParalleForReduce patterns. Implement three versions: 
 +  * ParallelFor applied to the first (external) loop (index //i//)
 +  * ParallelFor applied to the second loop (index //j//)
 +  * ParallelForReduce applied to the third loop (index //k//)
 +
 +The seq ijk matrix multiplication code looks as follows: 
 +<code>
 +for(size_t i=0; i<M; i++) 
 +  for(size_t j=0; j<P; j++) {
 +    C[i][j] = 0.0;
 +    for(size_t k=0; k<P; k++) 
 +       C[i][j] += A[i][k]*B[k][j];
 +  }
 +</code>  
 +
 +
 +
 +
 +=== Sample solutions ===
 +See the matmul example in the FastFlow tutorial source code.
 +
 +====== Class work 4 ======
 +
 +===== Macro Data-Flow matrix multiplication =====
 +
 +Implement by using the FastFlow MDF pattern (ff_mdf), the matrix multiplication algorithm starting from the following sequential code (matrices are of size NxN, double precision elements) :
 +<code>
 +for(size_t i=0;i<N; ++i)
 +  for(size_t j=0;j<N;++j) {
 +    A[i*N+j] = i+j;
 +    B[i*N+j] = i*j;
 +  }
 +for(size_t i=0;i<N; ++i)
 +  for(size_t j=0;j<N;++j) {
 +    C[i*N +j] = 0;
 +    for(size_t k=0;k<N;++k) {
 +      C[i*N + j] += A[ i*N+k ]*B[ j*N+k ];  // B is transposed !
 +    }
 +  }
 +</code>
 +The initialization of the two matrices A and B has to be overlapped with the computation of the elements of the C matrix.
 +
 +{{ http://calvados.di.unipi.it/storage/teaching/SPM1415/matmul_mdf.png?500 }}
 +
 +=== Sample solutions ===
 +Sample code [[sample_mmmdf14|here]].
 +
 +====== Class work 5 ======
 +
 +===== Map skeleton with dynamic scheduling =====
 +
 +
 +=== Sample solutions ===
 +Sample code [[sample_dynmap14|here]],
 +
 +
magistraleinformaticanetworking/spm/spm14exe1.1416381591.txt.gz · Ultima modifica: 19/11/2014 alle 07:19 (10 anni fa) da Marco Danelutto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki