 
   
   
 Durch Compiler-pragmas kann die Parallelisierung durch den Programmierer noch zusätzlich untersützt werden. Diese Anweisungen müssen direkt vor derjenigen Schleife stehen, auf die sie angewendet werden sollen. (Die Ausnahme davon: #pragma no concurrentize und #pragma concurrentize wirken entweder auf das gesamte file oder eine Funktion)
void sub1(int n) { 
  int i; 
  extern int a[], b[]; 
  for(i=0; i<n; i++) { 
    a[b[i]] = i; 
  } 
  #pragma permutation (b) 
  for(i=0; i<n; i++) { 
    a[b[i]] = i; 
  } 
}
     #pragma permutation (array_name) wirkt sich auf alle Schleifen in
     einer Funktion aus. Im obiogen Beispiel also auch auf die erste 
     for-Schleife.
     Diese Direktive wird dazu verwendet, dass Arrays indirekt adressiert werden
     können.
    
#include <stdio.h>
#define SIZE	4
int main() {
  int i, j, k;
  float matrix1[SIZE][SIZE], matrix2[SIZE][SIZE], result[SIZE][SIZE];
  #pragma prefer concurrent
  for (i=0; i<SIZE; i++) {
    matrix1[i][j] = i;
    matrix2[i][j] = j;
    result[i][j] = 0;
  }
  printf("matrix1:\n");
  for (i=0; i<SIZE; i++) {
    for (j=0; j<SIZE; j++) 
      printf("%f ", matrix1[i][j]);
printf("\n");
  }
  printf("matrix2:\n");
  for (i=0; i<SIZE; i++) {
    for (j=0; j<SIZE; j++) 
      printf("%f ", matrix2[i][j]);
printf("\n");
  }
  #pragma prefer concurrent
  for (i=0; i<SIZE; i++)
    for (j=0; j<SIZE; j++)
      for (k=0; k<SIZE; k++)
        result[i][j] += matrix1[k][j] * matrix2[i][k];
  printf("result:\n");
  for (i=0; i<SIZE; i++) {
    for (j=0; j<SIZE; j++) 
      printf("%f ", result[i][j]);
printf("\n");
  }  
  return(0);
}
 
   
  