Современный фортран для компьютеров традиционной архитектуры и для параллельных вычислительных систем

Изучение проблемы стандартизации языка Фортран. информация о проекте будущего стандарта, Средства поддержки параллельности для многопроцессорных систем с общей памятью. Механизмы динамического размещения массивов, концепция эволюционного развития языка.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 28.10.2018
Размер файла 65,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

1

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

ИНСТИТУТ ПРИКЛАДНОЙ МАТЕМАТИКИ

им. М.В. КЕЛДЫША

РОССИЙСКОЙ АКАДЕМИИ НАУК

Современный фортран для компьютеров традиционной архитектуры и для параллельных вычислительных систем

А.М. Горелик

Москва 2003

АННОТАЦИЯ

Рассматриваются проблемы стандартизации языка Фортран, дается обзор новых возможностей современных стандартов Фортрана. Приводится краткая информация о проекте будущего стандарта (Фортран 2000). Наибольшее внимание уделяется тем новым средствам языка, которые позволяют использовать современные технологии программирования, а также средствам поддержки параллельности, которые имеются непосредственно в действующем стандарте. Обсуждаются языки для параллельных ЭВМ, являющиеся расширениями Фортрана.

An overview of new features of modern FORTRAN standards and an outline of the future FORTRAN standard (FORTRAN 2000) are given. FORTRAN-based programming languages for parallel computers are discussed.

This paper was prepared in accordance with methodical recommendations of Russian Foundation for Fundamental Investigations and was supported by this Foundation (Project 02-01-07012).

СОДЕРЖАНИЕ

А. Анализ проблематики исследований

Часть I. Современный международный стандарт языка Фортран

1. Введение

2. Стандартизация языка

2.1. Цели стандартизации языка

2.2. Кто и как разрабатывает международные стандартыязыка Фортран

3. Обзор новых возможностей современного Фортрана

3.1. Структура стандарта

3.2. Свободный формат исходной программы и имена

3.3. Параметризованные типы данных, атрибуты и средстваконтроля соответствия типов

3.4. Типы и операции, определяемые пользователем

3.5. Операции над массивами, секциями массивов исоответствующие присваивания. Операторы и конструкции WHERE и FORALL

3.6. Механизмы динамического размещения массивов

3.7. Указатели

3.8. Модули

3.9. Поддержка объектно-ориентированного программирования

3.10. Новшества для процедур

3.11. Средства поддержки параллельности

3.12. Поддержка структурного программирования

3.13. Концепция эволюционного развития языка

4. Перспективы развития языка

ЧАСТЬ II. Языки для параллельного программирования, основанные на Фортране

5. Введение. Подходы к реализации параллельности

6. Средства поддержки параллельности для многопроцессорных систем с распределенной памятью

6.1. Общие сведения

6.2. Система MPI

6.3. Система GNS

7. Средства поддержки параллельности для многопроцессорных систем с общей памятью

7.1. Общие сведения

7.2. Модель параллелизма

7.3. Спецификации для Фортрана

8. Средства параллельности, ориентированные на разбиение данных

8.1. Общие сведения

8.2. Язык HPF

8.3. Система DVM

9. Co-array Fortran

10. Система Норма

11. Сравнение систем

12. Реализации современного Фортрана

13. Заключение

Литература

Б. Совокупность исследований, финансируемых РФФИ

В. Степень взаимного соответствия проблематики проектовРФФИ и проблем, указанных в разделах А и Б

А. Анализ проблематики исследований

Язык Фортран занимает лидирующее положение среди языков программирования, ориентированных на решение научно-технических задач, требующих большого объема вычислений. Особенно актуальным является применение Фортрана при решении крупномасштабных вычислительных задач с использованием современных суперЭВМ. Решение таких задач требуется в различных сферах фундаментальных научных исследований и во многих прикладных областях.

Фортран постоянно развивается и совершенствуется в соответствии с pазвитием вычислительной техники, языков и технологии программирования. Одной из наиболее важных причин популярности и живучести Фортрана является огромный фонд прикладных программ, который накоплен за десятилетия существования языка. Этому в немалой степени способствовали удобство и эффективность выполнения программ, а также стандартизация языка на международном уровне.

Разработка новых мобильных средств языка является результатом фундаментальных исследований (выполняемых специалистами многих стран) в области теории и практики программирования, в области развития архитектуры современных вычислительных систем и технологии программирования, а также является результатом анализа и обобщения опыта использования вычислительной техники при решении задач, требующих большого объема вычислений.

Бытующее мнение о том, что Фортран устарел - ошибочно. Конечно, в связи с широким внедрением персональных ЭВМ во многие сферы человеческой деятельности, удельный вес Фортрана в общем объеме программного обеспечения снизился. Однако при решении больших вычислительных задач предпочтение отдается современному Фортрану.

Некоторый спад интереса к Фортрану был вызван большой задержкой в разработке Фортрана 90. Однако в настоящее время после завершения разработки, вступления в действие современных международных стандартов Фортрана (Фортран 90 и Фортран 95) и реализации их практически для всех вычислительных систем, а также в связи с использованием высокопроизводительных параллельных компьютеров, интерес к Фортрану вновь возрос.

Предлагаемый обзор посвящен анализу современного состояния и перспективам развития языка Фортран.

В первой части обзора рассматриваются проблемы стандартизации языка, анализируются новые (по сравнению с Фортраном 77) возможности действующего международного стандарта (Фортран 95) и обсуждаются перспективы дальнейшего развития языка. Наибольшее внимание уделяется тем новым средствам языка, которые позволяют использовать современные технологии программирования, а также средствам поддержки параллельности, которые имеются непосредственно в действующем стандарте.

Вторая часть обзора посвящена языкам для параллельного программирования, основанным на стандарте Фортрана.

Часть I. Современный международный стандарт языка Фортран

1. Введение

Действующий международный стандарт Фортрана был принят в 1997 году; неформальное название его - Фортран 95 [1]. Язык является относительно небольшим расширением предыдущего стандарта - Фортран 90 [2, 3], который был утвержден в 1991 году и пока не потерял своей актуальности.

