Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VVS_ex_fin.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
8.24 Mб
Скачать
  1. Коллективные передачи данных в mpi. Виды коллективных операций. Барьерная синхронизация, распределение и сбор данных. Примеры.

Коллективные передачи данных в MPI.

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

Коллективные операции бывают 5 видов:

1) барьерная синхронизация

2) широковещательная рассылка

3) распределение данных по процессам

4) сбор данных с процессов

5) редукция (операции приведения)

Барьерная синхронизация

int MPI_Barrier(MPI_Comm comm );

В ызывается всеми процессами указанной области связи. Каждый процесс вызывает эту функцию блокировки, пока эту функцию не вызовут абсолютно все процессы области связи. После этого все процессы одновременно разблокируются.

Функции распределение данных по процессам

Int MPI_Scatter(void *sendbuf, int sendcount MPI_Datatype sendtype, void *recvbuf, int recvcount MPI_Datatype recvtype, int root, MPI_Comm comm);

Распределяет данные от одного процесса всем процессам области связи, разделяя их на блоки

Int MPI_Scatterv(void *sendbuf, int sendcount MPI_Datatype sendtype,int *displs, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm);

Для тех же условий, но распределение происходит неравными блоками.

sendbuf – адрес в памяти с которого распределяющий процесс считывает посылаемые данные; sendcount – число элементов в первом блоке; datatype – тип посылаемых элементов. Вторая половина аналогична, для приема данных. root – номер процесса отправителя; comm – идентификатор (id) области связи, в которой осуществляется передача; displs – массив размерностей блоков.

Функции сбора данных с процессов

int MPI_Gather ( void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int dest, MPI_Comm comm);

Сбор данных с процессов на один процесс.

dest – номер принимающего процесса

int MPI_Gatherv ( void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm );

root – номер процесса сборщика; comm – идентификатор (id) области связи, в которой существляется передача; displs – массив размерностей блоков; recvcount – массив номеров элементов получаемых от каждого процесса (задается только root).

int MPI_Allgather ( void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm )

Совмещение функций MPI_Gather и MPI_Bcast

  1. Коллективные передачи данных в mpi. Виды коллективных операций. Рассылка данных и их редукция. Примеры.

Коллективные передачи данных в MPI.

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

Коллективные операции бывают 5 видов:

1) барьерная синхронизация

2) широковещательная рассылка

3) распределение данных по процессам

4) сбор данных с процессов

5) редукция (операции приведения)

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

Int MPI_Bcast(void *buf, int count MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm);

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

buf – адрес в памяти процесса, с которого отправляющий процесс посылает данные и куда все процессы сохраняют принимаемые данные; datatype – тип посылаемых элементов; source – номер процесса отправителя; msgtag – тег сообщения; comm – идентификатор (id) области связи, в которой осуществляется передача.

Эту функцию должны вызывать все процессы с одинаковыми параметрами, кроме *buf.

Int MPI_Alltoall(void *sbuf, int scount MPI_Datatype stype, void *rbuf, int rcount MPI_Datatype rtype, MPI_Comm comm);

Позволяет всем процессам разослать всем процессам их данные.

sbuf – адрес в памяти, откуда считываются данные для посылки; scount – число элементов в посылаемом сообщении; datatype – тип посылаемых элементов. Вторая половина аналогична, для приема данных. comm – идентификатор (id) области связи, в которой осуществляется передача.

Функции редукции

int MPI_Reduce( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm ) с сохранением результата в адресном пространстве одного процесса

Сбор данных с процессов и преобразование их.

sendbuf – буфер посылки; recvbuf – буфер приема; root – номер процесса собирающего данные;

op – id операции, которую необходимо провести над данными, которые принимает процесс:

1) стандартные операции приведения

2) пользовательские операции приведения

MPI_SUM

MPI_LAND (лог)

MPI_BAND (поразрядные)

MPI_LOR (лог)

MPI_BOR (поразрядные)

Пользовательские операции приведения создаются с помощью следующей функции:

int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op );

int MPI_Allreduce ( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm ); с сохранением результата в адресном пространстве всех процессов

П

#include “mpi.h”

void main(int argc char** argv)

{ int i,j,sum,rank,size,A[N][N];

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

MPI_Comm_size(MPI_COMM_WORLD, &size);

for (i=(int)rank*N/size, i<(int)(rank+1)*N/size,i++)

{ S[i]=0

for (j=0,j<size(в общем случае д.б. N), j++)

S[i]=A[i][j];}

MPI_Reduce(&S[(int)rank*N/size],$sum, (int)N/size,

MPI_COMM_WORLD)

if(rank==0) printf(”sum=%d”,sum);

MPI_Finalize;

}

ример:

10. Группы процессов и области связи в MPI. Операции с группами процессов. Добавление и удаление групп, логические операции, функции и примеры.

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

Области связи необходимы:

1. Структурирование и ранжирование процедур передачи данных.

2. Устранение ошибок при планировании передач.

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

4. Создание одной программы несколькими программистами.

5. Учёт структуры программы при планировании операций передач данных.

6. Учёт топологии вычислительной системы при планировании операций и передачи данных.

Операции с группами процессов:

1. Создание групп.

2. получение информации о группе.

3. Объединение групп

4. Пересечение групп

5. Разность групп

6. Создание области связи на основе группы

7. Удаление группы

Создание группы процессов

int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)

comm.- идентификатор области связи

groupидентификатор группы связанной с областью связи comm.

Удаление группы

int MPI_Group_free (MPI_Group *group)

Создание новой группы процессов из n процессов имеющейся группы

int MPI_Group_incl (MPI_Group oldgroup,int n,int *ranks, MPI_Group newgroup)

Объединение двух групп (или)

int MPI_Group_union (MPI_Group group1, MPI_Group group2, MPI_Group newgroup)

Исключение процессов из группы oldgroup

int MPI_Group_excl(MPI_Group oldgroup,int n,int *ranks, MPI_Group newgroup)

Создание новой группы из разности двух старых

int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group newgroup)

Создание новой группы из пересечения(и)

int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group newgroup)

11. Группы процессов и области связи в MPI. Виды областей связи. Операции с интракоммуникаторами (функции и примеры). Интеркоммуникаторы.

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

Области связи необходимы:

1. Структурирование и ранжирование процедур передачи данных.

2. Устранение ошибок при планировании передач.

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

4. Создание одной программы несколькими программистами.

5. Учёт структуры программы при планировании операций передач данных.

6. Учёт топологии вычислительной системы при планировании операций и передачи данных.

Два вида областей связи:

1. Интракоммуникаторы – в область связи включаются все процессы группы. Процессы привязаны к некоторой группе – MPI_Comm_World по умолчанию или созданной. Можно создать интракоммуникатор на основе уже имеющегося, разделив его на части.

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

Операции с интракоммуникаторами:

    1. Создание и удаление интракоммуникатора:

дублирование имеющейся области связи

int MPI_Comm_dup(MPI_Comm oldcm, MPI_Comm newcm)

создание области связи из подмножества процессов group

другой области связи

int MPI_Comm(MPI_Comm oldcm, MPI_group group, MPI_Comm newcm)

удаление области связи

int MPI_Comm_free(MPI_Comm comm)

2. Получение информации о процессах

12. Стандарт OpenMP. Идентификация в OpenMP. Схема выполнения OpenMP программы. Задание параллельных областей программы. Определение и задание числа потоков. Частные и общие данные в параллельной области.

OpenMP – стандарт для программирования на масштабируемых мультипроцессорных системах с общей памятью. OpenMP предоставляет набор прагм, процедур и переменных среды, которые программисты могут использовать для определения параллелизма в программах на Фортране, C и C++. В отличие от OpenMP, интерфейс MPI порождает несколько процессов, которые затем взаимодействуют по протоколу TCP/IP. Так как эти процессы не используют общее адресное пространство, они могут выполняться на удаленных компьютерах. В OpenMP ветви параллельной программы выполняются непараллельными процесссами, а параллельными потоками(threads) одного процесса, при этом переменные процесса по умолчанию доступны всем потокам.

Кроме директив OpenMP по необходимости могут также вставляться функции из библиотеки OpenMP. При компиляции необходимо использовать ключ /openmp (свойства проекта, C++ compile). В OpenMP имеются три типа идентификаторов:

1. Директивы(основной тип идентификаторов) Игнорируются компиляторами, неподдерживающими OMP. Бываю 2х типов: распределения вычислений и синхронизации.

2. Функции. Исп. В основном для работы с настройками, переменными окружения.

3. Переменные окружения.

Формат директивы OpenMP

#pragma <имя директивы> [список опций (клауз)]

Формат клаузы <имя клаузы> (параметры клаузы)

Формат функции omp_<категория>_<ключ.слово1>_<ключ.слово2>_...(парам1,парам2)

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

- задание параллельной области:

#pragma omp parallel

{<участок программы, выполняемый несколькими нитями>}//неявная барьерная синхронизация

