我正在遇到某种问题,试图编译一个完美的(windows + linux测试)mpi + openmp软件,我自己编写。 我已经设法安装并设置工作omp适应版本的clang,它在我准备的一个简单的omp“hello world”中完美无缺地工作。 我也通过自制软件安装了open-mpi,mpi“hello world”也正常运行。 现在出现了问题。 首先,对clang和openmp一起工作没有那么自信,我创建了一个没有openmp调用的软件版本。这个版本(仅限MPI)的代码编译没有问题。
现在是我真正的困境。 我已经恢复了代码的omp部分,并试图用MPI和openMP标志编译它(mpic ++包装器加上ompclang强制输入和-fopenmp标志)。编译器详细模式的输出如下所示。
[...]
/usr/local/Cellar/open-mpi/1.8.4/include/openmpi/ompi/mpi/cxx/mpicxx.h:39:10:
fatal error: 'utility' file not found
#include <utility>
^
[...]
/usr/local/Cellar/open-mpi/1.8.4/include/openmpi/ompi/mpi/cxx/mpicxx.h:39:10:
fatal error: 'utility' file not found
#include <map>
^
[...]
在输出之后我尝试编译这样的东西:
#include <iostream>
#include <map>
#include <utility>
int main(int argc,char* argv[]){
std::cout<<"Hello World!!!!"<<std::endl;
return 0;
}
输出让我说编译器也找不到map,utility和iostream。
在我看来问题是编译器不知道在哪里可以找到标准的c ++库。 谁能告诉我如何解决这个问题?提前致谢
玩得开心,
GF
编辑:
我从这个网站找到了一个很好的建议:
http://lists.cs.uiuc.edu/pipermail/cfe-users/2013-November/000293.html
这帮助我解决了这个问题。 如果有人需要一起测试它,我会发布OMP + MPI hello world。
#include <mpi.h>
#include "omp.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
#pragma omp parallel
printf("Hello from thread %d, nthreads %d,from processor %s, rank %d out of %d processors\n", omp_get_thread_num(), omp_get_num_threads(),processor_name, world_rank, world_size);
// Finalize the MPI environment.
MPI_Finalize();
}
玩得开心
GF