Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python f2py-自动多线程?_Python_Fortran_F2py - Fatal编程技术网

Python f2py-自动多线程?

Python f2py-自动多线程?,python,fortran,f2py,Python,Fortran,F2py,我目前正在编写Python代码,为了提高速度,我使用f2py移植了一些现有的Fortran代码。一切都很好,速度也很快。然而,我发现代码现在似乎运行在多个线程上(根据htop),这是我所做的而不是指定的任何地方(可能这本质上是由f2py完成的?) 下面是我用来创建模块的命令: f2py --f90exec="gfortran" --f90flags="" --noopt \ $(ACMLLIB) $(FFTLIB) $(ACMLINC) $(FFTINC)

我目前正在编写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-Wstrict原型-fno严格混叠-Wdate time-D_FORTIFY_SOURCE=2-g-fstack protector strong-Wformat-Werror=格式安全性-fPIC


这是我编译Fortran模块后大量输出的一部分。我不知道如何处理这个问题。

如果能够通过环境变量或其他方式设置f2py线程的数量,那就太好了。我四处搜索了一下,但找不到任何关于这样做的信息

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


有关更多信息,请查看此处,例如:

能够通过环境变量或其他方式设置f2py线程的数量会更好。我四处搜索了一下,但找不到任何关于这样做的信息

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

有关更多信息,请查看此处,例如:

ACML,AMD的(现在生命结束)数学库可以使用多核,请参阅

这很可能就是你看到的原因。这里有一份文档副本:其中提到使用环境变量
OMP_NUM_THREADS
来控制要使用的内核/线程数。这是标准的OpenMP环境变量。

ACML,AMD的(现在生命结束)数学库可以使用多核,请参阅



这很可能就是你看到的原因。这里有一份文档副本:其中提到使用环境变量
OMP_NUM_THREADS
来控制要使用的内核/线程数。这是标准的OpenMP环境变量。

好的,我来看看。。谢谢这是令人恼火的,虽然,这是无法控制的…我不是说它不能确定-只是我无法找到如何做到这一点。如果有f2py邮件列表之类的东西,那可能是另一个好地方。。谢谢这是令人恼火的,虽然,这是无法控制的…我不是说它不能确定-只是我无法找到如何做到这一点。如果有一个f2py邮件列表或其他东西,那可能是另一个好地方。是什么产生了线程?Python部分?Fortran部分?什么是并行运行的?它不应该单独发生,请展示一些代码。我不知道到底是什么产生了并行化和/或什么是并行运行的。当我在终端中打开htop并运行代码时,它显示我的机器的所有4个线程都被占用。如何检查哪个部分是并行运行的?通过调查。抱歉,如果看不到任何内容,就不能再多说了。所有代码都不适合这里。你需要看哪一部分?我要做的是,使用现有的纯Python版本(只显示一个线程上的活动)并用Fortran版本替换一个函数。我得到了很好的加速,结果完全相同,但我看到了4个线程上的活动。没有使用openMP(也没有标志)。据我所知,它一定是fortran部分。是什么产生了线程?Python部分?Fortran部分?什么是并行运行的?它不应该单独发生,请展示一些代码。我不知道到底是什么产生了并行化和/或什么是并行运行的。当我在终端中打开htop并运行代码时,它显示我的机器的所有4个线程都被占用。如何检查哪个部分是并行运行的?通过调查。抱歉,如果看不到任何内容,就不能再多说了。所有代码都不适合这里。你需要看哪一部分?我要做的是,使用现有的纯Python版本(只显示一个线程上的活动)并用Fortran版本替换一个函数。我得到了很好的加速,结果完全相同,但我看到了4个线程上的活动。没有使用openMP(也没有标志)。据我所见,它一定是fortran部分。是的,我使用ACML(计划将来更改,但现在就可以了…),但我没有在代码中明确指定任何OMP内容。这是由ACML例程本身完成的吗?是的,它可以自己完成。非常合理的解释。设置OMP_NUM_线程并用它编译不会改变任何事情。此外,当我取出所有ACML例程并在不链接库的情况下编译时,它似乎仍然在多个内核上运行。对不起,我猜不到。如果没有看到代码,我将无法进一步提供帮助。是的,我使用ACML(计划将来更改,但现在就可以了…),但我没有在代码中明确指定任何OMP内容。这是由ACML例程本身完成的吗?是的,它可以自己完成。非常合理的解释。设置OMP_NUM_线程并编译