Фортран 90/95 существенно расширяет возможности своих предшественников. В то же время практически сохраняется преемственность с предыдущими стандартами языка, что позволяет использовать ранее созданный фонд прикладного программного обеспечения. Фортран 90/95 позволяет создавать более мобильные и более надежные программы по сравнению с Фортраном 77 и обеспечивает современный стиль программирования.

В современные стандарты включены средства, позволяющие расширить сферу применения языка, использовать современные технологии программирования, эффективно реализовать вычислительные алгоритмы. При разработке языка учтены новые архитектурные решения современных вычислительных систем.

Следует отметить, что для небольших программ не очень существенно, какая методология программирования выбрана, и какой язык используется. При разработке больших программ применение новых технологий (что обеспечивает современный Фортран) дает существенный выигрыш. В то же время программисты, использующие Фортран 77 (который был разработан еще в 70-е годы прошлого века) и даже более ранние версии, вынуждены использовать старые технологии. Переход к новым технологиям с сохранением многолетнего вклада в разработку Фортран-программ - это требование времени. Поскольку Фортран 90/95 является расширением Фортрана 77, некоторые из новых концепций могут быть реализованы путем модификации старых программ.

Помимо официального описания стандарта языка [1, 2], выпущены десятки книг на разных языках (по моим сведениям на 11), которые содержат неформальное описание языков Фортран 90 и Фортран 95. Во многих университетах мира читаются лекции, организованы разнообразные курсы по изучению современного Фортрана. На русском языке книг, содержащих описание стандарта языка Фортран 95, пока нет. Для Фортрана 90 выпущен перевод официального описания стандарта [4] и книги [5, 6] c неформальным описанием этого стандарта. О реализациях современных стандартов будем говорить позже (см. 12).

Исследования, связанные с новыми возможностями современных стандартов Фортрана, проводятся как за рубежом, так и в нашей стране (проекты РФФИ № 97-01-0361 и 00-01-00043 [7-13]).

2. Стандартизация языка

2.1 Цели стандартизации языка

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

Язык подвергался стандартизации в рамках ANSI и ISO четыре раза (Фортран 66, Фортран 77, Фортран 90, Фортран 95). В настоящее время на международном уровне ведется работа по дальнейшему развитию языка: разрабатывается проект языка Фортран 2000 (завершение планируется в 2004г.), который предусматривает весьма существенные нововведения.

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

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

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

Еще больше проблем для создания мобильных программ представляют реализации, которые не соответствуют стандарту. Если прикладная программа ориентирована на такую реализацию, то затраты на ее переделку для использования в другой вычислительной среде в некоторых случаях могут быть сопоставимы с разработкой новой программы.

2.2 Кто и как разрабатывает международные стандарты языка Фортран

Международные стандарты языка являются результатом совместной деятельности экспертов многих стран. Ответственным за стандартизацию языков программирования на международном уровне является подкомитет 22 (SC22), входящий в состав Объединенного технического комитета (JTC1) Международной организации по стандартизации (ISO) и Международной электротехнической комиссии (IEC).

Непосредственной работой по стандартизации языков программирования, поддержкой уже действующих стандартов и разработкой общих требований к стандартам на языки программирования занимаются эксперты разных стран, объединенные в соответствующие рабочие группы подкомитета SC22.

Стандартизацией языка Фортран занимаются Американский технический комитет J3 ANSI и эксперты рабочей группы WG5 (указанного подкомитета). Членами WG5 являются специалисты многих стран, в т.ч. и нашей страны. В их числе представители компьютерных фирм, крупных университетов. Многие из тех, кто ответствен за разработку коммерческих Фортран-компиляторов, являются членами J3 и/или WG5.

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

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

3. Обзор новых возможностей современного Фортрана

3.1 Структура стандарта

Современные стандарты Фортрана представляют собой семейство стандартов, состоящее из нескольких частей. Действующий стандарт Фортран 95 состоит из трех частей. Первая часть - основной (базовый) язык [1]. Остальные части являются дополнительными. При этом не требуется, чтобы компилятор, соответствующий стандарту, обязательно реализовывал дополнительные части. Вторая часть стандарта [14] содержит описание средств для работы с символьными строками переменной длины. Третья часть Фортрана 95 [15] определяет описание языка условной компиляции.

Ниже приводится краткий обзор новых по сравнению с Фортраном 77 средств базового языка. Там, где специально не оговорено, эти новшества имеются и в Фортране 90, и в Фортране 95.

3.2 Свободный формат исходной программы и имена

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

Имена могут содержать до 31 символа; в именах допускается символ подчеркивания. Можно использовать строчные латинские буквы, которые всюду, кроме символьных констант и символьных спецификаций формата, считаются равнозначными соответствующим прописным буквам.

3.3 Параметризованные типы данных, атрибуты и средства контроля соответствия типов

В Фортране 90/95 свойства объектов могут описываться в соответствующих операторах спецификации атрибутов (как и прежде), либо с помощью атрибутов в операторе объявления типа. В одном операторе объявления типа можно описать несколько атрибутов объектов, перечисленных в данном операторе после двойного двоеточия; в этих операторах допускается также инициализация объектов.

Примеры

REAL, DIMENSION (3), PARAMETER :: VECTOR = ( / 1., 2., 3. /)

REAL, SAVE :: XY (10, 10)

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

Приведенный ниже пример иллюстрирует способ задания точности и диапазона для вещественных данных.

Пример

! Два варианта для задания способа представления, обеспечивающего ! точность не менее 10 знаков и диапазон десятичного порядка не менее ! чем (-30, +30)

INTEGER, PARAMETER :: NUMS = SELECTED_REAL_KIND (10, 30)

REAL (KIND = NUMS) R1, R2 ! NUMS - параметр типа

REAL (SELECTED_REAL_KIND (10, 30)) :: R1, R2

