es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna manera de tener un stdarray del mismo tamaño que MPI_Comm_size?

Tengo un programa en el que estoy tratando de recopilar un conjunto de datos en un std::array, sin embargo, no puedo hacer que esto funcione cuando el tamaño de mi array se establece en el valor del tamaño del mundo. Obtengo el siguiente error:

MPITests.cpp:16:21: error: el valor de 'size' no es utilizable en una expresión constante
   16 |     std::array<int, size=""> gatheredRanks2;
      |                     ^~~~

Aquí hay una sección del código relevante:

int rank, size;

MPI_Init(NULL, NULL);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);

std::array<int, size=""> gatheredRanks2;

Si simplemente establezco el valor de este tamaño en un número, el programa funciona.
¿Existe una solución alternativa para esto?</int,></int,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una solución alternativa para este error. El problema es que el tamaño de tu arreglo necesita ser conocido en tiempo de compilación, pero el valor de size solo es conocido en tiempo de ejecución. Una solución a esto es usar un arreglo dinámico en lugar de un arreglo estático. Puedes utilizar un std::vector en lugar de un std::array y redimensionarlo al tamaño adecuado en tiempo de ejecución:

    “`c++
    int rank, size;

    MPI_Init(NULL, NULL);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    std::vector gatheredRanks2(size);
    “`

    Esto creará un vector vacío de tamaño size y luego podrás utilizarlo para recolectar tus datos. Ten en cuenta que esto puede no rendir tan bien como un arreglo estático en ciertos escenarios, por lo que es importante probar y perfilar tu código para asegurarte de que cumpla con tus requisitos de rendimiento.

Comments are closed.