【发布时间】:2015-10-28 23:49:20
【问题描述】:
我正在尝试从 Java 调用 C 函数。 C 函数使用 openmp 并行一个 for 循环。然而,程序结束后,结果显示只使用了一个线程。所以,我想知道将openmp与JNI一起使用是否可行。
谢谢
下面是我的clang信息和makefile的内容:
clang version 3.5.0
Target: x86_64-apple-darwin15.0.0
Thread model: posix
CC = gcc
CLANG = clang-omp
CFLAGS = -c -Wall -fPIC -std=c11
OMP = -fopenmp
LIBFLAG = -dynamiclib
INCPATH = -I/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/include -I/usr/local/Cellar/libiomp/20150701/include/libiomp -I/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/include/darwin -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers
LIBPATH = -L./ -L/usr/local/Cellar/libiomp/20150701/lib -lepanet -liomp5
all: library
library: *.o
$(CC) $(LIBFLAG) $(OMP) -o libJNIFitness.jnilib *.o
*.o: *.c
$(CC) $(OMP) $(CFLAGS) $(INCPATH) *.c
clean:
rm *.o libJNIFitness.jnilib
【问题讨论】:
-
是的,我这样做了cholmod-in-java。
-
什么操作系统,什么编译器,你使用了什么编译器选项,你的硬件是什么?
-
它是 OSX EI Capitan 所以编译器是 LLVM,我使用 clang-omp 编译 C 代码。
-
您使用的是什么版本的 Clang?你的编译器选项是什么?你有没有用 openmp 和 clang 写过一个小小的 hello world 来看看你得到了多个线程?如果你没有注意到最近有几个关于 Clang 和 OpenMP 问题的问题。
-
@Zboson 感谢您的回复,我添加了您要求的信息。我的测试程序仅使用 C 运行良好。
标签: java-native-interface openmp