f2py自动多线程处理?

2024-06-16 18:32:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在编写一个Python代码,为了提高速度,我使用f2py移植一些现有的Fortran代码。一切都很好,而且加速是惊人的。但是,我发现代码现在似乎在多个线程上运行(根据htop),这是我所做的没有指定的任何地方(也许这是由f2py本质上完成的?)。在

下面是我用来创建模块的命令:

f2py --f90exec="gfortran" --f90flags="" --noopt \
$(ACMLLIB) $(FFTLIB) $(ACMLINC) $(FFTINC) -c -m fmod myCode.f90

其中变量$(ACMLLIB) $(FFTLIB) $(ACMLINC)$(FFTINC)是指向库的路径。在

当我找到所有的核心时,我会找到所有的核心。我不认为它能做到这一点,但我想至少能够控制它——我如何通过设置线程数来做到这一点?在

我怀疑,这与-pthread选项有关:

....

compiling C sources

C compiler: x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC

....

这是我编译Fortran模块后大量输出的一部分。我不知道该怎么办。在


Tags: 模块代码核心地方线程速度htopfortran
2条回答

如果能够通过一个环境变量或其他东西来设置f2py线程的数量,那就太好了。我到处找了一下,但找不到任何有关这方面的信息。在

但是,如果您在linux上运行,可以使用taskset命令行实用程序,它提供了一种将进程(任何进程)固定到特定的cpu核心或一组cpu核心的方法。这有点粗糙,但我认为它能满足你的需要。在

更多信息,请看这里,例如:http://xmodulo.com/run-program-process-specific-cpu-cores-linux.html

AMD的数学库ACML可以使用多核,请参见 http://developer.amd.com/tools-and-sdks/archive/compute/amd-core-math-library-acml/acml-product-features/

这很可能就是你看到的原因。这里有一个文档的副本:https://engineering.ucsb.edu/~stefan/acml.pdf,其中提到使用环境变量OMP_NUM_THREADS来控制要使用的核心/线程的数量。这是标准的OpenMP环境变量。在

相关问题 更多 >