<div dir="ltr">I would suggest before going to homebrew etc. to send an e-mail to Xcode asking for some guidelines. Because it seems clang now comes with openmp supported maybe all we need to do is update the correct headers. </div><br><div class="gmail_quote"><div dir="ltr">On Wed, Dec 14, 2016 at 1:45 PM Ariel Rokem <<a href="mailto:arokem@gmail.com">arokem@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Hi Paolo, <div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I can partially reproduce your findings (also on a MAC, OS 10.12.1 in my case):<br class="gmail_msg"><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg"></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg">On Wed, Dec 14, 2016 at 9:21 AM, Paolo Avesani <span dir="ltr" class="gmail_msg"><<a href="mailto:avesani@fbk.eu" class="gmail_msg" target="_blank">avesani@fbk.eu</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg">Just for reference I tried two ways on Mac OS 10.11.5:</div><div class="gmail_msg">1. compile with clang </div><div class="gmail_msg">2.  compile with gcc provided by anaconda</div><div class="gmail_msg">In both cases compilation failed.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">1. compile with clang </div><div class="gmail_msg">----------------------------</div>$ python setup.py build_ext --inplace<br class="gmail_msg">Compiling test.pyx because it changed.<br class="gmail_msg">Cythonizing test.pyx<br class="gmail_msg">running build_ext<br class="gmail_msg">building 'test' extension<br class="gmail_msg">creating build<br class="gmail_msg">creating build/temp.macosx-10.6-x86_64-2.7<br class="gmail_msg">gcc -fno-strict-aliasing -I/Users/paolo/Software/miniconda/include -arch x86_64 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/paolo/Software/miniconda/include/python2.7 -c test.c -o build/temp.macosx-10.6-x86_64-2.7/test.o -fopenmp<br class="gmail_msg">clang: error: unsupported option '-fopenmp'<br class="gmail_msg">error: command 'gcc' failed with exit status 1<div class="gmail_msg"><br class="gmail_msg"></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">I get the "-fopenmp" error, but compilation then proceeds without a problem. I don't think that openmp is used (does anyone know how I would know for sure?), but that's fine for my needs. As Stephan has reported, you can get an omp-enabled gcc from homebrew, but I don't use that, because when I do any real data analysis, I do it on AWS ubuntu machines anyway.</div><div class="gmail_msg"> </div><div class="gmail_msg">I am not sure why your clan exits with status 1, but I don't get that on my machine. What do you see when you run `gcc --version`?</div></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><div class="gmail_msg">2.  compile with gcc provided by anaconda</div></div><div class="gmail_msg">---------------------------------------------------------</div>







