Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Типы данных в MPI. Для чего они нужны




MPI-константы, шаблоны и прототипы находятся в MPI-заголовочном файле mpi.h, который должен стандартным для C образом #include <mpi.h> присоединяться к программе пользователя.

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

Все функции приема/передачи сообщений имеют в качестве одного из своих аргументов тип данных, чье C-определение есть MPI_Datatype. В MPI определены несколько значений MPI_Datatype, которые достаточны для представления типов на большинстве архитектур:

MPI_CHAR-знаковое символьное

MPI_SHORT-знаковое коротк целое

MPI_INT-знаковое целое

MPI_LONG-знаковое длин целое

MPI_UNSIGNED_CHAR-беззнак символьное

MPI_UNSIGNED_SHORT-беззнак коротк целое

MPI_UNSIGNED-беззнак целое

MPI_UNSIGNED_LONG-беззнак длинное целое

MPI_FLOAT-число с плав точкой

MPI_DOUBLE-число двойной точн

MPI_LONG_DOUBLE-число четырехкр точн

MPI_BYTE=битовые данные

Производные типы данных или пользовательские получаются из базовых типов. MPI представляет несколько способов создания типов данных без явного конструирования карты типа:

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

· Векторный: это несколько обобщенный непрерывный тип, который допускает регулярные пробелы в смещениях. Элементы отделяются промежутками кратными протяженности исходного типа данных. Пример - столбцы матрицы, при определении матрицы как двумерного массива;

· H-векторный: похож на векторный, но расстояние между элементами задается в байтах;

· Индексный: при создании этого типа используется массив смещений исходного типа данных;

смещения измеряются в терминах протяженности исходного типа данных;

· H-индексный: похож на индексный, но смещения задаются в байтах;

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

Рассмотрим более подробно создание непрерывного типа данных. Непрерывный тип создается с использованием функции MPI_Type_contiguous, производящей новый тип данных, делая count копий исходного типа со смещениями, увеличивающимися на протяженность oldtype. Например, если исходный тип данных (oldtype) имеет карту типа {(int,0),(double,8)}, то MPI_Type_contiguous(2, oldtype, &newtype); произведет тип данных newtype с картой типа {(int,0),(double,8),(int,16),(double,24)}.

 

 

Напишите параллельную программу проверки совершенного числа.

Совершеное чиcло́ - натуральное число, равное сумме всех своих собственных делителей (т. е. Всех положителных делителей, отличных от самого́ числа). В данном случае программа должна вывести “Sovershennoe”.

int main(int argc,char **argv)

{

int size,rank;

MPI_Status status;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Comm_size(MPI_COMM_WORLD,&size);

int k=496,p,l=0,x1,l1,l2=0,itog=0,i; // k - issleduemoe chislo

p=k/(size-1);

if (rank!=size-1) // schitaut vse processy, krome poslednego

// metod perebora delitelei

{ for (i=rank*p; i<(rank+1)*p; i++) { x1=k/(i+1); if (x1*(i+1)==k) {l=l+i+1;} }

MPI_Send(&l,1,MPI_INT,size-1,1,MPI_COMM_WORLD);}

else

{ for (i=0; i<size-1; i++) // poslednii process vse sobiraet

{ MPI_Recv(&l1,1,MPI_INT,i,1,MPI_COMM_WORLD, &status); itog+=l1; }

for (i=(size-1)*p; i<k-1; i++) { x1=k/(i+1); if (x1*(i+1)==k) {l2=l2+i+1;} } itog+=l2;

if (itog==k) { printf("Sovershennoe\n"); } else { printf("Ne yavlyaetsya sovershennym\n"); } }

MPI_Finalize();}

 

Сурак





Поделиться с друзьями:


Дата добавления: 2016-07-29; Мы поможем в написании ваших работ!; просмотров: 1832 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наука — это организованные знания, мудрость — это организованная жизнь. © Иммануил Кант
==> читать все изречения...

2242 - | 2051 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.