Параллельные вычисления в ИММ УрО РАН
|
|
Обнаруженные отличия системы программирования МВС-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 реализованы некорректно и никакой полезной деятельности не производят.
Сообщайте, пожалуйста, о неописанных ошибках! |