Моя задача - измерить время связи между двумя процессами. Я хочу отправить 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);
Кажется, что вторая отправка всегда отправляет одинаковый объем данных независимо от размера массива.
Итак, мой вопрос в том, как отправить динамически выделенный массив?
Во втором случае 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 элементами.
world
?