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:18 (10 anni fa)] – [Prime numbers in an interval] Marco Daneluttomagistraleinformaticanetworking:spm:spm14exe1 [17/12/2014 alle 06:29 (10 anni fa)] (versione attuale) Massimo Torquati
Linea 99: Linea 99:
  
  
-===== Sample solutions =====+=== Sample solutions ==
 +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.1416381539.txt.gz · Ultima modifica: 19/11/2014 alle 07:18 (10 anni fa) da Marco Danelutto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki