
- •108 Сурак
- •3. 3 Өлшемді Лаплас теңдеуін 2-өлшемді декомпозиция тәсілімен программалау.
- •208 Сурак
- •1. Флинна таксономиясы. Мisd, мimd архитектуралары.
- •2. Mpi программасын компиляциялау, жинау және орындау.
- •308 Сурак
- •1. Жарыс күі. Синхронизация. Философтар есебі.
- •2. Коллективті мәлімет алмасу функциялары. Редукция мысалдары.
- •3. Параллельді векторларды скаляр көбейту программасын жазыңыз
- •408 Сурак
- •1. Қазіргі параллель архитектуралы компьютерлер. Аппараттық бөлімі.
- •5 08 Сурак
- •3. 3 Өлшемді Лаплас теңдеуін 2-өлшемді декомпозиция тәсілімен программалау.
- •1. Қазіргі параллель архитектуралы компьютерлер. Программалық бөлімі.
- •2. Mpi_Dims_create() функциясын қолдану мысалы.
- •608 Сурак
- •3. Санды полиномдылыққа тексеру параллельді программасын жазыңыз.
- •1. Shared & distributed memory архитектуралары.
- •2. Нүкте-нүкте коммуникациялары. Mpi_Bsend(), mpi_Brecv функцияларын қолдану мысалдары.
- •7 08 Сурак
- •1. Таксономия Флинна. Архитектуры sisd, simd.
- •2 Что такое mpi ? Основные концепции и возможности.
- •3. Напишите программу параллельного вычисления числа pi.
- •808 Сурак
- •1 Состояние гонки. Алгоритм с конкуренцией. Синхронизация. Задача обедающих философов.
- •2. Коллективные операции обмена сообщениями
- •3. Напишите программу параллельного поиска максимального числа в массиве.
- •9 08 Сурак
- •1.Структура mpi программы в стиле spmd. Приведите пример.
- •2. Коммуникации точка/точка. Примеры использования фукнцииMpi_Send(), mpi_Recv.
- •3. Напишите программу параллельного вычисления определенного интеграла от фукнции 2*cos(X) в интервале [0,1].
- •1 Сурак
- •1 .Современные архитектуры параллельных компьютеров. Программная часть.
- •2. Декартова топология. Пример использования периодических соседей.
- •3. 3 Өлшемді Лаплас теңдеуін 2-өлшемді декомпозиция тәсілімен программалау.
- •181 Сурак
- •1. Примеры программ в стиле spmd и mpmd
- •2. Структура mpi программ в стиле mpmd. Приведите пример.
- •3. Напишите программу параллельного вычисления числа e.
- •21 Сурак
- •1.Таксономия Флинна. Архитектуры sisd, simd.
- •2.Отличия mpi и pvm.
- •3. Напишите программу параллельного вычисления числа e.
- •31 Сурак
- •1. Распределенная и разделяемая конфигурация памяти. Архитектура numa.
- •2. Пользовательские типы данных. Тип mpi_type_struct. Примеры.
- •41 Сурак
- •1.Суперскалярные и векторные процессоры.
- •2. Группы и коммуникаторы mpi. Создание новых групп (коммуникаторов).
- •51 Сурак
- •2. Как можно вычислить время, которое тратится на расчет определенного участка кода в mpi?
- •3. Параллельная модификация метода Гаусса-Зейделя. Решение 2-мерного уравнения Лапласа 1 мерной декомпозицией (параллельный метод Гаусса-Зейделя).
- •61 Сурак
- •71 Сурак
- •81 Сурак
- •91 Сурак
- •1.Numa архитектурасы.
- •2.Қолданушы мәлімет типтері. Mpi_type_struct. Мысалдар.
- •2 Сурак
- •1.Shared and distributed memory архитектурлары.
- •2.Mpi_White(), mpi_Probeфункциялары.
- •3.Санды полиномдылыққа тексеру параллельді программасын жазыңыз.
- •12 Сурак
- •1.Процесс дегеніміз не? Ағын дегеніміз не? Прцесс пен ағын айырмашылығы.
- •3. 3 Өлшемді Лаплас теңдеуін 1 –өлшемді тәсілімен программалау.
- •282 Сурак
- •1.Суперскаляр және векторлы процессорлар.
- •2.Виртуалды топология. Декарт және граф топологиясы. Қандай жағдайларда оларды қолдану керек. Декарт топологиясын құру кезеңдері.
- •3.2 Өлшемді Лаплас теңдеуін 1-өлшемді декомпозиция тәсілімен программалау.
- •32 Сурак
- •1.Есепті декомпозициялау және аймақты декомпозициялау тәсілі. Мысалдар.
- •2.Қолданушы мәлімет типтері. Мәліметтер үшін жады көлемі. Жадыны босату.
- •42 Сурак
- •Есепті декомпозициялау және аймақты декомпозициялау тәсілі. Мысалдар.
- •Қолданушы мәлімет типтері. Mpi_type_contiguous. Мысалдар.
- •Символдық массивте жолды табудың параллельді программасын жазыңыз.
- •52 Сурак
- •1. Распределенная и разделяемая конфигурация памяти. Архитектура numa.
- •2. ФункцииMpi_Wait(), mpi_Probe
- •62 Сурак
- •1. Параллелизация с декомпозицией задачи и декомпозицией области. Примеры.
- •2.Пользовательские типы данных. Тип mpi_type_vector (hvector). Примеры
- •3. Напишите программу параллельного поиска минимального числа в массиве.
- •72 Сурак
- •1. Закон Амдала с учетом сети. Ускорение. Эффективность.
- •2.Коммуникации точка/точка. Примеры использования фукнции mpi_Isend(), mpi_Irecv.
- •3. Напишите параллельную программу проверки простого числа.
- •82 Сурак
- •92 Сурак
- •3 Сурак
- •13 Сурак
- •1. Состояние гонки. Алгоритм с конкуренцией. Синхронизация. Задача обедающих философов.
- •2. Функции mpi_Gather, mpi_scatter, mpi_allgather, mpi_alltoall, mpi_allreduce. Их различия. Примеры.
- •3. Напишите программу параллельного скалярного умножения векторов.
- •23 Сурак
- •1. Можно ли запустить программу simd на современных процессорах семейства x86.
- •2.Пользовательские типы данных. Тип mpi_type_contiguous. Примеры.
- •3.Напишите программу параллельного поиска минимального числа в массиве.
- •383 Сурак
- •1.В каких случаях эффективно использование параллельных методик программирования ?
- •2. Есть мнение, что для написания программ mpi достаточно лишь 5-ти основых функций. Назовите их. Как Вы относитесь к данному высказыванию ?
- •3. Решение 3-мерного уравнения Лапласа методом 1-мерной декомпозиции.
- •43 Сурак
- •1. Суперскалярные и векторные процессоры.
- •2. Виртуальные топологии. Декартова и графовая топологии. В каких случаях их следует использовать. Основные шаги для создания декартовой топологии.
- •3. Параллельное умножение матрицы и вектора в mpi.
- •53 Сурак
- •7 Состояние гонки. Алгоритм с конкуренцией. Синхронизация. Задача обедающих философов.
- •2.Коллективные операции обмена сообщениями. Редукция. Примеры.
- •3. Напишите программу параллельного скалярного умножения векторов.
- •63 Сурак
- •1. Современные архитектуры параллельных компьютеров. Аппаратная часть.
- •2.Группы и коммуникаторы mpi. Создание новых групп (коммуникаторов).
- •3. Параллельное умножение матриц в mpi.
- •73 Сурак
- •1 Таксономия Флинна. Архитектуры sisd, simd.
- •2.Что такое mpi ? Основные концепции и возможности.
- •3.Напишите программу параллельного вычисления числа pi.
- •83 Сурак
- •1.Закон Амдала. Ускорение. Эффективность.
- •3. Напишите параллельную программу проверки простого числа.
- •93 Сурак
- •1.Современные архитектуры параллельных компьютеров. Программная часть.
- •2.Пример использования фукнции mpi_Dims_create
- •3. Решение 3-мерного уравнения Лапласа методом 1-мерной декомпозиции.
- •4 Сурак
- •1.Примеры программ в стиле spmd и mpmd
- •2.Коммуникации точка/точка. Примеры использования фукнции mpi_Send(), mpi_Recv.
- •3.Напишите программу параллельного вычисления определенного интеграла от функции
- •14 Сурак
- •1. Таксономия Флинна. Архитектуры sisd, simd.
- •2.Что такое mpi ? Основные концепции и возможности.
- •3.Напишите программу параллельного вычисления числа pi.
- •24 Сурак
- •1.Что такое процесс ? Отличия процесса от потока.
- •2.Пример использования фукнции mpi_Cart_create
- •3.Решение 3-мерного уравнения Лапласа методом 1-мерной декомпозиции.
- •34 Сурак
- •1.Современные архитектуры параллельных компьютеров. Программная часть.
- •2.Есть мнение, что для написания программ mpi достаточно лишь 5-ти основых функций. Назовите их. Как Вы относитесь к данному высказыванию ?
- •3.Решение 3-мерного уравнения Лапласа методом 3-мерной декомпозиции.
- •484 Сурак
- •1.Современные архитектуры параллельных компьютеров. Аппаратная часть.
- •2.Пример использования фукнции mpi_cart_coords
- •3. 2 Өлшемді Лаплас теңдеуін 2-өлшемді декомпозиция тәсілімен программалау.
- •54 Сурак
- •1.Таксономия Флинна. Архитектуры misd, mimd.
- •2.Структура mpi программы в стиле spmd. Приведите пример.
- •3. 2*Sin(X) функциясының интегралын [0,1] аймақта параллельді есептеңіз.
- •64 Сурак
- •1.Закон Амдала с учетом сети. Ускорение. Эффективность.
- •2.Типы данных в mpi. Для чего они нужны
- •3.Напишите параллельную программу проверки совершенного числа.
- •74 Сурак
- •1.Таксономия Флинна. Архитектуры sisd, simd.
- •2.Структура mpi программ в стиле mpmd. Приведите пример.
- •3.Параллельная модификация метода Гаусса-Зейделя. Решение 2-мерного уравнения Лапласа 1 мерной декомпозицией (параллельный метод Гаусса-Зейделя).
- •84 Сурак
- •1.Суперскалярные и векторные процессоры.
- •2.Пользовательские типы данных. Размеры памяти для данных. Освобождение памяти.
- •3.Напишите программу параллельного поиска максимального числа в массиве.
- •94 Сурак
- •1.Архитектура numa.
- •2.Виртуальные топологии. Декартова и графовая топологии. В каких случаях их следует использовать. Основные шаги для создания декартовой топологии.
- •3.Параллельное умножение матрицы и вектора в mpi.
- •5 Сурак
- •1.Таксономия Флинна. Архитектуры misd, mimd.
- •2.Примеры программ в стиле spmd и mpmd
- •3.Напишите программу параллельного вычисления определенного интеграла от фукнции 2*sin(X) в интервале [0,1].
- •15 Сурак
- •1.В каких случаях эффективно использование параллельных методик программирования ?
- •25 Сурак
- •1. Можно ли запустить программу simd на современных процессорах семейства x86.
- •2. Пользовательские типы данных. Тип mpi_type_indexed (hindexed). Примеры.
- •3.Параллельное умножение матриц в mpi.
- •35 Сурак
- •1.Распределенная и разделяемая конфигурация памяти. Архитектура numa.
- •2. Пример использования фукнцииMpi_Cart_shift()
- •3.. Напишите параллельную программу проверки простого числа.
- •45 Сурак
- •1.Закон Амдала. Ускорение. Эффективность.
- •585 Сурак
- •1. Можно ли запустить программу simd на современных процессорах семейства x86.
- •65 Сурак
- •1.Spmd, mpmd стилінде программалау мысалдары.
- •2.Топтар мен коммуникаторлар. Ранг.
- •3 . 2*Cos(X) функциясының интегралын [0,1] аймақта параллельді есептеңіз.
- •75 Сурак
- •1.Амдал заны. Үдеу. Тиімділік.
- •2.Mpi мәлімет типтері. Олар не үшін керек ? Қолдану мысалдары.
- •3.Санды қарапайымдылықа тексеру параллельді программасын жазыңыз.
- •85 Сурак
- •1.Қазіргі параллель архитектуралы компьютерлер. Аппараттық бөлімі.
- •2.Mpi_cart_coords()функциясын қолдану мысалы.
- •3.2 ӨлшемдіЛапластеңдеуін 2-өлшемді декомпозициятәсіліменпрограммалау.
- •95 Сурак
- •1.Есепті декомпозициялау және аймақты декомпозициялау тәсілі. Мысалдар.
- •2.Mpi_Gather, mpi_scatter, mpi_allgather, mpi_alltoall, mpi_allreduce функциялары. Олардың айырмашылығы. Мысалдар.
- •3.Массивтемаксималсандыесептеупараллельдіпрограммасынжазыңыз.
- •6 Сурак
- •1.Флинна таксономиясы. Мisd, мimd архитектуралары.
- •2.Mpi программасын компиляциялау, жинау және орындау.
- •3.Гаусс-Зейдель тәсілінің параллельді түрі. 2 өлшемді Лаплас теңдеуін 1 өлшемді декомпозициялау (Параллельді Гаусс-Зейдель тәсілі).
- •16 Сурак
- •1.Процесс дегеніміз не? Ағын дегеніміз не? Прцесс пен ағын айырмашылығы.
- •3.3 Өлшемді Лаплас теңдеуін 3-өлшемді декомпозиция тәсілімен программалау.
- •26 Сурак
- •36 Сурак
- •2. Spmd стилінде mpi. Мысал келтіріңіз.
92 Сурак
1. Можно ли запустить программу SIMD на современных процессорах семейства x86.
x86 — архитектура процессора c одноимённым набором команд, впервые реализованная в процессорах компании Intel.Название образовано от двух цифр, которыми заканчивались названия процессоров Intel ранних моделей: 8086, 80186, 80286 (i286), 80386 (i386),80486 (i486). За время своего существования набор команд постоянно расширялся, сохраняя совместимость с предыдущими поколениями.
Для организации групповой обработки данных в процессорах используется SIMD расширения к х86 инструкциям. Аббревиатура SIMD расшифровывается как Single Instruction Multiple Data (одна инструкция – множество данных). Под SIMD расширением понимается программно-аппартное решение, представляющее собой совокупность дополнительных регистров и наборов инструкций процессора, предназначенных для групповой обработки данных. Также необходимо наличие соответствующих компиляторов, ”знающих” SIMD инструкции и способных оптимизировать под них код. Быстродействие повышается за счет того, что каждая команда из дополнительного набора выполняет действие, для которого понадобилось бы несколько команд основного набора. Оптимизированная программа, как правило, может работать на процессорах как с поддержкой необходимых инструкций (повышенное быстродействие), так и с отсутствием оных. Однако на практике встречаются программы, которые отказываются работать при отсутствии у процессора определенного набора SIMD инструкций. Такая проблема может возникнуть на старых процессорах, при использовании современных программ.
Однако такие исключения встречаются редко и в большинстве случаeв программа, взамен отсутствующих SIMD, будет использовать универсальные (generic) х86 инструкции. При этом мы не получим никакого повышения быстродействия, но и снижения производительности (по сравнению с обычным кодом) также не будет.
2. Пользовательские типы данных. Тип MPI_type_indexed (hindexed). Примеры.
MPI разрешает пользователю во время выполнения создавать собственные типы данных MPI. Чтобы построить тип данных для MPI, необходимо определить расположение данных в типе: тип элементов и их относительные местоположения в памяти. Такой тип называют производным типом данных.
Конструктор типа MPI_Type_indexed является универсальным конструктором, так как элементы создаваемого типа состоят из произвольных по длине блоков с произвольным смещением блоков от начала размещения элемента. Смещения измеряются в элементах старого типа.
int MPI_Type_indexed(int count, int *array_of_blocklengths, int *array_of_displacements, MPI_Datatype
oldtype, MPI_Datatype *newtype)
count – числоблоков; array_of_blocklengths – массив, содержащийчислоэлементовбазовоготипавкаждомблоке; array_of_displacements – массивсмещенийкаждогоблокаотначаларазмещенияэлементановоготипа, смещенияизмеряютсячисломэлементовбазовоготипа; oldtype – базовыйтипданных; newtype – новыйпроизводныйтипданных.
Этафункциясоздаеттип newtype, каждыйэлементкоторогосостоитиз count блоков, где i-ыйблоксодержит array_of_blocklengths[i] элементовбазовоготипаисмещенотначаларазмещенияэлементановоготипана array_of_displacements[i] элементовбазовоготипа.
Конструктор типа MPI_Type_hindexed идентичен конструктору MPI_Type_indexed за исключением того, что смещения измеряются в байтах.
int MPI_Type_hindexed(int count, int *array_of_blocklengths, MPI_Aint *array_of_displacements, MPI_Datatype oldtype, MPI_Datatype *newtype)
3. Решение 2-мерного уравнения Лапласа методом 1-мерной декомпозиции.
constint N=100;
float P[N][N],
h=0.01, //шаг сетки
eps=0.01, //точность
max, //норма
**p, //текущая итерация
**pp, //предыдущая итерация
a[N],b[N]; //вспомогательные векторы
inti,j,
c, //кол-во строк матрицы на каждом процессоре
stop = 1; //условие заверщения цикла
intrank,size;
MPI_Init(&argc,&argv);
MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
if(rank<N%size)
{
c=N/size+1;
}else
{
c=N/size;
}
p=newfloat*[c];
pp=newfloat*[c];
for(i=0;i<c;i++)
{
p[i]=newfloat[N];
pp[i]=newfloat[N];
p[i][0]=1;
pp[i][0]=1;
for(int j=1;j<N;j++)
{
p[i][j]=0;
pp[i][j]=0;
}
}
if(rank==0)
{
do
{
if(size>1)
{
MPI_Send(&p[c-1][0],N,MPI_FLOAT,rank+1,
0,MPI_COMM_WORLD);
MPI_Recv(a,N,MPI_FLOAT,rank+1,size,
MPI_COMM_WORLD, &status);
}
max=0.0;
for(i=1;i<c-1;i++)
{
for(j=1;j<N-1;j++)
{
p[i][j]=(pp[i+1][j]+pp[i-1][j]+pp[i][j+1]+pp[i][j-1])/4;
if(max<fabs(p[i][j]-pp[i][j]))
{
max=fabs(p[i][j]-pp[i][j]);
}
}
}
if(size>1)
{
for(j=1;j<N-1;j++)
{
p[c-1][j]=(pp[c-2][j]+a[j]+pp[c-1][j+1]+pp[c-1][j-1])/4;
if(max<fabs(p[c-1][j]-pp[c-1][j]))
{
max=fabs(p[c-1][j]-pp[c-1][j]);
}
}
floatmaxx;
for(i=1;i<size;i++)
{
MPI_Recv(&maxx,1,MPI_FLOAT,i,2*size,MPI_COMM_WORLD,&status);
if(maxx>max)
{
max=maxx;
}
}
}
if(max<=eps)
{
stop=0;
}
if(size>1)
{
for(i=1;i<size;i++)
{
MPI_Send(&stop,1,MPI_INT,i,3*size,MPI_COMM_WORLD);
}
}
for(i=0;i<c;i++)
{
for(j=0;j<N;j++)
{
pp[i][j]=p[i][j];
}
}
}while(stop==1);
for(i=0;i<c;i++)
{
for(int j=0;j<N;j++)
{
P[i][j]=p[i][j];
}
}
if(size>1)
{
intjj=c-1;
for(i=1;i<size;i++)
{
MPI_Recv(&c,1,MPI_INT,i,4*size,MPI_COMM_WORLD,&status);
for(j=0;j<c;j++)
{
jj++;
MPI_Recv(&P[jj][0],100,MPI_FLOAT,i,5*size,MPI_COMM_WORLD,&status);
}
}
}
ofstream out("result.txt");
for(i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
out<<P[i][j]<<'\t'; //вывожу в результаты в фаил
}
out<<'\n';
}
}
if(rank==size-1&&size>1)
{
do
{
MPI_Recv(b,N,MPI_FLOAT,rank-1,0,MPI_COMM_WORLD,&status);
MPI_Send(&p[0][0],N,MPI_FLOAT,rank-1,size,MPI_COMM_WORLD);
max=0;
for(i=1;i<c-1;i++)
{
for(j=1;j<N-1;j++)
{
p[i][j]=(pp[i+1][j]+pp[i-1][j]+pp[i][j+1]+pp[i][j-1])/4;
if(max<fabs(pp[i][j]-p[i][j]))
{
max=fabs(pp[i][j]-p[i][j]);
}
}
}
for(j=1;j<N-1;j++)
{
p[0][j]=(pp[1][j]+b[j]+pp[0][j+1]+pp[0][j-1])/4;
if(max<fabs(pp[0][j]-p[0][j]))
{
max=fabs(pp[0][j]-p[0][j]);
}
}
MPI_Send(&max,1,MPI_FLOAT,0,2*size,MPI_COMM_WORLD);
for(i=0;i<c;i++)
{
for(j=0;j<N;j++)
{
pp[i][j]=p[i][j];
}
}
MPI_Recv(&stop,1,MPI_INT,0,3*size,MPI_COMM_WORLD,&status);
}while(stop==1);
MPI_Send(&c,1,MPI_INT,0,4*size,MPI_COMM_WORLD);
for(i=0;i<c;i++)
{
MPI_Send(&p[i][0],N,MPI_FLOAT,0,5*size,MPI_COMM_WORLD);
}
}
if(rank>0&&rank<size-1)
{
do
{
MPI_Recv(b,N,MPI_FLOAT,rank-1,0,MPI_COMM_WORLD,&status);
MPI_Send(&p[c-1][0],N,MPI_FLOAT,rank+1,0,MPI_COMM_WORLD);
MPI_Recv(a,N,MPI_FLOAT,rank+1,size,MPI_COMM_WORLD,&status);
MPI_Send(&p[0][0],N,MPI_FLOAT,rank-1,size,MPI_COMM_WORLD);
max=0;
int ii;
if(rank<N%size||100%size==0)
{
ii=rank*c;
}
if(rank>N%size&&100%size!=0)
{
ii=(N%size)*(c+1)+(rank-N%size)*c;
}
for(i=1;i<c-1;i++)
{
for(j=1;j<N-1;j++)
{
p[i][j]=(pp[i+1][j]+pp[i-1][j]+pp[i][j+1]+pp[i][j-1])/4;
if(max<fabs(pp[i][j]-p[i][j]))
{
max=fabs(pp[i][j]-p[i][j]);
}
}
}
for(j=1;j<N-1;j++)
{
p[0][j]=(pp[1][j]+b[j]+pp[0][j+1]+pp[0][j-1])/4;
if(max<fabs(pp[0][j]-p[0][j]))
{
max=fabs(pp[0][j]-p[0][j]);
}
p[c-1][j]=(pp[c-2][j]+a[j]+pp[c-1][j+1]+pp[c-1][j-1])/4;
if(max<fabs(pp[c-1][j]-p[c-1][j]))
{
max=fabs(pp[c-1][j]-p[c-1][j]);
}
}
MPI_Send(&max,1,MPI_FLOAT,0,2*size,MPI_COMM_WORLD);
for(i=0;i<c;i++)
{
for(j=0;j<N;j++)
{
pp[i][j]=p[i][j];
}
}
MPI_Recv(&stop,1,MPI_INT,0,3*size,MPI_COMM_WORLD,&status);
}while(stop==1);
MPI_Send(&c,1,MPI_INT,0,4*size,MPI_COMM_WORLD);
for(i=0;i<c;i++)
{
MPI_Send(&p[i][0],N,MPI_FLOAT,0,5*size,MPI_COMM_WORLD);
}
}