Для приведенного примера значения переменных R1 и R2 на одних компьютерах могут отображаться как обычные вещественные числа, занимающие одно машинное слово, на других - как "длинные" (двойной точности) вещественные числа. Однако при переносе данной программы на компьютер с иной формой представления данных не требуется менять ни описания переменных R1 и R2, ни другие операторы, связанные с этими переменными, так как в любой реализации (если компилятор не выдал отказа) должны быть обеспечены соответствующие точность и диапазон. Таким образом, указанные средства больше отвечают требованиям мобильности программ, чем использование непараметризованных традиционных для Фортрана типов REAL и DOUBLE PRECISION.

Для языка Фортран традиционно был характерен принцип умолчания, т.е. автоматическое приписывание объектам типа, если тип объекта не указан явно. В Фортран 90/95 введен оператор IMPLICIT NONE. При наличии такого оператора типы объектов в данной программной единице должны быть объявлены явно. Явное объявление объектов обеспечивает возможность контроля типов, что, очевидно, полезно для повышения надежности создаваемых программ. IMPLICIT NONE является более гибким инструментом, чем просто обязательность описаний, что имеет место в других языках.

3.4 Типы и операции, определяемые пользователем

Введены средства, позволяющие определить новые типы данных - производные типы (структуры данных), которые представляют собой совокупность компонент. Компоненты производного типа могут иметь встроенный или ранее описанный производный тип; компонентами могут быть скаляры, массивы и указатели. Компонент производного типа может иметь такой же тип как описываемый, если он является указателем (т.е. имеет атрибут POINTER). Это полезно для создания связанных списков.

Скалярный объект производного типа представляет собой структуру. Допускаются массивы объектов производного типа. Компоненты объекта производного типа могут использоваться в обычных выражениях и операторах. Для объектов одинакового производного типа определена операция присваивания; кроме того, такие объекты могут использоваться в операторах ввода/вывода, в качестве параметров процедур и как результат функции.

Примеры

! Описание типа PERSON

TYPE PERSON

INTEGER AGE

CHARACTER (LEN = 10) NAME

END TYPE PERSON

! Объявление объектов описанного типа

TYPE (PERSON):: STUDENT, TEACHER, MEMBER (10)

! Операция над компонентами производного типа

N = TEACHER%AGE - STUDENT%AGE

! Компонент элемента массива производного типа

MEMBER (1) % AGE = 50

! Присваивание объекту производного типа

STUDENT = (20, ' SMITH')

! Пример связанного списка

TYPE LINK

REAL VALUE

TYPE (LINK), POINTER :: PREVIOUS

TYPE (LINK), POINTER :: NEXT

END TYPE LINK

В языке имеется аппарат, позволяющий программисту распространить для производных типов встроенные операции (перегрузка) или описать новые операции для данных встроенных и производных типов. Эти возможности позволяют программисту определить абстрактные типы данных, что является одним из элементов объектно-ориентированного программирования.

3.5 Операции над массивами, секциями массивов и соответствующие присваивания. Операторы и конструкции WHERE и FORALL

В язык введен большой набор средств для работы с массивами и секциями массивов как с целыми объектами. Существенным является тот факт, что операции над массивами неявно специфицируют параллелизм действий над компонентами массивов (массива). Новые средства позволяют программисту описать алгоритмы обработки массивов в более лаконичной и наглядной форме (с элементами непроцедурности) чем при традиционном способе с использованием вложенных циклов и условных операторов. Кроме того, эти средства позволяют компилятору сгенерировать эффективный код с учетом особенностей аппаратуры, поскольку явно специфицируют векторные операции (см. 3.11.). Ниже рассматриваются некоторые из этих средств.

Секция массива обеспечивает возможность адресоваться к части массива. Секция задает последовательность индексов и тем самым выделяет часть массива, состоящую из элементов с соответствующими индексами. Секция массива может состоять не только из расположенных подряд элементов исходного массива, но также и из несвязанных областей этого массива.

Семантика операций и встроенных функций Фортрана 77 расширена таким образом, что их можно применять не только к скалярам, но и к массивам; при этом операции и стандартные функции выполняются поэлементно над соответствующими элементами массива. Операнды, участвующие в одной операции, должны быть согласованы по конфигурации (т.е. должны иметь одинаковую размерность и размер по каждому измерению; скаляр считается согласованным с любым массивом). Массив может быть также значением выражения и значением функций (как встроенных, так и определяемых пользователем).

Аналогичным образом расширена семантика операторов присваивания; результат операции такой, как если бы сначала выполнялись все операции в правой части, а затем - присваивание, которое может выполняться в произвольном порядке.

Примеры

REAL X (10, 20), Y (40), Z (-9:10), W (10)

! Присваивание значений элементам 10-й строки матрицы X

X (10, :) = 2.8 * Y (2:40:2) + SQRT (Z)

! Изменение порядка элементов массива на обратный

W (1:10) = W (10:1:-1)

Используя оператор WHERE или конструкцию WHERE-END WHERE, можно выполнить присваивание значений только некоторых элементов одного массива соответствующим элементам другого массива, т.е. выполнить присваивание под управлением логической маски.

Примеры

REAL X(10, 20), Z (-9:10), V (20)

! Вычисление логарифма для положительных элементов массива V

WHERE (V > 0.0 ) Z = LOG (V)

! Конструкция WHERE

WHERE (V /= 0 )

X (10, :) = 3.3 * Z / V

ELSEWHERE

X (10, :) = 0.0

END WHERE

Одним из наиболее важных новшеств (в Фортране 95) является оператор и конструкция FORALL. FORALL допускает возможность специфицировать больший класс секций массивов, чем в Фортране 90. Например, диагональ массива в Фортране 95 может быть представлена с помощью FORALL.

Пример

FORALL (I = 1:N) A (I, I) = B(I)

FORALL функционально похож на цикл, но выполняется иначе. Так, оператор

FORALL (I = 2:N) C(I, I) = C(I-1, I-1)

дает результат, отличный от результата приведенной ниже последовательности операторов:

DO I = 2, N

C(I, I) = C(I-1, I-1)

END DO

