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

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

przez -
4 240
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.