[英]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.