![]() |
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 | ||||||||||||||||||||||||||||||||||