MPI_Bcast получает сег ошибка с сигнальным кодом: адрес не отображается (1) - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь передать массив слов. Точнее, я пытаюсь передать словарь (hash_map {string, int}), но, конечно, я не могу сделать это простым способом. Поэтому я храню все ключи и все значения в двух отдельных массивах (cfKeys и cfValues). MAX_CF_LENGTH - максимальное количество символов ключа.

Вот фрагмент кода:

char **cfKeys; // this contains all cf keys in the dataset
int *cfValues; // this contains all cf values in the dataset
int num_cf;

[... некоторая предварительная обработка ...]

if(myrank == 0) num_cf = cfDictionary.size(); // this is an hardcoded dictionary in a separate header file

MPI_Bcast(&num_cf, 1, MPI_INT, 0, MPI_COMM_WORLD);
cfValues = new int[num_cf];
cfKeys = new char *[num_cf];
for (int i = 0; i < num_cf; i++)
    cfKeys[i] = new char[MAX_CF_LENGTH];

if (myrank == 0)
{
    int i = 0;
    for (auto cf : cfDictionary)
    {
        strncpy(cfKeys[i], cf.first.c_str(), MAX_CF_LENGTH);
        cfValues[i] = cf.second;
        i++;
    }
}

MPI_Bcast(cfValues, num_cf, MPI_INT, 0, MPI_COMM_WORLD); // no problem here
MPI_Bcast(cfKeys, num_cf * MAX_CF_LENGTH, MPI_CHAR, 0, MPI_COMM_WORLD); // seg. fault here

Помимо ошибки, если вы думаете, что есть лучший способ реализовать эту диктонную передачу, пожалуйста, не стесняйтесь посоветовать мне :) Комментарий, если вам нужно больше информации / фрагментов кода. Заранее спасибо.

...