Отправка динамических массивов в MPI, C ++

0

Моя задача - измерить время связи между двумя процессами. Я хочу отправить 4,8,..., 1000,...., 10000 байт данных и измерить время, необходимое для отправки и получения сообщения. Поэтому я понял, что я пошлю массив шорт.

Когда я отправляю массив, инициализированный следующим образом:

mpi::communicator world;
short message[100000];
....
world.send(1,0, message);

время, похоже, в порядке, и я вижу разницу во времени между сообщением [100000] и [1000]

Но я хочу выделить массив динамически следующим образом:

short *message = new short[100000];
...
world.send(1,0, *message);

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

Итак, мой вопрос в том, как отправить динамически выделенный массив?

  • 0
    Какой world ?
  • 0
    это мир MPI :: коммуникатор;
Теги:
mpi
boost

1 ответ

2
Лучший ответ

Во втором случае message имеет тип short * и *message dereferences *message для скалярного short, то есть только для первого элемента массива. использование

world.send(1, 0, message, n);

вместо этого и измените значение n. Он также должен (возможно) работать, если вы нарисуете указатель на указатель на массив и затем разыщите его:

world.send(1, 0, *reinterpret_cast<int(*)[100]>(message));

Тип int(*)[100] является указателем на целочисленный массив со 100 элементами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню