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:
[bash]#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;
}
[/bash]
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.
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).
GCC też ci zrobi auto paralelizacje pętli od kilku wersji. Clang nie ma implementacji OMP.
Michał Olber liked this on Facebook.
C GB Spender liked this on Facebook.