Параллельное программирование на языке C-DVM (1158283), страница 6
Текст из файла (страница 6)
Парсер останавливается с сообщением:
Unexpected <token>
Нет допустимого терминального символа;
<construct> expected
Нет требуемой конструкции;
<construct> syntax
Ошибка в конструкции.
3 . Ошибки файлового уровня и операторов
The 'main' should get the command line parameters
В командной строке передаются параметры запуска Lib-DVM. Поэтому требуется заголовок
int main (int argn, char ** args)
The 'main' should 'return <rc>;' for the Lib-DVM
Функция main должна возвращать значение. Lib-DVM передает это значение операционной системе.
Implicitly created objects must precede 'main'
«Неявно создаваемые объекты должны предшествовать ‘main’ ».
Неявно создаваемые объекты должны быть описаны перед main. К таким объектам относятся распределяемые массивы, шаблоны, решетки процессоров с константными размерностями и т.п. Они автоматически создаются в самом начале main, поэтому должны быть все известны в этой точке.
'main' required for implicitly created objects
«’main’ требуется в файле в неявно создаваемыми объектами.»
Распределяемые массивы, шаблоны, решетки процессоров с константными размерностями и т.п. автоматически создаются в самом начале main, поэтому функция main должна присутствовать в файле в неявно создаваемыми объектами.
DVM-statement outside function
«DVM-оператор вне функции.»
DVM-оператор находится вне функции.
Misplaced declarative DVM-directive
«Описательная директива в неподходящем месте»
Директива-описание встретилась среди операторов или в операторе.
DVM-directive requires a non-empty statement
«DVM-директива требует непустого оператора».
Эта директива - спецификация при операторе. Не должна отделяться от него ';'.
Should be followed by the ';'
«Должна сопровождаться ‘;’»
Директива сама является оператором и должна оканчиваться ';'.
Not allowed in a PARALLEL loop
«Недопустимо в параллельном цикле»
Коллективная операция не может выполняться на одном процессоре.
4 . Описания
DVM-object should be defined as 'void *'
«DVM объекты должны иметь тип void * »
DVM-arrays may be int, long, float, or double only
«DVM-массивы могут быть только типов int, long, float и double ».
Scalar can not be distributed
«Скалярные переменные не могут быть распределенными»
Скалярные переменные всегда являются неявно размноженными.
DVM-pointer should be a C-pointer
«DVM-указателем должен быть описан как указатель в C».
DVM(* …) требует <type> * <id>.
'*' is valid only with DISTRIBUTE and ALIGN
«’*’ допустима только с директивами DISTRIBUTE и ALIGN »
’*’ можно использовать только в директивах DISTRIBUTE и ALIGN.
Only 1D-arrays of ptrs to DVM-arrays supported
«Только одномерные массивы указателей на распределенные массивы допустимы».
Ограничение компилятора.
Unsupported declarator for distributed data
«Недопустимый декларатор для распределенных данных».
Can not initialize DVM-objects
«Нельзя указывать инициализатор для DVM объектов и массивов».
DVM declarator syntax error
«Синтаксическая ошибка в деклараторе».
Прочие синтаксические ошибки в деклараторе.
5 . Объявление и использование DVM-объектов
Undefined
«Не определен»
Неопределенный идентификатор используется в DVM-директиве. Последовательная программа при этом могла компилироваться, если идентификатор используется только в DVM-директивах.
This is not a DVM-object
«Это не DVM-объект»
Объект, используемый в DVM-директиве, не является DVM-объектом.
Rank error
«Несоответствие ранга»
Ранги объекта при описания и использовании разные и т.п.
This is not a REDUCTION_GROUP
«Это не REDUCTION_GROUP ».
DVM-директива требует параметры определенного класса.
This is not a SHADOW_GROUP
«Это не SHADOW_GROUP ».
DVM-директива требует параметры определенного класса.
This is not a REMOTE_GROUP
«Это не REMOTE_GROUP ».
DVM-директива требует параметры определенного класса.
An array of void* required
«Требуется массив указателей void * »
ON-target must be an element of task array
«ON требует элемента массива задач».
6 . DISTRIBUTE, ALIGN, TEMPLATE
'[*]' is only allowed in DVM( * DISTRIBUTE...)
«’[*]’ допустимо только в DVM( * DISTRIBUTE…).»
Array should be defined as DVM(DISTRIBUTE...)
«Массив должен быть описан как DVM(DISTRIBUTE…) »
DVM-массив должен быть описан как DVM(DISTRIBUTE…).
GENBLOCK requires non-distributed 1D integer array
«GENBLOCK требует нераспределенного одномерного массива типа int.»
ONTO target must be a TASK or a PROCESSORS
«ONTO требует DVM-объект типа TASK или PROCESSORS.»
ONTO target must be an element of task array
«ONTO требует элемент массива задач.»
Align-expression syntax: [-][A*]var[+B|-B]
«Синтаксис выражения выравнивания: [-][A*]var[+B|-B] »
Разрешено только выражение, линейное относительно var.
Already used align|do variable
«Уже использованная переменная выравнивания цикла»
Два выражения выравнивания с одной и той же переменной не допускаются.
The base of a static should be a (known) static
«Базовый массив для выравнивания статического сам должен быть (уже определенным) статическим»
Статические (с константными размерностями) DVM-массивы автоматически создаются с помощью malloc в начале функции main в порядке их объявления. Базовый массив должен уже создан до выравнивания (ALIGN) по нему создаваемого массива.
The parameter should be a (non-static) TEMPLATE
«Параметр должен быть (не ‘статическим’) TEMPLATE »
Неверный параметр директивы CREATE-TEMPLATE.
7 . Доступ к распределенным данным
Can not assign to REMOTE
«Нельзя присваивать данным, описанным в REMOTE_ACCESS »
Удаленным данным нельзя присваивать значения.
Can not get REMOTE address
«Нельзя брать адрес от данных REMOTE_ACCESS »
К удаленным данным нельзя применять оператор &.
Possible non-local assignement. Use DVM(OWN)
«Возможно нелокальное присваивание. Используйте директиву OWN »
Левая часть оператора присваивания в последовательной ветви программы является элементом распределенного массива.
Only 1..4-D arrays may be distributed
«Размерность распределенных массивов не более 4»
Распределенные массивы могут иметь размерность от 1 до 4.
Too many distributed dimensions
«Слишком много распределенных размерностей»
Особый случай ошибки "Rank error".
Not all distributed dimensions
«Указаны не все распределенные размерности».
Особый случай ошибки "Rank error".
8 . Цикл PARALLEL
Duplicated or incompatible sub-directive
«Повторяющиеся или несовместимые поддирективы»
Повторяющиеся или несовместимые поддирективы директивы PARALLEL. Несовместимы SHADOW_RENEW, SHADOW_START и SHADOW_WAIT, а также все поддирективы с ON <task>.
Too many headers in the PARALLEL loop
«Слишком много заголовков в цикле PARALLEL »
Отделите лишние заголовки фигурными скобками.
Not enough headers in the PARALLEL loop
«Не хватает заголовков в цикле PARALLEL »
Разрешены только тесно вложенные параллельные циклы.
Not a PARALLEL loop variable
«Это не переменная параллельного цикла»
Переменная в распределенном DO/FOR заголовке отсутствует в списке переменных заголовка PARALLEL параллельного цикла.
PARALLEL loop variables disordered
«Нарушен порядок переменных параллельного цикла»
Порядок переменных в заголовке PARALLEL параллельного цикла и в заголовках цикла DO/FOR должен быть одинаковый.
Variable already used
«Переменная уже использована».
Два выражения выравнивания по одной переменной в параллельном цикле не разрешены.
Loop variable required
«Переменная цикла обязательна»
В заголовке параллельного цикла PARALLEL задано [<не идентификатор>] или [ ].
Only 'long' or 'int' scalar loop variables allowed
«Допустимы только скалярные переменные типа int или long »
В качестве переменных цикла можно использовать только скалярные переменные типа int или long.
9 . SHADOW
Declared (or default) maximum width exceeded
«Превышена максимальная ширина теневых граней»
Превышена максимальная ширина теневых граней, объявленная в описании массива или 1 по умолчанию.
1D-array's shadow has no CORNERs
«Для одномерного массива бесполезно CORNER »
Предупреждение. Ключевое слово не имеет смысла в данном контексте.
10 . REDUCTION
Нарушение синтаксиса и семантики параметров редукционных функций.
Undefined RVAR
Wrong type of RVAR
Undefined RLOC
Wrong type of RLOC
Unallowed RVAR-expression
Unallowed RLOC-expression
11 . Процедуры
Parameter should be defined as DVM(*...)
«Параметры должны быть описаны с ‘*’»
DVM-указатели передаются по ссылке.
Only DISTRIBUTE and ALIGN are valid for parameter
«Только директивы DISTRIBUTE и ALIGN допустимы для параметров»
В качестве параметров можно передавать только массивы. TEMPLATE, SHADOW_GROUP, PROCESSORS и т.п. не могут передаваться как параметры.
12 . Трассировка данных
Это предупреждения:
This initialization will not be traced
«Эта инициализация не будет трассироваться»
Инициализация не будет трассироваться из-за неподдерживаемого типа или уже сгенерированной main.
Can not trace ++, --, +=, -=, ...
«Не трассируются операции ++, -- +=, -=, и т.п.»
Ограничения компилятора.
Can not trace multiple assignement
«Не трассируется кратное присваивание»
Can not trace this type
«Не трассируется доступ к данным этого типа»
Неподдерживаемый тип.
13 . Разное
Can fread-fwrite DVM-arrays as a whole only
«Распределенный массив вводится/выводиться только целиком»
Do you mean multiple index?
Пишите A[a,b] как либо A[(a.b)], либо A[a][b] по смыслу.
Not yet implemented... or error
«Еще не реализовано или ошибка»
Приложение 3. Диагностические сообщения динамического отладчика
Общая структура сообщения об ошибке динамического отладчика:
(<process number>)<context> File: <file>, Line: <line> (<count> times)<error message>
где:
<process number> | | номер процессора, на котором произошла ошибка. | ||
<context> | | контекст, в котором произошла ошибка. | ||
sequential branch | | ошибка произошла в последовательной части программы; | ||
Loop( No(N1), Iter(I1,I2,…)), …, Loop( No(Nm), Iter(I1,I2,…)) | | ошибка произошла в ходе выполнения цикла m-степени вложенности. | ||
<file> | | имя файла, где произошла ошибка. | ||
<line> | | номер строки. | ||
<count> | | число повторений данной ошибки в данном контексте. Выводится при суммарной выдаче всех найденных ошибок. | ||
<error message> | | Сообщение о произошедшей ошибке. |
1. Динамический контроль
Сообщение | Описание |
Writing to read-only variable<var> | Обнаружена запись в переменную, которая доступна только для чтения. |
Using non-initialized private variable <var> | Обнаружено обращение к неинициализированной переменной. |
Using non-initialized element <elem> | Обнаружено обращение к неинициализированному элементу распределенного массива. |
Using variable <var> before asynchronous reduction competed | Обращение к редукционной переменной до завершения операции редукции. |
Access to non-local element <elem> | Обращение к нелокальному элементу массива. |
Writing to shadow element <elem> of array | Запись в теневой элемент массива. |
Shadow element <elem> was not updated | Обращение к теневым элементам до завершения операции пересылки границ. |
Data dependence in loop due to access to element <elem> | Обнаружена зависимость параллельного цикла по данным. |
Using shadow element <elem> before asynchronous shadow renew competed | Использование теневого элемента <elem> распределенного массива во время выполнения операции обновления теневых граней. |
Writing to remote data buffer <var> | Запись в буфер удаленного доступа <var> |
Write to remote element <elem> in sequential branch | Запись в элемент <elem> распределенного массива в последовательной части программы без спецификации собственных вычислений. |
Reading remote element <elem> in sequential branch | Использование нелокального элемента <elem> распределенного массива в последовательной части программы. |
WAIT for reduction without START | Ожидание завершения редукции без ее фактического запуска. |
Using an element outside of array limits: <elem> | Обращение к элементу массива за пределами его границ. |
START for reduction without WAIT | Отсутствие операции ожидания завершения асинхронной редукции для соответствующей операции старта асинхронной редукции. |
Reduction operation was not started | Специфицирована редукционная переменная, но соответствующее вычисление редукционной операции никогда не было стартовано. |
2. Накопление и сравнение трассировки
Сообщение | Описание |
Bad file structure | Нарушена структура файла трассировки. |
Undefined keyword | Файл трассировки содержит неизвестное ключевое слово. |
Bad command syntax | Неправильная структура записи трассировки. |
Can't open a file <file name> | Невозможно открыть указанный файл. |
Trace file <file name> is empty | Указанный файл трассировки не содержит информации. |
Bad trace structure (missing current program construct) | Нарушена структура файла трассировки. Отсутствует запись начала исполняемой конструкции. |
No current program construct | Отсутствует запись начала исполняемой конструкции. |
Unexpected task or iteration of loop | Эталонная трассировка не содержит записи о выполнении данной итерации или задачи. |
Double execution of task or iteration, No = <iter no> | Повторное исполнение той же итерации или задачи. |
Unexpected execution of program construct | Эталонная трассировка не содержит записи о начале выполнения данного цикла или задачи. |
Abnormal loop exit | Завершение цикла не соответствует записи в эталонной трассировке. |
Unexpected use of variable | Эталонная трассировка не содержит записи об использовании данной переменной. |
Unexpected trace record | Эталонная трассировка не содержит записи о исполнении данного события. |
Different <type> values: <standard value> != <current value> | Значение переменной не соответствует эталонной трассировке. |
Different <type> values of reduction variable: <standard value> != <current value> | Значение результата вычисления редукции не соответствует эталонной трассировке. |
3. Структура конфигурационного файла трассировки
# Trace size = | <размер всего файла трассировки в байтах> |
# String count = | <число строк всего файла трассировки> |