Это объясняется тем, что итерации DO-цикла выполняются последовательно так, что каждый следующий элемент диагонали модифицируется до его использования в следующей итерации. В противоположность этому, в FORALL все диагональные элементы выбираются и используются до сохранения модифицированного значения в памяти. Заметим, что такой результат не зависит от того, поддерживает ли компилятор параллельное выполнение FORALL.

Имеется также конструкция FORALL - END FORALL. Заголовок конструкции может содержать логическую маску. Конструкции могут быть вложенными и могут содержать конструкции WHERE.

В языке имеется большой набор стандартных функций для работы с массивами. Функции редукции (ALL, ANY, COUNT, MINVAL, MAXVAL, PRODUCT, SUM) выполняют арифметические и логические операции над массивами. Имеются функции умножения матриц, транспонирования матрицы, вычисления скалярного произведения векторов, функции, выполняющие сдвиги позиций элементов массива, функции конструирования массива из элементов других массивов, различные справочные функции и др.

Пример

! Вычисление суммы положительных элементов массива X

C = SUM (X, MASK = X > 0.0)

3.6 Механизмы динамического размещения массивов

В современных стандартах введены следующие механизмы динамического размещения массивов:

автоматические массивы, границы которых вычисляются при входе в процедуру;

размещаемые массивы, границы которых вычисляются при выполнении программы;

массивы, создаваемые в процессе выполнения программы, т.е. массивы, которые не были заранее явно объявлены в программе (см. 3.7.3.).

Эти средства позволяют пользователю организовать работу с массивами, размер которых заранее не известен, а также оперативно отводить память под массивы, требующиеся на том или ином этапе выполнения программы и освобождать память по мере необходимости.

Размещаемые массивы должны быть объявлены с атрибутом ALLOCATABLE; при объявлении размещаемого массива указывается только его размерность (ранг). При выполнении оператора размещения ALLOCATE вычисляются границы массива, его размер и отводится память. Память, занимаемая массивом, освобождается при выполнении оператора DEALLOCATE.

Примеры

SUBROUTINE S (X, M)

COMMON K

REAL, DIMENSION (M, 2:K) :: A ! Автоматический массив A

REAL, DIMENSION, ALLOCATABLE :: Y(:) ! Размещаемый одномерный массив Y

. . .

READ (*, *) N

ALLOCATE Y (N) ! Размещение массива Y

3.7 Указатели

3.7.1 В язык введены указатели, с помощью которых можно ссылаться на объекты. С помощью указателей и аппарата производных типов можно создавать произвольные структуры данных: связанные списки, деревья и др. (см. 3.4). Использование указателей позволяет также создавать в процессе выполнения программы динамические объекты (см. 3.6 и 3.7.3).

Для объявления указателя используется атрибут POINTER. При объявлении объекта-указателя фактически специфицируются свойства (тип, размерность и т.п.) тех объектов, которые могут быть связаны с данным указателем; если указатель является массивом, объявляется только размерность (число двоеточий), границы массива в описании опущены - они определяются только во время установления связи указателя с объектом-массивом.

Пример

REAL, DIMENSION (:, :), POINTER :: X, Y

Указатель можно интерпретировать как дескриптор, который содержит всю информацию, необходимую для полного описания и размещения в памяти объекта того же типа с теми же параметрами типа и с той же конфигурацией, что и в объявлении указателя. При объявлении указателя отводится область памяти для дескриптора, но область памяти для самого объекта не отводится. Дескриптор сначала создается пустой и заполняется во время установления связи с объектом.

Связь указателя с объектом может быть установлена:

при выполнении оператора присваивания указателю с данным указателем в левой части (см. 3.7.2.),

при выполнении оператора ALLOCATE, когда создается динамический объект (см. 3.7.3.).

После того как установлена связь указателя с объектом, указатель может появиться в любом месте, где может появиться обычный объект того же типа, с теми же параметрами типа и с той же конфигурацией, что и указатель. Значением операнда-указателя является значение объекта, связанного с ним в данный момент.

Аналогичное правило действует и для использования указателя в левой части встроенного оператора присваивания. Для присваивания значения собственно указателю служит уже упоминавшийся оператор присваивания указателю (см. пример в 3.7.2.).

3.7.2 Оператор присваивания указателю устанавливает связь указателя с существующим объектом, оператор NULLIFY разрывает связь указателя с объектом.

Примеры

! Атрибут TARGET означает, что к массиву MATR можно обращаться

! с помощью указателя

REAL, TARGET :: MATR (M, N)

REAL, POINTER :: ROW (:), WINDOW (:, :)

ROW => MATR (M, :) ! ROW связывается со строкой матрицы

! WINDOW связывается с секцией массива MATR

WINDOW => MATR (I-1:I+1, J-1:J+1)

Последний пример иллюстрирует еще одно полезное свойство указателя: в тех случаях, когда часто используется одна и та же секция массива, можно не писать каждый раз секцию, а использовать указатель в качестве псевдонима.

3.7.3 Для создания массивов, которые не были заранее явно объявлены в программе, используется оператор ALLOCATE, содержащий указатель. При выполнении такого оператора создается динамический объект, определяются его границы, объекту отводится область памяти, указатель связывается с этим объектом и может в дальнейшем использоваться для ссылки на него. Создаваемые объекты не имеют имени, поэтому ссылаться на них можно только с помощью указателей.

Пример

! Объявление указателей

REAL, DIMENSION (:, :), POINTER :: A, B

. . .

READ (*, *) N, M

! Создание и размещение динамических массивов

ALLOCATE (A (N, M), B (N, M))

При выполнении оператора DEALLOCATE освобождается память от тех динамических объектов, на которые ссылаются указатели, перечисленные в данном операторе.

Этот аппарат работы с создаваемыми массивами целесообразен в тех случаях, когда существенным является использование указателей; в противном случае лучше использовать механизм размещаемых массивов ( см. 3.6.).

3.8 Модули

Одним из наиболее важных новых средств языка является модуль - новый вид программных единиц. Программные единицы-модули служат для описания различных объектов (данных, производных типов, определяемых пользователем операций, процедур, интерфейсных блоков, namelist-списков), доступных другим программным единицам. Для доступа к объектам модуля, имеющим атрибут PUBLIC, используется оператор USE. Такие средства описания глобальных объектов являются более общими и гибкими, чем традиционный для Фортрана оператор COMMON.