$ python setup.py build_ext --inplace<br class="gmail_msg">Compiling test.pyx because it changed.<br class="gmail_msg">Cythonizing test.pyx<br class="gmail_msg">running build_ext<br class="gmail_msg">building 'test' extension<br class="gmail_msg">gcc -fno-strict-aliasing -I/Users/paolo/Software/miniconda/include -arch x86_64 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/paolo/Software/miniconda/include/python2.7 -c test.c -o build/temp.macosx-10.6-x86_64-2.7/test.o -fopenmp<br class="gmail_msg">In file included from /Users/paolo/Software/miniconda/lib/gcc/x86_64-apple-darwin11.4.2/4.8.5/include-fixed/syslimits.h:7:0,<br class="gmail_msg">                 from /Users/paolo/Software/miniconda/lib/gcc/x86_64-apple-darwin11.4.2/4.8.5/include-fixed/limits.h:34,<br class="gmail_msg">                 from /Users/paolo/Software/miniconda/include/python2.7/Python.h:19,<br class="gmail_msg">                 from test.c:16:<br class="gmail_msg">/Users/paolo/Software/miniconda/lib/gcc/x86_64-apple-darwin11.4.2/4.8.5/include-fixed/limits.h:168:61: fatal error: limits.h: No such file or directory<br class="gmail_msg"> #include_next <limits.h>  /* recurse down to the real one */<br class="gmail_msg">compilation terminated.<br class="gmail_msg">error: command 'gcc' failed with exit status 1<div class="gmail_extra gmail_msg"><br class="gmail_msg"></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">Yep. I see a similar error with Anaconda gcc as well.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Cheers, </div></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Ariel</div></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"> </div><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"></div><div class="gmail_extra gmail_msg"><div class="gmail_msg"><div class="m_309764606960843466m_-7404690173850282482gmail-h5 gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Wed, Dec 14, 2016 at 4:51 PM, Eleftherios Garyfallidis <span dir="ltr" class="gmail_msg"><<a href="mailto:elef@indiana.edu" class="gmail_msg" target="_blank">elef@indiana.edu</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Hi Emanuele,</div><div class="gmail_msg"><br class="gmail_msg"></div>My understanding is that openmp was only temporarily not available when clang replaced gcc in osx. <div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">So, I would suggest to go ahead with openmp. Any current installation issues are only temporarily for osx. </div><div class="gmail_msg">Openmp gives us a lot of capability to play with shared memory and it is a standard that will be around</div><div class="gmail_msg">for very long time. Also, the great integration in cython makes the algorithms really easy to read. </div><div class="gmail_msg">So, especially for this project my recommendation is to use openmp rather than multiprocessing. All the way! :)</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I am CC'ing Stephan who wrote the instructions for osx. I am sure he can help you with this. I would also suggest</div><div class="gmail_msg">to check if xcode provides any new guis for enabling openmp. I remember there was something for that.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Laterz!</div><span class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-HOEnZb gmail_msg"><font color="#888888" class="gmail_msg"><div class="gmail_msg">Eleftherios</div></font></span><div class="gmail_msg"><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-h5 gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Wed, Dec 14, 2016 at 6:29 AM Emanuele Olivetti <<a href="mailto:olivetti@fbk.eu" class="gmail_msg" target="_blank">olivetti@fbk.eu</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Hi Eleftherios,<div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Thank you for pointing me to the MDF example. From what I see the Cython syntax is not complex, which is good.</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">My only concern is the availability of OpenMP in the systems where DiPy is used. On a reasonably recent GNU/Linux machine it seems straightforward to have libgomp and the proper version of gcc. On other systems - say OSX - the situation is less clear to me. According to what I read here</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">  <a href="http://nipy.org/dipy/installation.html#openmp-with-osx" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">http://nipy.org/dipy/installation.html#openmp-with-osx</a></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">the OSX installation steps are not meant for standard end users. Are those instructions updated?</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">As a test of that, we've just tried to skip the steps described above and instead to install gcc with conda on OSX ("conda install gcc"). In the process, conda installed the recent gcc-4.8 with libgomp, which seems good news. Unfortunately, when we tried to compile a simple example of Cython code using parallelization (see below), the process failed (fatal error: limits.h : no such file or directory)...</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">For the reasons above, I am wondering whether the very simple solution of using the "multiprocessing" module, available from the standard Python library, may be an acceptable first step towards the more efficient multithreading of Cython/libgomp. With "multiprocessing", there is no extra dependency on libgomp, or recent gcc or else. Moreover, multiprocessing does not require to have Cython code, because it works on plain Python too.</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Best,</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Emanuele</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">---- test.pyx ----</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">from cython import parallel</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">from libc.stdio cimport printf</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">def test_func():</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">    cdef int thread_id = -1</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">    with nogil, parallel.parallel(num_threads=10):</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">        thread_id = parallel.threadid()</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">        printf("Thread ID: %d\n", thread_id)</div></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">-----</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">----- setup.py -----</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">from distutils.core import setup, Extension</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">from Cython.Build import cythonize</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">extensions = [Extension(</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">                "test",</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">                sources=["test.pyx"],</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">                extra_compile_args=["-fopenmp"],</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">                extra_link_args=["-fopenmp"]</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">            )]</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">setup(</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">    ext_modules = cythonize(extensions)</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">)</div></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">----</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">python setup.py build_ext --inplace<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div></div><div class="gmail_extra m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div class="gmail_quote m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">On Tue, Dec 13, 2016 at 11:17 PM, Eleftherios Garyfallidis <span dir="ltr" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><<a href="mailto:elef@indiana.edu" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">elef@indiana.edu</a>></span> wrote:<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><blockquote class="gmail_quote m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Hi Emanuele,<div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Here is an example of how we calculated the distance matrix in parallel (for the MDF) using OpenMP</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><a href="https://github.com/nipy/dipy/blob/master/dipy/align/bundlemin.pyx" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">https://github.com/nipy/dipy/blob/master/dipy/align/bundlemin.pyx</a><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">You can just add another function that does the same using mam. It should be really easy to implement as we have</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">already done it for the MDF for speeding up SLR.</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Then we need to update the bundle_distances* functions to use the parallel versions.</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">I'll be happy to help you with this. Let's try to schedule some time to look at this together.</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Best regards,</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Eleftherios</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div></div><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div class="gmail_quote m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917h5 m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div dir="ltr" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">On Mon, Dec 12, 2016 at 11:16 AM Emanuele Olivetti <<a href="mailto:olivetti@fbk.eu" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">olivetti@fbk.eu</a>> wrote:<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div></div></div><blockquote class="gmail_quote m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917h5 m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><div dir="ltr" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Hi,<div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">I usually compute the distance matrix between two lists of streamlines using bundle_distances_mam() or bundle_distances_mdf(). When the lists are large, it is convenient and easy to exploit the multiple cores of the CPU because such computation is intrinsically (embarassingly) parallel. At the moment I'm doing it through the multiprocessing or the joblib modules, because I cannot find a way directly from DiPy, at least according to what I see in dipy/tracking/distances.pyx . But consider that I am not proficient in cython.parallel.</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Is there a preferable way to perform such parallel computation? I plan to prepare a pull request in future and I'd like to be on the right track.</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Best,</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">Emanuele</div><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div></div></div></div>
_______________________________________________<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
Neuroimaging mailing list<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
<a href="mailto:Neuroimaging@python.org" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">Neuroimaging@python.org</a><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
<a href="https://mail.python.org/mailman/listinfo/neuroimaging" rel="noreferrer" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">https://mail.python.org/mailman/listinfo/neuroimaging</a><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798m_-3294861539979494917m_3968506265955238318gmail_msg m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
</blockquote></div>
<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">_______________________________________________<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
Neuroimaging mailing list<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
<a href="mailto:Neuroimaging@python.org" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">Neuroimaging@python.org</a><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
<a href="https://mail.python.org/mailman/listinfo/neuroimaging" rel="noreferrer" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">https://mail.python.org/mailman/listinfo/neuroimaging</a><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></blockquote></div><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg"></div>
_______________________________________________<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
Neuroimaging mailing list<br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
<a href="mailto:Neuroimaging@python.org" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">Neuroimaging@python.org</a><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
<a href="https://mail.python.org/mailman/listinfo/neuroimaging" rel="noreferrer" class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg" target="_blank">https://mail.python.org/mailman/listinfo/neuroimaging</a><br class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail-m_9216657807958031798gmail_msg gmail_msg">
</blockquote></div></div></div></div>
<br class="gmail_msg">_______________________________________________<br class="gmail_msg">
Neuroimaging mailing list<br class="gmail_msg">
<a href="mailto:Neuroimaging@python.org" class="gmail_msg" target="_blank">Neuroimaging@python.org</a><br class="gmail_msg">
<a href="https://mail.python.org/mailman/listinfo/neuroimaging" rel="noreferrer" class="gmail_msg" target="_blank">https://mail.python.org/mailman/listinfo/neuroimaging</a><br class="gmail_msg">
<br class="gmail_msg"></blockquote></div><br class="gmail_msg"><br clear="all" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div></div></div><span class="m_309764606960843466m_-7404690173850282482gmail-HOEnZb gmail_msg"><font color="#888888" class="gmail_msg">-- <br class="gmail_msg"><div class="m_309764606960843466m_-7404690173850282482gmail-m_312810819580353079gmail_signature gmail_msg"><div dir="ltr" class="gmail_msg"><span style="font-family:arial,helvetica,sans-serif" class="gmail_msg">-------------------------------------------------------<br class="gmail_msg">Paolo Avesani<br class="gmail_msg">Fondazione Bruno Kessler<br class="gmail_msg">via Sommarive 18,<br class="gmail_msg">38050 Povo (TN) - I<br class="gmail_msg">phone:   <a href="tel:+39%200461%20314336" value="+390461314336" class="gmail_msg" target="_blank">+39 0461 314336</a><br class="gmail_msg">fax:        <a href="tel:+39%200461%20302040" value="+390461302040" class="gmail_msg" target="_blank">+39 0461 302040</a><br class="gmail_msg">email:     <a href="mailto:avesani@fbk.eu" class="gmail_msg" target="_blank">avesani@fbk.eu</a><br class="gmail_msg">web:       <a href="http://avesani.fbk.eu" class="gmail_msg" target="_blank">avesani.fbk.eu</a></span><br class="gmail_msg"><br class="gmail_msg"></div></div>
</font></span></div></div>
<br class="gmail_msg">_______________________________________________<br class="gmail_msg">
Neuroimaging mailing list<br class="gmail_msg">
<a href="mailto:Neuroimaging@python.org" class="gmail_msg" target="_blank">Neuroimaging@python.org</a><br class="gmail_msg">
<a href="https://mail.python.org/mailman/listinfo/neuroimaging" rel="noreferrer" class="gmail_msg" target="_blank">https://mail.python.org/mailman/listinfo/neuroimaging</a><br class="gmail_msg">
<br class="gmail_msg"></blockquote></div></div></div></div>
_______________________________________________<br class="gmail_msg">
Neuroimaging mailing list<br class="gmail_msg">
<a href="mailto:Neuroimaging@python.org" class="gmail_msg" target="_blank">Neuroimaging@python.org</a><br class="gmail_msg">
<a href="https://mail.python.org/mailman/listinfo/neuroimaging" rel="noreferrer" class="gmail_msg" target="_blank">https://mail.python.org/mailman/listinfo/neuroimaging</a><br class="gmail_msg">
</blockquote></div>