[SciPy-dev] parallelizing cKDTRee

Sturla Molden sturla@molden...
Wed Jan 7 11:39:11 CST 2009

On 1/7/2009 4:55 PM, Anne Archibald wrote:

> This would be a good idea. One labor-saving device would be to take
> advantage of the fact that construction is pretty cheap and have the
> pickle method pickle only the construction parameters and the
> underlying array. Not that pickling the tree structure would be very
> hard either. 

Yes. I have an example of that in the Cookbook.

I'm actually looking at adding __reduce__ and __setstate__ now. I'll 
post the code tomorrow or on friday.

>> 3. Multithreading (Cython):
>> We could simply call cKDTree.__query in parallel using OpenMP pragmas.
>> It would be a simple and quite portable hack.
> Are there compilation issues with using OpenMP? Otherwise this should
> be fairly easy too, although selecting the right degree of parallelism
> may be a problem (I have no experience with OpenMP).

Yes. There are compilers that don't support it (but gcc does). And there 
is the Cyton to C compilation, which tempers with the variable names. 
The pragma must thus be added to the C code and possibly use variable 
names present in the autogenerated C. Since there is no need for any 
synchronization among OpenMP threads here, I guess this should suffice:

#pragma omp parallel \
private(__pyx_v_c, __pyx_v_k, __pyx_v_dd, \
__pyx_v_ii, __pyx_v_xx, \ __pyx_v_self, \
__pyx_v_eps, __pyx_v_p, \

It should be placed right before the line that says:

   for (__pyx_v_c = 0; __pyx_v_c < __pyx_8; __pyx_v_c+=1) {

     /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":583

Sturla Molden

More information about the Scipy-dev mailing list