我目前正在编写Python代码,为了获得一定的速度,我使用f2py移植了一些现有的Fortran代码。一切运行良好,加速是惊人的。但是,我发现代码现在似乎运行在多个线程上(根据htop),这是没有指定的东西(也许这是f2py在本质上做的?)。
下面是我用来创建模块的命令:
f2py --f90exec="gfortran" --f90flags="" --noopt \
$(ACMLLIB) $(FFTLIB) $(ACMLINC) $(FFTINC) -c -m fmod myCode.f90其中变量$(ACMLLIB) $(FFTLIB) $(ACMLINC)和$(FFTINC)是指向库的路径。
看起来,当我运行这个脚本时,它需要它能找到的所有核心。我没有问题,它这样做,但我希望至少能够控制它-我如何做到这一点,例如,设置线程数?
我猜想,这与-pthread选项有关:
…… 编译C源 C编译器: x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall ……
这是我编译Fortran模块后大量输出的一部分。我不知道该怎么处理。
发布于 2017-03-22 08:40:30
ACML,AMD的数学库(现在已结束)可以使用多核,请参阅http://developer.amd.com/tools-and-sdks/archive/compute/amd-core-math-library-acml/acml-product-features/。
这很可能就是你看到的原因。这里有一个docs的副本:https://engineering.ucsb.edu/~stefan/acml.pdf,其中提到使用环境变量OMP_NUM_THREADS来控制要使用的内核/线程的数量。这是标准的OpenMP环境变量。
发布于 2017-03-21 23:23:39
如果能够通过环境变量或其他什么来设置f2py线程的数量,那就太好了。我四处搜索了一下,但没有找到任何关于这样做的信息。
但是,如果您在linux上运行,比方说,您可以使用taskset命令行实用程序,它提供了一种将进程(任何进程)绑定到特定的cpu核心或一组cpu核心的方法。这有点粗糙,但我认为它能满足你的需要。
有关更多信息,请参见这里,例如:http://xmodulo.com/run-program-process-specific-cpu-cores-linux.html
https://stackoverflow.com/questions/42939452
复制相似问题