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