簡體   English   中英

f2py-自動多線程?

[英]f2py - automatic multithreading?

我目前正在處理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-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fstack-protector-strong -Wformat -Werror =格式安全-fPIC

....

這是我編譯Fortran模塊之后的大量輸出的一部分。 我不知道該如何處理。

ACML(AMD現已終止的數學庫)可以使用多核,請參閱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環境變量。

能夠通過環境變量或其他方式設置f2py線程的數量會很好。 我搜索了一下,但找不到有關此操作的任何信息。

但是,例如,如果您在Linux上運行,則可以使用taskset命令行實用程序,該實用程序提供了一種將進程(任何進程)固定到特定cpu核心或一組cpu核心的方法。 這有點粗糙,但是我認為它將滿足您的需求。

有關更多信息,請參見此處,例如: http : //xmodulo.com/run-program-process-specific-cpu-cores-linux.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM