LINUX.ORG.RU

распределённый массив


0

0

Подскажите есть ли C++ библиотека реализующий распределённый массив через MPI?

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


Ответ на: комментарий от annoynimous

Ну как-то так

// инициализация
	MPI_Init(&argc,&argv);
	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
	MPI_Comm_size(MPI_COMM_WORLD,&p);

	first_row=n*my_rank;
	first_row/=p;

	last_row=n*(my_rank+1);
	last_row=last_row/p-1;
	rows=last_row-first_row+1;
	max_rows=n/p+n%p;

	a=(double*)malloc(max_rows*n*sizeof(double));
.....

Соответственно при использовании надо помнить, что для получения глобального индекса строки надо к локальному индексу прибавить first_row.

Зачем тут нужна целая отдельная библиотека не совсем понятно.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Задача настолько тривиальна, что тут и строить нечего :)


Задача тривиальна только в случаи когда доступ к элементам массива нужен из одного процесса, например нулевого.
В этом случаи все сводится к коде вроде этого:

....
if (rank == 0 ) {
proc = find_proc(index); //ищем процесс у которого нужный нам элемент
MPI_Send(proc....); //отправим ему индекс
MPI_Recv(.......); //получаем элемент
} else {
MPI_Probe(....); //Ждем сообщения
MPI_Recv(....); //Полуим индекс элемента
MPI_Send(....); //Отправить элемент
}
....
или что то типо того.

Но это не подходит , так как нужно, что бы из каждого процесса был доступ к любому элементу массива.

aaleks
() автор топика
Ответ на: комментарий от aaleks

Забыл добавить , что доступ нужен не только из любого процесса но и в любой момент времени.

В общем нужна библиотека реализующая NUMA через MPI.

aaleks
() автор топика

http://www.mcs.anl.gov/petsc/petsc-as/

Там есть распределенные векторы и распределенные матрицы. Правда, библиотека большая, и есть смысл ее применять, если нужно что-то большее, чем распределенные массивы.

oami ★★
()
Ответ на: комментарий от k0l0b0k

>если все в пределах одной машины

MPI


Взаимоисключающие параграфы детектед. Не?

anonymous
()

а точно MPI надо?

можно тогда окнами попользоваться. смотреть можно отсюда http://publib.boulder.ibm.com/infocenter/zos/v1r9/topic/com.ibm.zos.r9.fomp20...

Вобще задача не очень логична, т.к. нету декомпозиции по данным, а random access к такому массиву может обладать очень плохими параметрами. Так что или нужно делать проверки, а не запросил ли кто данные и кешировать переданные (средствами mpi), или продать задачу, или не использовать MPI, а модели виртуализирующие общую память и openMP ;)

qnikst ★★★★★
()
Ответ на: комментарий от aaleks

Но это не подходит , так как нужно, что бы из каждого процесса был доступ к любому элементу массива.

Таких задач в реальной жизни не бывает. А если у тебя действительно такое, то ускорение в MPI ты не получишь.

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.