AESOP – kompilator C i C++ do obliczeń równoległych

AESOP – kompilator C i C++ do obliczeń równoległych

    przez -
    4 189
    Open Source
    University of Maryland opublikował na wolnej licencji nowy kompilator C/C++ do obliczeń równoległych – AESOP. Kompilator został zaprojektowany, jako wtyczka LLVM i potrafi udźwignąć projekty, takie jak SPEC2006, czy OMP2001. AESOP jest aktualnie rozwijany przez dwie osoby i nie nadaje się jeszcze do zastosowań produkcyjnych. W przyszłości ma zastąpić w niektórych miejsach GCC, G++ i GFortrana.

    Poniżej kod źródłowy:

    #include <math.h>
    #include <stdlib.h>
    #define N 1024
    
    int main(void){
      double data[N];
      double sum = 0.0;
    
      for(int i=0; i<N; i++)
        data[i] = rand();
    
      for(int i=0; i<N; i++)
        sum += data[i];
    
      return 0;
    }
    

    i analiza polecenia aesopcc -g input.c:

    Invoking AESOP.
    	Writing temporary bytecode...
    	Running AESOP optimizations...
    	 Loop main:for.body has a loop carried memory dependence, hence will not be parallelized  [input.c:9]
    		Dependence example: between memory operations at [input.c:10:15] and [input.c:10:15].
    	 Loop main:for.inc7 carries no dependence, hence is being parallelized  [input.c:12]
    	Num Loops Parallelized 1
    	Optimizations completed.

    • razi

      Nie bardzo ma sens u mnie na 2 rdzeniach testować.

      Jak to się ma do GCC/clang z OMP? Z tego co tu wyczytałem, to AESOP nie jest kompilatorem samym w sobie, tylko optymalizatorem pętel, który sam wyznacza pętle do paralelizacji i przerabia ich bajtokod (kod pośredni llvm).

      • pijaczek

        GCC też ci zrobi auto paralelizacje pętli od kilku wersji. Clang nie ma implementacji OMP.