13. Для каких соотношений (время вычислений)/(время взаимодействия) имеет смысл распараллеливать решение громоздкой задачи?
Универсальный язык программирования СС++ (Compositional C++) является расширенным вариантом языка программирования С++ ориентированным на программирование задач для многопроцессорных вычислительных систем с распределенной и разделяемой памятью и развитой внутренней и внешней коммуникационной средой. В него включены специальные конструкции для описания взаимодействующих процессов, расположенных на одном и на разных процессорах, конструкции для определения и указания места нахождения процессов, их порождения и запуска, а также для построения и настройки коммуникационной среды для обмена данными. Эти нововведения позволяют в параллельных программах участки последовательных, параллельных и взаимодействующих программных секций оттранслировать в СС++ по частям.
Из основных конструкций C++ рассмотрим лишь те, которые использованы в приведенных ниже примерах на языке СС++. Предполагается, что конструкции базового языка С читателю известны. За незначительными исключениями С++ является расширением языка С ANSI (American National Standards Institute – Американский национальный институт стандартов) [10, 11]. Правильные программы, написанные на базовом языке С имеют силу и в С++. В последнем добавлен строгий контроль типов и обеспечена языковая поддержка абстракции данных и объектно-ориентированного программирования.
Стандарт C ANSI вводит функциональные прототипы в языке C. Функциональный прототип определяет тип каждого функционального параметра и возвращаемого значения функции (функциональную сигнатуру). Например:
/* Объявление функции с именем a_function имеет такой вид */
int a_function(float b, double c);
/* Определение функции с именем a_function с ее описанием */
int a_function(float b, double c) {... /* Тело функции */ }
C++ требует введения предварительного описания функциональных прототипов еще до момента вызова функции на исполнение и предписывает непротиворечивое их функциональное использование в программных файлах. Это позволяет транслятору обнаруживать различие между функциями, имеющими одинаковое имя, но различные сигнатуры параметров, и определять, какую именно версию функции в заданный момент необходимо использовать.
В программах на C, библиотечные подпрограммы malloc и free используются для динамического распределения памяти. В C++ определены два дополнительных оператора, new и delete, использование которых можно проиллюстрировать следующими кодовыми фрагментами:
Struct S /* Определение структуры */
{
. . . /* Тело Структуры */
};
S *sPtr = new S; /* Распределение образца структуры S */,
delete sPtr; /* Удаление из памяти образца S */
/* Распределение массива */
IntiPtr = newint[25]; /* целых чисел */,
delete[] iPtr; /* Удаление образца массива чисел */
Оператор new передает описание типа данных исходного объекта (структуры S – в первом случае, целочисленного массива int[25] – во втором) указателю *iPtr на динамически распределенные данные соответствующих типов. Этим объектам выделяется область памяти, начальный адрес которой записан в указатель *iPtr. Оператор delete освобождает динамически распределенную память, устраняя связь между объектом и его образцом. Выбор момента, когда массив объектов должен быть «стерт», является обязанностью программиста.
Наиболее значительной особенностью языка C++, которая отличает его от C, является встроенная концепция классов. Понятие класса можно представить как некое обобщение понятия структуры в C. В базовом языке C структурная группа вместе с элементами данных различных типов выступает под единым именем, а в C++ структуры дополнительно могут включать еще и функции принадлежности к классу. К функциям, являющимся членами класса, можно обращаться только посредством указателя на объект соответствующего типа. Класс в C++ определяет порядок построения конкретных имен функций и данных, которые в дальнейшем составляют новый тип объектов. Классы в C вводятся при помощи ключевых слов struct и union, а в C++ – ключевым словом class.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.