Ошибка в MPI_INIT при попытке простого mpi-скрипта в jni
При попытке openmpi/c через jni получаю сообщение об ошибке ниже. ошибка в MPI_INIT.
Ошибка не происходит, когда я запускаю скрипт c/ C++ вне jni.
Я погуглил ошибку и попытался использовать openmpi из apt-get и создать его локально (--enable static)
при создании кода я использую:
mpic++ -pipe -w -D_JNI_IMPLEMENTATION_ -m64 -fPIC ./LCAGraph/* -
I./libs/ -I/usr/include/ -I/usr/local/include/ -std=c++11 -Wall -fexceptions -O3 -fopenmp -DBOOST_SYSTEM_NO_DEPRECATED \
-I/usr/lib/jvm/java-8-oracle/include/ \
-I/usr/lib/jvm/java-8-oracle/include/linux/ \
-L./libs -lgsl -lgslcblas -lm -lboost_mpi -lboost_serialization -shared -o libLCAKernel.so
Для среды я использую Ubuntu и JVM работает внутри SBT
используемый код:
#include <boost/mpi.hpp>
#include <boost/serialization/vector.hpp>
#include "mpi.h"
.....
MPI_Init(NULL, NULL);
MPI_Status status;
MPI_Comm workercomm;
int numworkers = 11;
.....
Ошибка:
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f2a30f61850, pid=28003, tid=0x00007f2a398f4700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_161-b12) (build 1.8.0_161-b12)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.161-b12 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libmpi.so.12+0x7d850] mca_btl_base_select+0x60
#
# Core dump written. Default location: /opt/workspace/LCA-Calculator-Single/core or core.28003
#
# An error report file with more information is saved as:
# /opt/workspace/UBUBI-LCA-Calculator-Single/hs_err_pid28003.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
[a7dfb6d7fc46:28003] *** Process received signal ***
[a7dfb6d7fc46:28003] Signal: Aborted (6)
[a7dfb6d7fc46:28003] Signal code: (-6)
[a7dfb6d7fc46:28003] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7f2a6a030390]
[a7dfb6d7fc46:28003] [ 1] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38)[0x7f2a69870428]
[a7dfb6d7fc46:28003] [ 2] /lib/x86_64-linux-gnu/libc.so.6(abort+0x16a)[0x7f2a6987202a]
[a7dfb6d7fc46:28003] [ 3] /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so(+0x92c295)[0x7f2a6916a295]
[a7dfb6d7fc46:28003] [ 4] /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so(+0xacfd53)[0x7f2a6930dd53]
[a7dfb6d7fc46:28003] [ 5] /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so(JVM_handle_linux_signal+0x14f)[0x7f2a6916ff4f]
[a7dfb6d7fc46:28003] [ 6] /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so(+0x927ff3)[0x7f2a69165ff3]
[a7dfb6d7fc46:28003] [ 7] /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7f2a6a030390]
[a7dfb6d7fc46:28003] [ 8] /usr/lib/libmpi.so.12(mca_btl_base_select+0x60)[0x7f2a30f61850]
[a7dfb6d7fc46:28003] [ 9] /usr/local/lib/libmpi.so.40(mca_bml_r2_component_init+0x12)[0x7f2a31a39b92]
[a7dfb6d7fc46:28003] [10] /usr/local/lib/libmpi.so.40(mca_bml_base_init+0x8c)[0x7f2a31a3794c]
[a7dfb6d7fc46:28003] [11] /usr/local/lib/libmpi.so.40(ompi_mpi_init+0x6d3)[0x7f2a319e6143]
[a7dfb6d7fc46:28003] [12] /usr/local/lib/libmpi.so.40(MPI_Init+0xb9)[0x7f2a31a14869]
[a7dfb6d7fc46:28003] [13] /tmp/LCAKernel_0.1/Linux/amd64/libLCAKernel.so(_ZN13libStochastic3runEidNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_S5_iiiiiS5_liP5LCADBb+0x437)[0x7f2a32e5a0c7]
[a7dfb6d7fc46:28003] [14] /tmp/LCAKernel_0.1/Linux/amd64/libLCAKernel.so(Java_LCAKernel_LCAKernel_stochastic+0x36a)[0x7f2a32cc1efa]
[a7dfb6d7fc46:28003] [15] [0x7f2a4bc906c7]
[a7dfb6d7fc46:28003] *** End of error message ***
/usr/share/sbt/bin/sbt-launch-lib.bash: line 58: 28003 Aborted (core dumped) "$@"
root@a7dfb6d7fc46:/opt/workspace/LCA-Calculator-Single# root@a7dfb6d7fc46:/opt/workspace/LCA-Calculator-Single# bash: syntax error near unexpected token `('
root@a7dfb6d7fc46:/opt/workspace/LCA-Calculator-Single# root@a7dfb6d7fc46:/opt/workspace/LCA-Calculator-Single# bash: //}: No such file or directory
root@a7dfb6d7fc46:/opt/workspace/LCA-Calculator-Single# root@a7dfb6d7fc46:/opt/workspace/LCA-Calculator-Single# root@a7dfb6d7fc46:/opt/workspace/LCA-Calculator-Single# root@a7dfb6d7fc46:/opt/workspace/LCA-Calculator-Single#
РЕДАКТИРОВАТЬ 1:
Я подозревал, что проблема может заключаться в "использовании boostmpi с mpi", поэтому я отключил заголовки boostmpi. все та же ошибка.
1 ответ
Решение проблемы состояло в следующем:
1) если вы используете boostmpi, нет необходимости включать "mpi.h". Это не создало проблемы, когда я работал с C++ за пределами JNI.
2) установить boostmpi, собрав его с https://github.com/masumhabib/quest/wiki/How-to-Install-Boost