Главная страница

контрольная. Контрольная работа Вариант 7 в чем особенность кластерных вычислительных систем Кластеризация


Скачать 41.6 Kb.
НазваниеКонтрольная работа Вариант 7 в чем особенность кластерных вычислительных систем Кластеризация
Дата01.08.2019
Размер41.6 Kb.
Формат файлаdocx
Имя файлаконтрольная.docx
ТипКонтрольная работа
#84716

Контрольная работа

Вариант 7
7. В чем особенность кластерных вычислительных систем?

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

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

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

В отличие от "мэйнфреймов" – суперкомпьютеров с традиционной архитектурой - кластер строится на базе массово выпускаемых компонентов и состоит из стандартных серверов – вычислительных узлов, объединенных высокопроизводительной системной сетью – интерконнектом. 
17. Назовите важнейшие свойства архитектуры ВС.

Отметим важнейшие свойства архитектуры ВС:

  1. Масштабируемость (Scalability) вычислительных систем

  2. Универсальность ВС. Вычислительные системы алгоритмически и структурно универсальны.

  3. Производительность (Performance) вычислительных систем

  4. Реконфигурируемость (Programmability) вычислительных систем

  5. Надёжность и живучесть вычислительных систем

  6. Самоконтроль и самодиагностика (Self-testing and Self-diagnostics) вычислительных систем

  7. Технико-экономическая эффективность (Technical-economical Efficiency) вычислительных систем


27. Какое расписание является оптимальным?

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



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

, т.е. один и тот же процессор не должен назначаться разным операциям в один и тот же момент;

, т.е. к назначаемому моменту выполнения операции все необходимые данные уже должны быть вычислены (R – дуги).
37. Как определяется понятие стоимости вычислений?

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

Cp=pTp

В связи с этим можно определить понятие стоимостно-оптимального (cost-optimal) параллельного алгоритма как метода, стоимость которого является пропорциональной времени выполнения наилучшего последовательного алгоритма.
47. Зависят ли параметрически правила масштабирования от количества процессоров?

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

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

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

3. возможность зависания параллельных участков - бесконечная отсрочка – планирование, при котором одна или несколько задач должны ожидать до тех пор, пока не произойдет некоторое событие или не создадутся определенные условия. Взаимоблокировка — каждая из задач будет ожидать до тех пор, пока другая не освободит доступ к общим данным.

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

5. опасность использования сторонних процедур и библиотек;
67. Как определяются общие и локальные переменные потоков?

Параметры shared и private директивы for для управления доступа к переменным уже использовались в примере 6.2. Параметр shared определяет переменные, которые будут общими для всех потоков. Параметр private указывает переменные, для которых в каждом потоке будут созданы локальные копии - они будут доступны только внутри каждого потока в отдельности (значения локальных переменных потока недоступны для других потоков). Параметры shared и private могут повторяться в одной и той же директиве несколько раз, имена переменных должны быть уже ранее определены и не могут повторяться в списках параметров shared и private.

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

default ( shared | none )

При помощи этого параметра можно отменить действие правила по умолчанию (default(none) ) или восстановить правило, что по умолчанию переменные программы являются общими (default(shared) ).

Следует отметить, что начальные значения локальных переменных не определены, а конечные значения теряются при завершении потоков. Для их инициализации можно использовать параметр firstprivate директивы for, по которому начальные значения локальных переменных будут устанавливаться в значения, которые существовали в переменных до момента создания локальных копий. Запоминание конечных значений обеспечивается при помощи параметра lastprivate, в соответствии с которым значения локальных переменных копируются из потока, выполнившего последнюю итерацию. Поясним сказанное на примере Рис. 6.5. На рисунке показана переменная sum, которая определена как lastprivate в директиве parallel for. Для этой переменной создаются локальные копии в каждом потоке, при завершении параллельного участка программного кода значение локальной переменной потока, выполнившего последнюю итерацию цикла, переписывается в исходную переменную sum.
77. Как используются постоянные локальные переменные потоков (директивы threadprivate и copyin)?

Использование параметра lastprivate позволяет сохранить значения локальной переменной одного из потоков, но во многих случаях для обработки могут понадобиться значения всех локальных переменных. Данная возможность может быть обеспечена, например, сохранением этих значений в общих переменных – более подробно правила работы с общими переменными будет рассмотрена в следующем разделе. Другой подход состоит в использовании коллективных операций над локальными переменными, предусмотренными в OpenMP. Задание коллективной операции происходит при помощи параметра reduction директивы for:

reduction (operator: list)

где список list задает набор локальных переменных (повторное описание в параметре private переменных из списка list не требуется), для которых должна быть выполнена коллективная операция, а поле operator указывает тип этой операции. 
87. Какие способы конструирования типов имеются в MPI?

Для снижения сложности в MPIпредусмотрено несколько различных способов конструирования производных типов:

  • непрерывный способ позволяет определить непрерывный набор элементов существующего типа как новый производный тип;

  • векторный способ обеспечивает создание нового производного типа как набора элементов существующего типа, между элементами которого имеются регулярные промежутки по памяти. При этом размер промежутков задается в числе элементов исходного типа, в то время как в варианте H-векторного способа этот размер указывается в байтах;

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

  • структурный способ обеспечивает самое общее описание производного типа через явное указание карты создаваемого типа данных.


97. Дан одномерный массив A из n элементов, расположенный в общей памяти. Написать программу, в которой нити с четными номерами выводят на экран четные элементы массива A, а нити с нечетными номерами выводят на экран нечетные элементы массива A. (Примечание: использование опции if директивы parallel).
program chetn;

var

A:array [1..100] of integer;

N, i:integer;

begin

write('kol-vo elementov:');

readln(N);

writeln('elementy:');

for i:=1 to N do

read(A[i]);

writeln('chetnie elementy');

for i:=1 to N do

begin

i:=i+1;

write(A[i], ' ');

end;

readln;

readln;

end.
107. Написать программу параллельного решения задачи Дирихле методом Гаусса-Зейделя для 4-х процесcорной ВС. Размерность массивов N = 7 *100=700. Использовать MPI.

Program lab2;

const n=700;

type matrix=array [0..n,0..n] of real;

var u,u0 :matrix;

    i,j   :integer;

    s,eps,h,x,y :real;

 begin

 h:=1/n;

  write('eps='); readln(eps);

  for i:=1 to n-1 do

  for j:=1 to n-1 do u0[i,j]:=0;

  for j:=0 to n do

  begin

  y:=j*h;

  u0[0,j]:=exp(y);

  u0[n,j]:=exp(1+y);

  end;

 

  for i:=0 to n do

  begin

  x:=i*h;

  u0[i,0]:=exp(x);

  u0[i,n]:=exp(x+1);

  end;

 

  repeat

  for i:=0 to n do

  for j:=0 to n do

  u[i,j]:=u0[i,j];

 

 

  for i:=1 to n-1 do

  begin

  x:=i*h;

  for j:=1 to n-1 do

   begin

   y:=j*h;

   u[i,j]:=1/4*(u[i+1,j]+u[i-1,j]+u[i,j+1]+u[i,j-1]-2*exp(x+y)*sqr(h));

   end;

  end;

 

    s:=0;

  for i:=1 to n do

  for j:=1 to n do

   if sthen s:=abs(u[i,j]-u0[i,j]);

  for i:=0 to n  do

  for j:=0 to n do u0[i,j]:=u[i,j];

  until s
 

   s:=0;

   for i:=0 to n do

   begin

   x:=i*h;

   for j:=0 to n do

   begin

   y:=j*h;    if sthen s:=abs(u[i,j]-exp(x+y));

  end;

  end;

   writeln ('s=',s);

  readln

end.


написать администратору сайта