我正在寻找一种并行调用函数的方法。
例如,如果我有 4 个线程,我希望每个线程都使用自己的线程 ID 作为参数调用相同的函数。
由于这个论点,没有线程可以处理相同的数据。
#pragma omp parallel
{
for(int p = 0; p < numberOfThreads; p++)
{
if(p == omp_get_thread_num())
parDF(p);
}
}
Run Code Online (Sandbox Code Playgroud)
线程 0 应该运行 parDF(0)
线程 1 应该运行 parDF(1)
线程 2 应该运行 parDF(2)
线程 3 应该运行 parDF(3)
所有这些都应该同时完成......
这(显然)不起作用,但是进行并行函数调用的正确方法是什么?
编辑:实际代码(这可能是太多信息......但它被要求......)
从调用 parDF() 的函数:
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel
{
numberOfThreads = omp_get_num_threads();
//split nodeQueue
#pragma omp master
{
splitNodeQueue(numberOfThreads);
}
int tid = omp_get_thread_num();
//printf("Hello World from thread = %d\n", tid);
#pragma omp parallel for private(tid) …Run Code Online (Sandbox Code Playgroud) 我正在使用 openMPI,而且我有一个奇怪的错误。
看来,即使在 MPI_Finalize() 之后,每个线程仍在运行。我遵循了一个简单的 Hello World 程序的指南,它看起来像这样:
#include <mpi.h>;
int main(int argc, char** argv) {
// Initialize the MPI environment
MPI_Init(NULL, NULL);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Get the name of the processor
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
// Print off a hello world message
printf("Hello world from processor %s, rank %d"
" out of %d processors\n",
processor_name, world_rank, world_size);
// …Run Code Online (Sandbox Code Playgroud) 我需要一个动态的整数数组列表.
我认为它可以声明为:
list<int[10]> myListOfArrays;
Run Code Online (Sandbox Code Playgroud)
但这不起作用,编译器返回错误:
error: 'std::_list_node<_Tp>::_M_data' has incomplete type
error: invalid use of array with unspecified bounds
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
整数数组的大小不必是动态的,只需要列表的数量.