<список операторов, выполняемых одним потоком>

Схема выполнения программы

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

Изменение числа нитей:

1. С помощью клаузы(устанавливается переменная окружения OMP_NUM_THREADS).

#pragma omp parallel num_threads (<число нитей>)

2. С помощью функций:

int omp_get_num_threads() – возвращает число нитей в паралл. области (аналог size в MPI).

int omp_get_thread_num() – узнать номер нити, кот. выполняется поток (аналог rank в MPI).

int omp_set_num_threads(<число нитей>) – установить число нитей для всех параллельных областей.

Переменная округления OMP_DYNAMIC показывает можно ли динамически изменить число нитей. Она изменяется функцией omp_set_dynamic(BOOL enable), где enable = 1 – разрешено изменение количества нитей, 0 – запрещено.

Общие и частные переменные OpenMP

Переменные OpenMP:

shared – общие (по умолчанию)

private – частные (создаются копии для каждой нити, действуют в области действия 11-й области; впоследствии уничтожаются)

Клаузы:

private (<переменные>)

shared (<переменные>)

firstprivate (<переменные>) - (Клаузе директива parallel).

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

lastprivate (<переменные>) – (Клаузе директивы for), cохраненное результирующие значение того экземпляра, чья нить завершилась последней.

reduction (Op//операция//;<переменные>)- Над всеми экземплярами переменных всех нитей производится операция Op, а результат будет сохранён в оригинальной общей переменной.

13. Стандарт OpenMP. Общие и частные переменные в OpenMP программе. Клаузы управления содержимым частных переменных. Способы распределения вычислений по потокам. Примеры.

Общие и частные переменные OpenMP

1.Общие данные – храняться в общедоступных переменных. По умолчанию – все общедоступные shared.

2.Частные данные – для каждого потока свой экземпляр переменных private.

Клаузы:

private (<переменные>)

shared (<переменные>)

firstprivate (<переменные>) - (Клаузе директива parallel).

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

lastprivate (<переменные>) – (Клаузе директивы for), cохраненное результирующие значение того экземпляра, чья нить завершилась последней.

reduction (Op//операция//;<переменные>)- Над всеми экземплярами переменных всех нитей производится операция Op, а результат будет сохранён в оригинальной общей переменной.

Директива #pragma omp ordered – Используется в циклах, показывает какая часть цикла должна выполняться в последовательности, в которой указанно.

Способы распределения вычислений по потокам

  1. Средствами языка программирования. Это можно сделать, передав потоку числа задействованных потоков (функция omp_get_thread_num) и номера потоков (omp_get_num_thread).

#include”omp.h”

Int_tmain(int argc,_TCHAR*argv[]) {

Int i,j,numer,size;

Float A[N1][N2],B[N1],C[N1];

#pragma omp parallel private(numer,size,i,j) {

Size= omp_get_num_threads();

Numer= omp_get_thread_num();

For (i=numer*N1/size; i<(numer+1)*N1/size;i++) {

C[i]=0; C[i]+=A[i][j]*B[i];

return 0; }

  1. Осущесвив явное распределение вычислений директивами OpenMP (sections, section)

#include”omp.h”

Int_tmain(int argc,_TCHAR*argv[]) { …

#pragma omp parallel for private(i,j) {

#pragma omp sections {

#pragma omp section

For (i=0;i<N1,i++) {

C[i]=0; For (j=0;j<N2;j++) {C[i]+=A[i][j]*B[i];var=i} }

#pragma omp section

For (i=0;i<N1,i++) {

C[i]=0; For (j=0;j<N2;j++) {C[i]+=A[i][j]*B[i];var=i} } }}

Return 0; }

  1. Декламировав автоматическое распараллеливание (директива for)

#include”omp.h”

Int_tmain(int argc,_TCHAR*argv[]) {

Int i,j,var;

Float A[N1][N2],B[N1],C[N1];

#pragma omp parallel for private(i,j) lastprivate(var)

For (i=0;i<N1,i++) {

C[i]=0; For (j=0;j<N2;j++) {C[i]+=A[i][j]*B[i];var=i} }

Printf(“var=%d/n”,var); return 0; }

Директивы распараллеливания:

1 # pragma omp parallel

{ // участок программы, выполняемый несколькими нитями}

2 # pragma omp sections

{

# pragma omp section {} // Область можно разбить на множество секций, одна секция целиком

// выполняется одной нитью. Если число нитей больше числа секций, то

# pragma omp section {}// незадействованные нити не работают. Если число нитей меньше числа

// секций – то некоторые нити выполняют несколько секций друг за другом

}

3 # pragma omp for – с помощью этой директивы можно автоматически распараллелить цикл. Цикл должен быть детерминированным. Существуют совмещенные директивы:

# pragma omp parallel for – распараллелить область, содержащую цикл for.

Вопрос №14. Стандарт OpenMP. Способы распределения вычислений по потокам. Директивы распределения вычислений. Директива for и ее применение.

Способы распределения вычислений по потокам

  1. Средствами языка программирования. Это можно сделатьпередав потоку числа задействованных потоков(функция omp_get_thread_num)и номера потоков(omp_get_num_thread).

#include”omp.h”

Int_tmain(int argc,_TCHAR*argv[]) {

Int i,j,numer,size;

Float A[N1][N2],B[N1],C[N1];

#pragma omp parallel private(numer,size,i,j) {

Size= omp_get_num_threads();

Numer= omp_get_thread_num();

For (i=numer*N1/size; i<(numer+1)*N1/size;i++) {

C[i]=0; C[i]+=A[i][j]*B[i];

return 0; }

  1. Осущесвив явное распределение вычислений директивами OpenMP (sections, section)

#include”omp.h”

Int_tmain(int argc,_TCHAR*argv[]) { …

#pragma omp parallel for private(i,j) {

#pragma omp sections {

#pragma omp section

For (i=0;i<N1,i++) {

C[i]=0; For (j=0;j<N2;j++) {C[i]+=A[i][j]*B[i];var=i} }

#pragma omp section

For (i=0;i<N1,i++) {

C[i]=0; For (j=0;j<N2;j++) {C[i]+=A[i][j]*B[i];var=i} } }}

Return 0; }

  1. Декламировав автоматическое распараллеливание (директива for)

#include”omp.h”

Int_tmain(int argc,_TCHAR*argv[]) {

Int i,j,var;

Float A[N1][N2],B[N1],C[N1];

#pragma omp parallel for private(i,j) lastprivate(var)

For (i=0;i<N1,i++) {

C[i]=0; For (j=0;j<N2;j++) {C[i]+=A[i][j]*B[i];var=i} }

Printf(“var=%d/n”,var); return 0; }

Директивы распараллеливания:

1 # pragma omp parallel

{ // участок программы, выполняемый несколькими нитями}

2 # pragma omp sections

{

# pragma omp section // Область можно разбить на множество секций, одна секция целиком

{} // выполняется одной нитью. Если число нитей больше числа секций, то

# pragma omp section // незадействованные нити не работают. Если число нитей меньше числа

{} // секций – то некоторые нити выполняют несколько секций друг за другом

}

3 # pragma omp for– с помощью этой директивы можно автоматически распараллелить цикл. Цикл должен быть детерминированным. Индексная переменная распараллеливаемого цикла автоматичаски(неявно) объявляется как private. Индексные переменные вложенных циклов должны объявляться как private в явном виде. Существуют совмещенные директивы:

# pragma omp parallel for – распараллелить область, содержащую цикл for.

Вопрос №15. Стандарт OpenMP. Директива for и ее применение. Способы и средства синхранизации.

# pragma omp for– с помощью этой директивы можно автоматически распараллелить цикл. Цикл должен быть детерминированным. Индексная переменная распараллеливаемого цикла автоматичаски(неявно) объявляется как private. Индексные переменные вложенных циклов должны объявляться как private в явном виде. Существуют совмещенные директивы:

# pragma omp parallel for – распараллелить область, содержащую цикл for.

#include”omp.h”

Int_tmain(int argc,_TCHAR*argv[]) {

Int i,j,var;

Float A[N1][N2],B[N1],C[N1];

#pragma omp parallel for private(i,j) lastprivate(var)

For (i=0;i<N1,i++) {

C[i]=0; For (j=0;j<N2;j++) {C[i]+=A[i][j]*B[i];var=i} }

Printf(“var=%d/n”,var); return 0; }

Директивы и средства синхронизации

1.Замки:

Это есть переменные, являющиеся классическими семафорами.

Тип omp_lock_t. Инициализация перед использованием:

omp_init_lock (omp_lock_t *lock); где lock переменная – замок. Удалить замок: omp_destroy_lock()

Функции для работы:

omp_set_lock (omp_lock_t *lock)- Замок блокируется, если он уже заблокирован – то блокируется весь поток.

omp_unset_lock (omp_lock_t *lock); - Разблокировка замка

omp_test_lock (omp_lock_t *lock) – можно попытаться закрыть замок без блокировки процесса. Код возврата 1 – замок удалось закрыть, 0 – нет, он уже закрыт.

2.Директивы:

#pragma omp single

single – Определяет ту часть кода, которая должна выполняться только одной нитью в рамках параллельной части программы.

master – определяет ту часть кода, которая должна выполняться только нулевой нитью.

critical – определяет критический участок кода: он может одновременно выполняться только одной нитью.

atomic – Директива атомарного присваивания.

#pragma omp atomic

var……………………………..

В каждый момент времени присваивать может только одна нить.

barier – Директива барьерной синхронизации (аналогична MPI_barier): Ожидание достижения этой директивы всеми нитями.

flush – сброс всех в память всех переменных, с кторыми работают нити (единый образ памяти).

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

16. Классификации вычислительных систем (Флина, Хокни, по доступу к памяти). Достоинства и недостатки систем с различной организацией доступа к памяти. Пути повышения производительности современных микропроцессоров.

  1. Классификация Флина.

Два потока: управления и данных:

SISD (одиночный поток данных и команд) – ахитектура Фон-Неймана

MISD(множественный поток команд и одиночный поток данных) – Ø

SIMD(одиночный поток команд, множественный поток данных) – векторные и матричные ВС

MIMD(множественный поток команд, множественный поток данных)

  1. Классификация Хокни

  1. Классификация по доступу к памяти

P VP – parallel-vector processing; SMP – symmetrical multi-processing; ASM – asymmetrical multi-process.

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

UMA – uniform memory access – система с общей разделяемой всеми процессорами памятью.

NUMA – у каждого процессора или группы процессоров имеется своя память. Память физически распределена, но логически – общая.

ASMP – несимметрия доступа или разнородны сами процессоры.

COMA – cash-only memory access;

ccNUMA – cash cogerent NUMA; nccNUMA – noncogerent NUMA.

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

MPP – massive parallel system – создается массив вычислительных узлов, каждый из которых имеет свои процессоры и свои собственные блоки памяти. Память организована по принципу NORMA (no remote memory access) – физически и логически распределенная память.

Cluster – строится на стандартных серийных вычислительных узлах. В качестве коммутации используются стандартные серийные коммутационные сети.

Grid – множество машин, объединенных посредством Intranet или Internet.

Критерии оценки достоинств и недостатков:

  1. программирование; 2) Масштабируемость; 3) Наращиваемость; 4) Тип процессорных задач;

5) Стоимость.

UMA:

  1. Простота программирования (необходимость соблюдения очередности доступа к данным)

  2. Плохая масштабируемость

  3. Плохая наращиваемость (практически нулевая)

  4. Наиболее универсальная система с точки зрения задач: могут решаться как сильно, так и слабо связные задачи. Ограниченность по степени параллелизма.

  5. Невысокая стоимость в виду серийности таких систем и невысокой стоимости ПО.

Мультикомпьютерные системы

МРР:

  1. Сложность программирования. Хорошая масштабируемость программ.

  2. Очень хорошая масштабируемость.

  3. Очень хорошая наращиваемость.

  4. Хорошая решаемость слабо связных масштабируемых задач и плохая решаемость сильно связных задач.

  5. Высокая себестоимость, т.к. эти системы эксклюзивные. Высокая себестоимость ПО.

Cluster:

4) Ориентирован на слабо связные задачи.

5) Дешевле MPP систем ввиду серийности их узлов.

NUMA:

Компромисс между UMA и Мультикомпьютерами.

Пути повышения производительности микропроцессоров.

1) уменьшение времени выполнения команд

1.1) уменьшение времени выполнения отдельных команд (повышение тактовой частоты, совершенствование исполнительных устройств, оптимизация микрокода)

1.2) уменьшение времени выполнения набора команд (позиционирование данных, конвейеризация, параллельное выполнение команд)

2) Увеличение количества обрабатываемых данных

2.1) Увеличение количества данных, обрабатываемых одной командой

(векторные и конвейерные команды)

2.2) Улучшение средств доставки необходимых данных (средств локализация хранения, средств передачи)

3) Профилирование вычислительного процесса (определение состава устройств,средства компенсации простоев и т.д.)

17. Классификации вычислительных систем (Флина, Хокни, по доступу к памяти). Реконфигурируемые вычислительные системы (РВС) на ПЛИС. Архитектура базового модуля РВС, структуры компонентов и системы в целом. Требования к элементной базе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]