Strumenti Utente

Strumenti Sito


magistraleinformaticanetworking:spd:assistexamples

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
magistraleinformaticanetworking:spd:assistexamples [19/05/2010 alle 12:48 (15 anni fa)] – 3 more examples added Massimo Coppolamagistraleinformaticanetworking:spd:assistexamples [19/05/2010 alle 12:52 (15 anni fa)] (versione attuale) Massimo Coppola
Linea 908: Linea 908:
 ===array_scatter.ast=== ===array_scatter.ast===
 <file - array_scatter.ast> <file - array_scatter.ast>
 +// -*- C++ -*-
 +#define N 10
 +
 +generic main()
 +{
 +  stream long[N] A1;
 +  stream long[N] A2;
 +  stream long[N] B1;
 +  stream long[N] B2;
 +  
 +  genera1  (output_stream A1);
 +  genera2  (output_stream A2);  
 +  cross    (input_stream A1, A2  output_stream B1, B2);
 +  fine1    (input_stream B1);
 +  fine2    (input_stream B2);
 +}
 +
 +
 +genera1(output_stream long A1[N]) {
 +  fgen1(output_stream A1);
 +}
 +
 +
 +proc fgen1(output_stream long A1[N])
 +inc<"iostream">
 +$c++{
 +  long a[N];
 +  
 +  // start regression test
 +  std::cerr << "STARTING fgen1" << std::endl;
 +
 +  for (int i=0;i<N;i++) 
 +    a[i] = i;
 +  
 +  assist_out(A1, a);
 +}c++$
 +
 +
 +genera2(output_stream long A2[N]) {
 +  fgen2(output_stream A2);
 +}
 +
 +
 +proc fgen2(output_stream long A2[N])
 +inc<"iostream">
 +$c++{
 +  long a[N];
 +
 +  // start regression test
 +  std::cerr << "STARTING fgen2" << std::endl;
 +
 +  for (int i=0;i<N;i++)
 +    a[i] = 10 + i;
 +  
 +  assist_out(A2,a);
 +}c++$
 +
 +
 +parmod cross(input_stream long A1[N], long A2[N]  output_stream long B1[N], long B2[N]) {
 +
 +  topology array [i:N] Pv;
 +
 +  attribute long S[N] scatter S[*i0] onto Pv[i0];
 +
 +  stream long s1;
 +  stream long s2;
 +
 +  do input_section {
 +    guard1: on , , A1 {
 +      distribution A1[*j] scatter to S[j];
 +    }
 +    guard2: on , , A2 {
 +      distribution A2[*k] scatter to S[k];
 +    }  
 +  } while (true)
 +  
 +  virtual_processors {
 +    elab1(in guard1 out s1) {
 +      VP i {
 + f_p1(in S[i] out s1);
 +      }
 +    }
 +    elab2(in guard2 out s2) {
 +      VP i {
 + f_p2(in S[i] out s2);
 +      }
 +    }
 +  }
 +  
 +  output_section {
 +    collects s1 from ALL Pv[i] {  
 +      int el1;
 +      int B1_[N];
 +      AST_FOR_EACH(el1) {
 + B1_[i]=el1;
 +      }
 +      assist_out (B1, B1_);
 +    }<>;
 +
 +    collects s2 from ALL Pv[i] {
 +      int el2;
 +      int B2_[N];
 +      AST_FOR_EACH(el2) {
 + B2_[i]=el2;
 +      }
 +      assist_out (B2, B2_);
 +    }<>;
 +  } 
 +}
 +
 +
 +fine1(input_stream long B1[N])
 + 
 +inc<"iostream">
 +$c++{
 +  int ok = 0;
 +  
 +  /*
 +    std::cerr << "Fine1: " << std::endl;
 +    for (int i=0; i<N; i++)
 +    std::cerr << B1[i] << " ";
 +    std::cerr << std::endl;
 +  */
 +  
 +  for (int i=0;i<N;i++) if (B1[i] != i) ok = -1;
 +  if (ok==0) 
 +    std::cerr << "ENDING with SUCCESS fine1 array_scatter.ast" << std::endl;
 +  else  
 +    std::cerr << "ENDING with FAILURE fine1 array_scatter.ast" << std::endl;
 +}c++$
 +
 +
 +fine2(input_stream long B2[N])
 + 
 +inc<"iostream">
 +$c++{
 +  int ok = 0;
 +
 +  /*
 +    std::cerr << "Fine2: " << std::endl;
 +    for (int i=0; i<N; i++)
 +    std::cerr << B2[i] << " ";
 +    std::cerr << std::endl;
 +  */
 +
 +  for (int i=0;i<N;i++) if (B2[i] != (10 + i)) ok = -1;
 +  if (ok==0) 
 +    std::cerr << "ENDING with SUCCESS fine2 array_scatter.ast" << std::endl;
 +  else  
 +    std::cerr << "ENDING with FAILURE fine2 array_scatter.ast" << std::endl;
 +}c++$
 +
 +
 +proc f_p1(in long A1 out long B1)
 + 
 +inc<"iostream">
 +$c++{
 +  long b;
 +  b = A1;
 +  B1 = b;
 +}c++$
 +
 +
 +proc f_p2(in long A2 out long B2)
 + 
 +inc<"iostream">
 +$c++{
 +  B2 = A2;
 +}c++$
 </file> </file>
 ===array_on_demand_attrib_array_replic.ast=== ===array_on_demand_attrib_array_replic.ast===
 <file - array_on_demand_attrib_array_replic.ast> <file - array_on_demand_attrib_array_replic.ast>
 +// -*- C++ -*-
 +#define N 5
 +#define M 10
 +#define MAX_ITER 20
 +#define RIS "/tmp/risultato.txt"
 +
 +/***************************************************************/
 +/*                                                             */
 +/* Test of the on_demand distribution over the array topology  */
 +/*                                                             */
 +/* The parmod "elabora" has array topology                     */
 +/*                                                             */
 +/* The replicated attribute is a one-dimension array           */
 +/*                                                             */
 +/**************************************************************/
 +
 +generic main() {
 +  stream long[M] A;
 +  stream long[M] B;
 +
 +  genera    (output_stream A);
 +  elabora   (input_stream A output_stream B);
 +  stampa    (input_stream B);
 +
 + 
 +
 +genera (output_stream long A[M]) {
 +  Fgenera (output_stream A);
 +}
 +
 +
 +proc Fgenera (output_stream long A[M]) 
 +inc<"iostream">
 +$c++{
 +  long tmp_A[M];
 +
 +  // start regression test
 +  std::cerr << "STARTING fgen" << std::endl;
 +  
 +  for (int k=0; k<MAX_ITER; k++) {
 +    for (int i=0; i<M; i++) 
 +      tmp_A[i] = i;
 +    assist_out (A, tmp_A);
 +  }
 +}c++$
 +
 +
 +parmod elabora (input_stream long A[M] output_stream long B[M]) {
 +
 +  topology array [i:N] Pv;
 +
 +  /* bug in module builder solved:
 +     it was taking B_ as an integer, while it is an array */
 +     
 +  attribute long B_[M] replicated;
 +  stream long ris[M];
 +  
 +  do input_section {
 +    guard1: on , , A {
 +      distribution A on_demand to Pv;
 +    }
 +  } while (true)
 +       
 +  virtual_processors {
 +    elab (in guard1 out ris) {
 +      VP i {
 +   Felab (in A out B_);
 +   assist_out (ris, B_); 
 +      }
 +    }
 +  }
 + 
 +  output_section {
 +    collects ris from ANY Pv {
 +      assist_out(B, ris);
 +    }<>;
 +  } 
 +}
 +
 +
 +stampa (input_stream long B[M])
 + 
 +inc<"fstream","iostream">
 +$c++{
 +  static std::ofstream f;
 +  static int  count = 0;
 +  static int     ok = 0;
 +
 +  if (count == 0) {
 +    f.open (RIS);
 +  }
 +
 +  /* print and verify results */
 +  for (int i=0; i<M; i++) {
 +    f << B[i] << std::endl;
 +    if (B[i] != i) ok = -1;
 +  }
 +  count++;
 +  
 +  // end of regression test
 +  if (count >= MAX_ITER) {
 +    if (ok==0) 
 +      std::cerr << "ENDING with SUCCESS fine array_on_demand_attrib_array_replic.ast" << std::endl;
 +    else std::cerr << "ENDING with FAILURE fine array_on_demand_attrib_array_replic.ast" << std::endl;
 +    f.close();
 +  }
 +}c++$
 +
 +
 +proc Felab (in long A[M] out long B_[M])
 + 
 +inc<"iostream">
 +$c++{
 +  for (int i=0; i<M; i++)
 +    B_[i] = A[i];
 +}c++$
 </file> </file>
  
magistraleinformaticanetworking/spd/assistexamples.1274273291.txt.gz · Ultima modifica: 19/05/2010 alle 12:48 (15 anni fa) da Massimo Coppola

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki