我正在编写一个结合使用消息传递接口(MPI)和qthreads的代码。我不得不使用大于默认的堆栈大小(8KB而不是4KB),即使我的实际代码使用每个qthread少于1 KB。我相信MPI调用是堆栈溢出的原因。
该代码使用Sandia国家实验室的OpenMPI和qthreads。
代码在每个MPI进程上使用单个qthread“shepherd”运行,使用qthread_init(1) - qthreads仅用于MPI进程中的上下文切换。
我的问题是: 1)有没有办法确定MPI调用将使用多少堆栈空间? 2)有没有办法减少它使用的堆栈空间? 3)是否有特定的MPI调用使用比平均MPI调用更大的堆栈空间?
答案 0 :(得分:0)
有针对此的分析工具,谷歌mpi profiling
我建议mpip,因为它易于设置。另外Valgrind有关于调试mpi和并行程序的部分。如果这些不能识别问题,你将不得不深入研究性能调优并使用message sizes等等。
答案 1 :(得分:0)
可以从Pthreads调用MPI,其类似于8 MB的默认堆栈大小。在实践中,我认为它低于1 KB,在堆上分配了大的临时值。