отправить glib хеш-таблицу с MPI - PullRequest
1 голос
/ 12 декабря 2010

Недавно я столкнулся с проблемой с моей параллельной программой. Каждый процесс имеет несколько хеш-таблиц glib, которые необходимо обменять с другими процессами, эти хеш-таблицы могут быть довольно большими. Каков наилучший подход для достижения этого?

  • создать производный тип данных
  • используйте mpi pack и распакуйте
  • отправить ключ и значение в виде массивов (проблема, так как количество элементов не известно во время компиляции)

Я раньше не использовал 1 & 2 и даже не знаю, возможно ли это, поэтому я спрашиваю вас, ребята ..

1 Ответ

2 голосов
/ 12 декабря 2010

Pack / unpack создает копию ваших данных: если ваши карты большие, вы можете этого избежать.Это также исключает ваш третий вариант.

Вы действительно можете определить пользовательский тип данных, но это будет немного сложно.См. Конец этого ответа для примера (заменив «graph» на «map» и «node» на «pair», как вы читаете).Я предлагаю вам прочитать по этим темам, чтобы получить четкое представление о том, что вам нужно делать.

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

Возможно, вы захотите просто распечатать содержимое ваших карт в файлы, а затем попросить процессы прочитать выходные данные друг друга.Это гораздо проще, но не так элегантно и намного медленнее, чем передача сообщений.

...