我正在使用 python 3.8 和一个用 C++ 编写的计算 DLL,并使用 openmp 来使用所有 CPU 的内核。 当我测试 C++ 代码时,它使用了所有 CPU 的内核。但是当我将它编译为 DLL 并从 python 使用它时,它只使用 1 个内核,就像 Python 限制库只使用 1 个内核一样。
如果我做错了什么,这是我的库编译行:
g++ -O3 -Wall -c -fmessage-length=0 -fopenmp -pthread -o "src\\Environnement.o" "..\\src\\Environnement.cpp"
g++ -O3 -Wall -c -fmessage-length=0 -fopenmp -pthread -o "src\\LexicalAnalyser.o" "..\\src\\LexicalAnalyser.cpp"
g++ -O3 -Wall -c -fmessage-length=0 -fopenmp -pthread -o "src\\Fun.o" "..\\src\\Fun.cpp"
g++ -O3 -Wall -c -fmessage-length=0 -fopenmp -pthread -o "src\\lib.o" "..\\src\\lib.cpp"
g++ -O3 -Wall -c -fmessage-length=0 -fopenmp -pthread -o "src\\Status.o" "..\\src\\Status.cpp"
g++ -O3 -Wall -c -fmessage-length=0 -fopenmp -pthread -o "src\\Lexem.o" "..\\src\\Lexem.cpp"
g++ -shared -o libSyntaxicAnalyser.dll "src\\Environnement.o" "src\\Fun.o" "src\\Lexem.o" "src\\LexicalAnalyser.o" "src\\Status.o" "src\\Variable.o" "src\\lib.o" "D:\\Apps\\mingw\\lib\\gcc\\mingw32\\9.2.0\\libgomp.a" -pthread
但我觉得 python GIL 也适用于 C++ 库并阻止它使用所有 cpu 的内核...... 有人有答案吗?
非常感谢 山姆
答案 0 :(得分:0)
所以在挖掘之后,我发现了两件事:
g++ -LD:/Apps/mingw/lib/gcc/mingw32/9.2.0 -shared -o libSyntaxicAnalyser.dll "src\\Environnement.o" "src\\Fun.o" "src\\Lexem.o" "src\\LexicalAnalyser.o" "src\\Status.o" "src\\Variable.o" "src\\lib.o" "src\\main.o" -lgomp -pthread
现在它起作用了!
干杯