RefNUMA – библиотека для организации виртуальной общей памяти в программах, использующих MPI.

А. О. Лацис

Приложение 4. Проверка пригодности компилятора С к компиляции RefNUMA.

Как в приведенных выше примерах, так и в некоторых функциях самой библиотеки RefNUMA используются массивы переменной (не известной во время компиляции) длины. Это опция языка С, относящаяся к так называемым расширениям С99, которая, вообще говоря, в конкретном компиляторе может не поддерживаться. В современных компиляторах поддержка расширений С99 обычно заявлена, но в некоторых версиях некоторых компиляторов может быть реализована с ошибками. Если Вам придется собирать версию RefNUMA+microshmem самостоятельно, с целью переноса Вашего приложения на сторонний суперкомпьютер, то первое, что необходимо сделать – это проверить, правильно ли используемый Вами компилятор С реализует расширения С99. Текст проверяющей это программы приводится ниже. Эту программу следует скомпилировать проверяемым компилятором и запустить.

#include <stdio.h>
#include <stdlib.h>
    int main( int argc, char **argv )
{
    long n;
    if ( argc != 2 )
     {
      printf( "Usage: %s <small positive integer>\n", argv[0] );
      return 0;
     }
    n = atol( argv[1] );
//    printf( "n=%ld\n", n );
     {
      typedef int element[n];
      long lb, le;
      element *pe;
      if ( sizeof(element) != (n*sizeof(int)) )
       {
        printf( "Compiler does NOT support C99 arrays\n" );
       }
      pe = malloc( sizeof(element) );
      if ( !pe )
       {
        printf( "Cannot malloc\n" );
        return 0;
       }
      lb = (long)pe;
      pe++;
      le = (long)pe;
      if ( (le-lb) == (n*sizeof(int)) )
       {
        printf( "Compiler supports C99 arrays\n" );
       }
      else
       {
        printf( "Compiler does NOT support C99 arrays\n" );
       }
      return 0;
     }
}
◄ Приложение 3 Руководство программиста ►
 
 
 
 
 
 
 
 
  Тел. +7(499)220-79-72; E-mail: inform@kiam.ru