TRACO   an automatic parallelizing and optimizing compiler

based on the transitive closure of dependence graphs

#include <stdio.h>
#define N 100

int main()
{
	int a[101], i, j, b[101][101],c, x[100], q,k,l, t,y[100],z[100],
px[100][100], loop, r, vy[100][100], cx[100][100], n;
; for(i=1; i<=100; i++){ j = j * a[i]; } for(i=1; i<N; i++){ for(j=1; j<=100; j++){ c = 2; b[i][j] = b[i][j-1] + c; } } for ( l=1 ; l<=loop ; l++ ) { for ( k=0 ; k<n ; k++ ) { x[k] = q + y[k]*( r*z[k+10] + t*z[k+11] ); } } for ( l=1 ; l<=loop ; l++ ) { for ( i=0 ; i<25 ; i++ ) { for ( j=0 ; j<n ; j++ ) { px[j][i] += vy[k][i] * cx[j][k]; } } } for(i=1; i<N; i++){ for(j=1; j<=100; j++){ b[i][j] = b[i][j+1] + b[i+1][j]; } } return 0; }

#include <omp.h>
#include <stdio.h>
#define N 100

int main()
{
	int a[101], i, j, b[101][101],c, x[100], q,k,l, t,y[100],z[100],px[100][100],
loop, r, vy[100][100], cx[100][100], n, t1,t2,t3;
#pragma omp parallel for private(i) reduction(* : j) for(i=1; i<=100; i++){ j = j * a[i]; } #pragma omp parallel for private(i,j,c) for(i=1; i<N; i++){ for(j=1; j<=100; j++){ c = 2; b[i][j] = b[i][j-1] + c; } } if (loop >= 2) { #pragma omp parallel for private(t2,t1) for(t2 = 0; t2 <= n-1; t2++) { x[t2]=q+y[t2]*(r*z[t2+10]+t*z[t2+11]); if (t2 <= n-1 && t2 >= 0) { for(t1 = 2; t1 <= loop; t1++) { x[t2]=q+y[t2]*(r*z[t2+10]+t*z[t2+11]); } } } } if (loop >= 2 && n >= 1) { #pragma omp parallel for private(t2,t3,t1) for(t2 = 0; t2 <= 24; t2++) { for(t3 = 0; t3 <= n-1; t3++) { px[t3][t2]+=vy[k][t2]*cx[t3][k]; if (t2 <= 24 && t3 >= 0 && n >= t3+1 && t2 >= 0) { for(t1 = 2; t1 <= loop; t1++) { px[t3][t2]+=vy[k][t2]*cx[t3][k]; } } } } } if (N >= 2) { b[1][1]=b[1][1+1]+b[1+1][1]; } if (N >= 2) { for(t1 = 1; t1 <= N+97; t1++) { #pragma omp parallel for private(t2) for(t2 = max(t1-98,1); t2 <= min(N-1,t1+1); t2++) { b[t2][t1-t2+2]=b[t2][t1-t2+2+1]+b[t2+1][t1-t2+2]; } } } return 0; }