Параллельные вычисления в ИММ УрО РАН
 
 

Обнаруженные отличия системы программирования МВС-1000 от стандартов

При трансляции некоторых проргамм на Фортране компилятор занимает всю доступную виртуальную память, после чего снимается с сообщением об ошибке. Причина -- ошибка в компиляторе. Возможное решение -- указывать при трансляции файла, приводящего к ошибке, директиву -inline none.

Система исполнения на МВС-1000 по умолчанию сконфигурирована так, что стек программ не должен превышать 50 К Байт. К сожалению, никаких диагностик о переполнении не выводится -- память просто затирается. Чтобы проверить, не переполнился ли стек в ведущей себя странно программе, можно вствить в подозрительное место что-нибудь вроде checkStack(taskIdSelf()). Эти вызовы напечатают в stdout параметры стека программы, в случае переполнения в них будет содержаться слово OVERFLOW. Для увеличения стека применим вызов taskSpawn. Подробности можно узнать в личной беседе.

Немало страданий пользователям МВС-100 доставило ограничение числа одновременно открытых файлов. На МВС-1000 положение гораздо лучше: каждый из процессоров может одновременно открыть 48 файлов, причем открытие файлов другими процессорами это число не меняют.

При открытии файлов функцией fopen указание во 2-ом аргументе параметра t (то есть, например, f=fopen("file1.txt", "rt")) приводит к тому, что файл не открывается -- fopen вернёт NULL. Вообще говоря, это не ошибка, а отсутствие привычного пользователям MS-DOS расширения, так как стандарт ANSI C не определяет режимов открытия с "t".

Попытка завершить выполнение программы на C с помощью exit(...) приводит к тому, что снятие параллельной задачи не происходит. Для временного обхода можно использовать abort().

Функции mkdir и system реализованы некорректно и никакой полезной деятельности не производят.


Сообщайте, пожалуйста, о неописанных ошибках!