Использование модулей вместе с аппаратом для описания новых типов и операций является удобным механизмом, обеспечивающим расширяемость языка; это позволяет создавать модули для конкретных приложений. Описание данных и операций над ними в модуле может быть скрыто от пользователя (такие объекты объявляются с атрибутом PRIVATE). Это позволяет при использовании модуля употреблять описанные в нем операции, не вникая в то, как эти операции выполняются (инкапсуляция).

Еще одно преимущество модулей заключается в том, что обеспечивается возможность зависимой (т.е. контролируемой) раздельной компиляции программных единиц. Это объясняется тем что информация, специфицируемая в модуле, доступна процессору при компиляции программных единиц, использующих данный модуль. Зависимая и в то же время раздельная компиляция повышает надежность программ и позволяет компилятору выполнять более широкий спектр оптимизирующих преобразований.

3.9 Поддержка объектно-ориентированного программирования

Предыдущие разделы уже позволяют читателю убедиться в том, что современный Фортран поддерживает значительную часть методологии объектно-ориентированного программирования (ООП).

ООП - это современная методология программирования. ООП позволяет использовать не только встроенные абстракции (как в традиционном программировании), но и определять собственные абстракции и тем самым позволяет описать программу в терминах близких к прикладной области.

Методология ООП ориентирована прежде всего для написания очень больших программ или набора программ, которые разрабатывают группы программистов. При использовании старых традиционных методов и старых языков программирования, такие программы или системы были трудны для понимания, сопровождения и модификации. Современные языки предлагают новые методы.

В книге [16] обсуждается языковая поддержка ООП для С++ и Ада 95. Язык Фортран в книге отнесен к языкам с низким уровнем абстракции. Это справедливо только в отношении “старого” Фортрана. Что касается современного Фортрана, отметим, что в описании стандарта явно не указывается, какие средства обеспечивают поддержку тех или иных элементов ООП (это и не требуется в официальном документе).

Однако, как показали проведенные исследования (проект РФФИ №00-01-00043), такие средства имеются: расширяемость типов и операций, возможность статического контроля соответствия типов и соответствия формальных и фактических аргументов при вызове процедур, механизм инкапсуляции для реализации абстрактных типов данных, cтатический полиморфизм и частично наследование.

3.10 Новшества для процедур

Основные новшества, касающиеся процедур, - следующие: внутренние и рекурсивные процедуры, возможность специфицировать аргументы по назначению (IN, OUT, INOUT), возможность использования необязательных и ключевых параметров при вызове процедур, средства задания явного интерфейса, а также большой набор новых встроенных процедур (в языке более 100 встроенных процедур: математических, справочных и др.).

Явный интерфейс задается с помощью интерфейсного блока; в некоторых случаях он является обязательным, так как позволяет правильно сгенерировать вызов процедуры; в других случаях использование интерфейсного блока позволяет проверить правильность вызовов процедур (например, проверить соответствие типов аргументов).

Важным новшеством в Фортране 95 является атрибут PURE. С помощью этого атрибута пользователь может объявить функцию без побочного эффекта. Вызов такой функции можно использовать в тех случаях, где возможна параллельная обработка без таких нежелательных последствий как недетерминизм.

Новыми являются поэлементные процедуры, т.е. процедуры, аргументами и результатами которых могут быть как скаляры, так и массивы; результат получается таким, как если бы процедура была применена к соответствующим элементам каждого из массивов-аргументов. В Фортране 90 были введены только встроенные поэлементные функции, в Фортране 95 появилась возможность использовать также определяемые пользователем поэлементные процедуры. Поэлементные процедуры обеспечивают дополнительные возможности для выражения параллелизма.

3.11 Средства поддержки параллельности

В предыдущих разделах уже отмечались средства языка, которые могут использоваться для параллельного программирования. Фортран 95 не ориентирован на многопроцессорные системы. Для таких систем разработаны специальные языки, которые будут обсуждаться во второй части обзора. Эти языки существенно используют новые возможности современных стандартов.

В то же время Фортран 90/95 содержит богатый набор средств ориентированных на архитектуру с векторными операциями. Необходимость таких средств (помимо дополнительных удобств ) вызвана появлением на современных ЭВМ аппаратных средств векторной обработки.

До появления этих средств в стандарте для таких компьютеров создавались векторизующие компиляторы, помогающие эффективно использовать возможности, заложенные в аппаратуре. Однако автоматическая векторизация (т.е. выявление скрытого параллелизма) требует довольно сложного анализа исходной программы, и при этом некоторые конструкции последовательных яэыков могут затруднить или даже сделать невозможной векторизацию. В некоторые системы программирования вводились специальные директивы, помогающие компилятору выполнять векторизацию исходной программы, были разработаны и языковые расширения. Достаточно полная информация об исследованиях проблем векторизации содержится в сборнике статей [17] и в статьях [18, 19]; отечественные разработки для ПС-3000 и ЕС1191 описаны в [20, 21].

В современные стандарты, как отмечалось выше, введены средства для работы с массивами и секциями массивов как с целыми объектами, векторные операции, стандартные процедуры для работы с массивами, поэлементные процедуры, условное присваивание массиву под управлением маски, параллельный цикл. Эти средства позволяют компилятору сгенерировать эффективный код с учетом особенностей аппаратуры.

язык фортран многопроцессорный память

3.12 Поддержка структурного программирования

Современные стандарты языка, в отличие от Фортрана 77, поддерживают структурное программирование. Язык имеет полный комплект современных управляющих структур. В частности, в язык введена структурная конструкция цикла DO - END DO, в которой отсутствует метка. Кроме того, заголовок цикла может иметь как традиционную форму (с управляющей переменной цикла), так и новую форму с ключевым словом WHILE или без управляющей информации.

