Dear afni experts,
I would like to execute afni commands from python, e.g., using subprocess.check_call() or ipython’s ! notation.
However, it seems that commands with OpenMP multithread support, e.g., 3dREMLfit or 3dDeconvolve, only deploy a single thread when executed from python, dramatically slowing down the computation.
For example, when I run
in ipython, it spawns only one thread and computes very slowly. But when I run the same script directly from the shell
$ tcsh stats.REML_cmd
it spawns 15 thread and runs considerably faster.
Is there a way to execute 3dREMLfit in multithreaded mode from python?
Thanks for help~
Both of your commands (subprocess from python
and ‘!’ from ipython) use multi-threaded OpenMP
on my system.
What is the output of “afni -ver”? What OS and
OS version are you running?
Here is my system info that might be relevant
% afni -ver
Precompiled binary macosx_10.7_Intel_64: Nov 23 2016 (Version AFNI_16.3.13)
% system_profiler SPSoftwareDataType
System Version: macOS 10.12 (16A323)
Kernel Version: Darwin 16.0.0
Boot Volume: C
Boot Mode: Normal
Secure Virtual Memory: Enabled
System Integrity Protection: Disabled
Time since boot: 6 days 8:11
Python 3.5.2 |Anaconda custom (x86_64)| (default, Jul 2 2016, 17:52:12)
% cat .bashrc
Do you see any suspicious items?
Sorry, I’ve overlooked an important detail:
Previously, I tested both subprocess and ! notation in jupyter notebook, and got the single threaded result.
I’ve just re-tested them in vanilla ipython console, and as rick said, both of them worked as expected with OpenMP enabled.
What’s wrong with jupyter notebook, then?
Reinstalled anaconda (Python 3.5.2 |Anaconda 4.2.0 (x86_64)), now OpenMP works in jupyter notebook.