我目前在C ++或MPI方面经验不足,因此我认为这是一个容易回答的问题。
我希望能够出于实验目的更改可以在数组排序上工作的进程数,但是当我尝试为工作人员声明局部数组时,我收到一条错误消息,指出数组大小变量PART ,必须保持恒定。
这是根据我的计算或解析方式还是MPI机制?
const int arraySize = 10000
int main(int argc, char ** argv)
{
MPI_Init(&argc, &argv);
int rank;
int size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
const int PART = floor(arraySize / size);
auto start = std::chrono::high_resolution_clock::now(); //start timer
//================================ WORKER PROCESSES ===============================
if (rank != 0)
{
int tmpArray[PART]; //HERE IS MY PROBLEM
MPI_Recv(&tmpArray, PART, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); //recieve data into local initalized array
qsort(&tmpArray[0], PART, sizeof(int), compare); // quick sort
MPI_Send(&tmpArray, PART, MPI_INT, 0, 0, MPI_COMM_WORLD); //send sorted array back to rank 0
}
最佳答案
如果像在您的情况下那样在运行时确定数组的大小,则将给出可变长度的数组,C语言支持该数组,但标准C ++不支持。
因此,在C ++中,数组的大小必须是(编译时)常量。
为了克服这个问题,您必须使用动态内存分配。这可以通过“经典C”函数malloc
和free
(在C ++中很少使用),通过C ++垂饰new
和delete
(或new[]
和delete[]
)来实现,或-首选方式-通过使用容器对象(例如std::vector<int>
)为您封装此内存分配问题。
关于c++ - MPI-当数组初始化值必须为常数时,如何为 worker 创建部分数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47319923/