Введены два новых оператора выхода из цикла EXIT и CYCLE. Оператор EXIT вызывает выход из цикла на оператор, непосредственно следующий за заключительным оператором цикла. Оператор CYCLE вызывает переход на следующую итерацию цикла. Использование операторов EXIT и CYCLE делает программу более наглядной и больше соответствует принципам структурного программирования, чем использование для тех же целей оператора GO TO и меток.

Конструкция выбора SELECT CASE - END SELECT позволяет выбрать для исполнения один из вариантов-блоков операторов в зависимости от значения некоторого выбирающего выражения.

Для удобства написания и чтения программ введены имена конструкций, которые позволяют идентифицировать конструкцию. Имя конструкции не может использоваться для передачи управления. Указание имени конструкции особенно полезно при вложенных конструкциях и является одним из элементов хорошего стиля программирования.

Средства работы с массивами как с целыми объектами (см. 3.5.) также служат улучшению структуры программы, так как во многих случаях позволяют обходиться без циклов и условных операторов.

3.13 Концепция эволюционного развития языка

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

Учитывая эти противоречивые факторы, было принято следующее решение: элементы языка, которые являются кандидатами на удаление, заранее объявляются устаревшими, нерекомендуемыми для использования.

В работе [9] предложен перечень средств, которые следует признать устаревшими в будущем стандарте Фортрана, даны обоснования и предложения по замене устаревших черт современными элементами языка.

Отметим еще, что современный стандарт требует, чтобы компилятор сообщал пользователю не только конструкции, которые не отвечают требованиям языка, но также и устаревшие конструкции.

4. Перспективы развития языка

В настоящее время разрабатывается проект будущего стандарта, рабочее название которого Фортран 2000 (на некотором этапе использовалось название Фортран 200x). Все средства Фортрана 95 сохранены (кроме быть может признанных устаревшими).

Проект языка Фортран 2000 предусматривает весьма существенные нововведения. Назовем лишь некоторые из наиболее значимых направлений:

Развитие средств объектно-ориентированного программирования (предполагается полный набор средств OOП).

Средства взаимодействия с Си.

Параметризованные производные типы.

Новые средства ввода/вывода (асинхронный ввод/вывод и др.).

Новые возможности, касающиеся размещаемых массивов.

Исключительные ситуации.

Более полная интеграция с операционной системой.

Для того чтобы эффективно реагировать на новые требования, не дожидаясь принятия следующего стандарта (Фортран 2000), было решено выделить наиболее приоритетные новые черты и выработать проекты для таких новых черт в качестве Технических отчетов. В дальнейшем такие средства должны быть вставлены в неизмененном виде в следующую ревизию основного стандарта.

Эти технические отчеты позволяют реализаторам добавить новые черты в компиляторы Фортрана 95, не дожидаясь завершения разработки будущего стандарта в полном объеме. Если потребуются какие-либо модификации, то разработчики стандарта будут стремиться к тому, чтобы минимизировать изменения в существующих коммерческих реализациях.

К настоящему времени завершена разработка следующих двух Технических отчетов, которые одобрены и уже являются стандартами:

Новые возможности, касающиеся размещаемых массивов [22].

Исключительные ситуации для операций с плавающей точкой[23].

Предполагается, что стандарт Фортран 2000 будет утвержден в конце 2004 года. В работе [24] уже содержатся некоторые предложения по дальнейшему развитию языка после утверждения Фортрана 2000.

ЧАСТЬ II. Языки для параллельного программирования, основанные на Фортране

5. Введение. Подходы к реализации параллельности

Появление суперкомпьютеров с параллельной архитектурой, как за рубежом, так и в нашей стране (см., например, [25-27]), приводит к необходимости разработки эффективных и удобных для программиста средств, обеспечивающих возможность реализовать параллельность, которую допускает выбранный им алгоритм.

Достаточно полный обзор и анализ зарубежных и отечественных систем для высокопроизводительных ЭВМ по состоянию на 1990 год содержится в работе [28]. В работах [29-31] анализируются различные аспекты параллельного программирования. В последующие годы это направление исследований развивалось очень интенсивно.

Некоторые виды распараллеливания могут быть выполнены компилятором автоматически. Проблемам автоматического распараллеливания последовательных программ посвящено большое количество исследований как за рубежом (см., например, [32]), так и в нашей стране (проект РФФИ №97-01-00977, [33]). Описание некоторых зарубежных систем автоматического распараллеливания (наряду с другой весьма полезной информацией) можно найти на сайте http://www.parallel.ru/. В решении этой проблемы имеются определенные результаты, однако автоматическое распараллеливание остается весьма сложной проблемой, а в некоторых случаях решить ее на статическом уровне невозможно.

Разработаны и продолжают разрабатываться как специальные языки для параллельного программирования, так и расширения для традиционных языков в т.ч. и для современного Фортрана [31].

Очевидно, что для обеспечения переносимости с одной платформы на другую необходима стандартизация и унификация таких средств. Унификация средств распараллеливания в языках высокого уровня - довольно сложная проблема. Трудность заключается в том, что имеется большое разнообразие архитектурных решений, позволяющих использовать возможности распараллеливания. Тем не менее в настоящее время уже разработаны системы, включающие средства, которые стали фактическими стандартами для параллельных вычислительных систем различной архитектуры (см. 6-8). Эти средства реализованы для многих параллельных компьютеров.

Рассмотренные в первой части обзора стандарты Фортрана, хотя и содержат некоторые средства поддержки параллельности, не имеют специальных средств, ориентированных на многопроцессорные системы. Однако разработанные на базе этих стандартов параллельные языки существенно используют новые возможности Фортрана 90/95 (динамические и размещаемые массивы, указатели, структуры, модули, явный интерфейс, определяемые пользователем операции, большое число новых встроенных процедур и др.).

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

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

Для разработки прикладных программ более удобным и более естественным по сравнению с библиотечными средствами, нам представляется подход, основанный на введении расширений непосредственно в язык. Помимо удобства, этот подход позволяет компилятору выполнить некоторые дополнительные виды оптимизации.

При разработке языковых расширений обычно возникают две основные проблемы:

выбор специальных средств для поддержки параллельности;

отображение выбранных средств в конкретную языковую среду.

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

При разработке языковых средств для поддержки параллельности имеется две основные стратегии:

создание новых языковых конструкций, или

разработка специальных директив, которые позволяют пользователю специфицировать некоторые виды параллельности; такие директивы обычно оформляются в виде комментариев и переводятся препроцессором в операторы Фортрана с вызовами подпрограмм, которые и реализуют параллельную обработку.

Директивы-комментарии позволяют программисту использовать один вариант исходной программы и для последовательного, и для параллельного выполнения, поскольку компилятор, ориентированный на последовательное выполнение, будет игнорировать такие комментарии.

Ниже рассматриваются следующие модели параллельных вычислений, для которых разработаны языковые средства:

модель, ориентированная на архитектуру с распределенной памятью (см. 6);

модель, ориентированная на архитектуру с общей памятью (см. 7);

модель, ориентированная на разбиение данных (см. 8).

Cредства, ориентированные на архитектуру с векторными операциями, были рассмотрены в первой части данного обзора (см. 3.5. и 3.11.).

6. Средства поддержки параллельности для многопроцессорных систем с распределенной памятью

6.1 Общие сведения

Система с распределенной памятью (distributed memory) обычно состоит из некоторого количества вычислительных узлов, соединенных коммуникационной сетью. Каждый узел имеет только локальную память. Такая архитектура обеспечивает независимое выполнение различных частей параллельной программы на выделенных процессорных узлах. Обмен информацией между различными частями программы осуществляется посредством посылки и приема сообщений по межпроцессорной сети.

Программы для систем с распределенной памятью обычно используют механизм задач (процессов) и передачи сообщений (обмен данными). Исходная программа разбивается на задачи (подзадачи), которые могут выполняться параллельно на разных процессорных узлах, и связь между задачами осуществляется с помощью передачи сообщений. В основе такого подхода лежит фундаментальная модель Хоара [34].

Очевидно, что не все программы позволяют эффективно использовать распределенные системы. Так как обмены сообщениями требуют затрат времени для своего выполнения, важно, чтобы время, необходимое для обмена сообщениями, не доминировало над временем выполнения программы. Распределенные системы целесообразнее использовать для тех вычислительных задач, которые могут быть разбиты на такие слабосвязанные подзадачи, для которых время выполнения существенно больше, чем время обмена между ними.

Имеются разные подходы как к выбору конкретных средств реализации механизма задач и передачи сообщений, так и отображению этих средств в языке. В большинстве систем (PVM, MPI, EXPRESS, P4, PARMACS и др.) механизм задач реализуется с помощью библиотечных вызовов [35-39].

6.2 Система MPI

Из сиcтем, ориентированных на архитектуру с распределенной памятью и представляющих собой набор библиотечных интерфейсов, наибольшее распространение получили MPI и PVM. Система MPI (Message Passing Interface) [37] фактически является международным стандартом, в ней обобщен опыт использования подобных систем, который получил дальнейшее развитие.

MPI включает большой набор средств, среди которых операции передачи сообщений от одного источника (процесса) к другому. Каждому из предусмотренных (по способу синхронизации) видов передачи сообщений соответствует своя операция; необходимая для выполнения операции информация эадается с помощью параметров процедур. Имеется возможность одновременного выполнения вычислений и коммуникаций. Предусмотрены коллективные операции, которые включают как широковещательную передачу сообщений, так и функции редукции. Имеются средства, позволяющие пользователю специфицировать топологию процессов.

Поддерживаются все типы данных, имеющиеся в Фортране и С, имеются и собственные типы данных. Кроме того, для предотвращения коллизии с правилами типов языков верхнего уровня в MPI предусмотрены системные (так называемые "скрытые") объекты, внутреннее представление которых скрыто от пользователя. Предусмотрена возможность конструирования производных типов (структур), которые обеспечивают возможность с помощью одного вызова передать объекты данных разных типов, передать данные, не расположенные в непрерывной области памяти или передать секции массивов.

Для адресации используются группы процессов и коммуникаторы. Коммуникаторы и контексты обеспечивают возможность делить общее коммуникационное пространство на отдельные замкнутые области.

Дальнейшее развитие эти средства получили в системе MPI-2 [39]. MPI не поддерживает объектно-ориентированное программирование, хотя в MPI-2 сделан некоторый шаг в этом направлении. Работа [40] содержит аналитический обзор систем, которые вводят объектную ориентацию в параллельные вычисления с использованием MPI.

В работе [41] описываются средства использования MPI в программах на Фортране 90. Система MPI реализована на многих параллельных компьютерах; система адаптирована для отечественных многопроцессорных вычислительных систем: МВС-100 и МВС-1000 (проекты РФФИ №99-01-00922 и №99-07-90443 [42]).

Подводя некоторые итоги, отметим, что система MPI является хорошим инструментом для распараллеливания широкого класса задач, однако относительно низкий уровень библиотечных средств, чрезмерная детализация приводят к определенным неудобствам при использовании таких систем прикладными специалистами. Подобные системы являются хорошим инструментальным средством для реализации языков более высокого уровня (см. раздел 8).

6.3 Система GNS

В нашей стране разработана и реализована система программирования GNS (включающая Фортран GNS и С GNS; проект РФФИ №96-01-00493) [43-45], которая ориентируется не на библиотечные вызовы, а на введение непосредственно в язык новых конструкций для использования в распределенных системах. Система является развитием предложений в работах [46, 47]. Использование языковых расширений обеспечивает больше удобств для программистов, чем библиотечные вызовы.

Рассмотрим некоторые основные черты этой системы. Прикладная программа может содержать несколько задач, которые могут выполняться параллельно на разных процессорах, при этом число задач не ограничивается числом процессоров.

Каждая задача получает уникальный идентификатор, который служит в качестве адреса отправителя или получателя при передаче сообщения. Задача использует только локальную область памяти без разделения данных с другими задачами.

В системе предусмотрены две модели параллелизма - динамическая и статическая. В статическом варианте все задачи запускаются непосредственно после загрузки. В динамической модели прикладная программа должна содержать одну начальную задачу, в статическом варианте это требование не является обязательным. Динамическая модель предполагает динамическое создание и завершение задач. Выполнение программы начинается с выполнения начальной задачи. Она создает другие задачи, которые, в свою очередь, могут также создавать новые задачи. Динамическое порождение задач позволяет эффективно использовать вычислительные ресурсы и разрабатывать настраиваемые программы.

...

Подобные документы

  • Исторические предшественники компьютеров. Появление первых персональных компьютеров. Концепция открытой архитектуры ПК. Развитие элементной базы компьютеров. Преимущества многопроцессорных и многомашинных вычислительных систем перед однопроцессорными.

    курсовая работа [1,7 M], добавлен 27.04.2013

  • Архитектуры вычислительных систем сосредоточенной обработки информации. Архитектуры многопроцессорных вычислительных систем. Классификация и разновидности компьютеров по сферам применения. Особенности функциональной организации персонального компьютера.

    контрольная работа [910,2 K], добавлен 11.11.2010

  • Технология разработки параллельных программ для многопроцессорных вычислительных систем с общей памятью. Синтаксис, семантика и структура модели OpenMP: директивы, процедуры и переменные окружения. Распараллеливание по данным и операциям, синхронизация.

    презентация [1,2 M], добавлен 10.02.2014

  • Классификация параллельных вычислительных систем. Существенные понятия и компоненты параллельных компьютеров, их компоненты. Особенности классификаций Хендера, Хокни, Флинна, Шора. Системы с разделяемой и локальной памятью. Способы разделения памяти.

    курсовая работа [331,1 K], добавлен 18.07.2012

  • Лаконичность, стандартный набор конструкций управления потоком выполнения, структур данных и обширный набор операций в основе языка программирования Си. Фортран как первый язык программирования с транслятором. Перевод программных кодов с Фортрана на Си.

    отчет по практике [77,4 K], добавлен 18.10.2012

  • Классификации архитектур вычислительных систем. Организация компьютерных систем. Устройство центрального процессора. Принципы разработки современных компьютеров. Эволюция микропроцессорных систем. Увеличение числа и состава функциональных устройств.

    дипломная работа [1,4 M], добавлен 29.01.2009

  • Достоинства многопроцессорных систем. Создание программы, реализующей работу мультипроцессорной системы с общей памятью по обработке различного количества заявок, а также различного количества процессоров. Модели вычислений на векторных и матричных ЭВМ.

    курсовая работа [162,2 K], добавлен 21.06.2013

  • Оценка современного этапа развития компьютерных технологий. История развития, классификации, сведения и уровни языков программирования. Обзор современных языков программирования: Си, его разовидности, Паскаль, Фортран, Бейсик - тенденция их развития.

    курсовая работа [46,5 K], добавлен 22.12.2010

  • Процедура сложения и вычитания матриц (с учетом коэффициента перед матрицами). Основные концепции языка Turbo Pascal. Фортран как один из пионеров программирования Дейкстрой. Первый компилятор Паскаля на платформах DEC. Основные стандарты языка.

    контрольная работа [21,6 K], добавлен 08.03.2011

  • Знакомство с историей развития многопроцессорных комплексов и параллельных вычислений. Персональные компьютеры как распространенные однопроцессорные системы на платформе Intel или AMD, работающие под управлением однопользовательских операционных систем.

    презентация [1,1 M], добавлен 22.02.2016

  • Написание программы, реализующей работу мультипроцессорной системы с общей памятью, которая обрабатывает очереди заявок переменной длины. Анализ типовой архитектуры мультипроцессорной системы. Описание процедур и переменных, используемых в программе.

    курсовая работа [158,4 K], добавлен 21.06.2013

  • Основные приёмы и возможности алгоритмических языков программирования Fortran. Табуляция функции на языке Fortran, ее графический вид и блок-схема алгоритма. Выполнение расчетов на алгоритмическом языке Фортран. Текст (листинг) Fortran-программы.

    курсовая работа [31,9 K], добавлен 15.02.2011

  • Анализ средств визуализации. Разработка программы-расширения для визуализатора инженерных и научных расчетов Compaq Array Visualizer на языке Фортран. Оценка экономической эффективности и конкурентоспособности созданного программного обеспечения на рынке.

    дипломная работа [335,4 K], добавлен 10.09.2010

  • Параллельная машина как процессоров, памяти и некоторые методы коммуникации между ними, сферы применения. Рассмотрение особенностей организации параллельности вычислений. Анализ типовых схем коммуникации в многопроцессорных вычислительных системах.

    курсовая работа [669,3 K], добавлен 07.09.2015

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

    презентация [175,6 K], добавлен 11.10.2014

  • Структура, специфика и архитектура многопроцессорных систем; классификация Флинна. Организация взаимного исключения для синхронизации доступа к разделяемым ресурсам. Запрещение прерываний; семафоры с драйверами устройств. Кластеры распределения нагрузки.

    курсовая работа [455,9 K], добавлен 07.06.2014

  • Особенности параллельного программирования высокопроизводительных многопроцессорных или многомашинных вычислительных комплексов. Основные положения и понятия стандартов MPI и OpenMP. Средства компиляции параллельных операторов для языков C и Fortran.

    лекция [177,9 K], добавлен 22.10.2014

  • Исследование основных отличий ассоциативных массивов от массивов скаляров. Разработка библиотеки классов. Выбор языка программирования. Сравнение языка C++ с Delphi, Java и JavaScript. Изучение методики тестирования и структуры тестового приложения.

    практическая работа [390,2 K], добавлен 06.01.2013

  • Изучение особенностей операционной системы, набора программ, контролирующих работу прикладных программ и системных приложений. Описания архитектуры и программного обеспечения современных операционных систем. Достоинства языка программирования Ассемблер.

    презентация [1,3 M], добавлен 22.04.2014

  • Историческое развитие средств вычислений. Структурные схемы вычислительных систем. Развитие элементной базы и развитие архитектуры самих систем. Основные классы вычислительных машин. Каналы передачи данных. Требования к составу периферийных устройств.

    реферат [48,7 K], добавлен 09.01.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.