[SciPy-user] Are cf2py threadsafe and cf2py inplace incompatible?
Anand Patil
anand.prabhakar.patil at gmail.com
Mon Jun 23 18:12:56 EDT 2008
Hi all,
I'm trying to write a multithreaded function where each thread fills
in a portion of an array. I'm on a MacBook Pro using Python 2.5 and
the numpy subversion head. The following program produces intermittent
seg faults:
---------------------
from f2py_test import test
from numpy import *
from threading import Thread, Lock
from copy import copy
D = empty((60,60))
n_threads = 4
threads = []
for i in xrange(n_threads):
new_thread= Thread(target=test, args=(D,))
threads.append(new_thread)
new_thread.start()
[thread.join() for thread in threads]
-----------------
where f2py_test.f is just
-----------------
SUBROUTINE test(D,nx)
cf2py intent(inplace) D
cf2py intent(hide) nx
cf2py threadsafe
DOUBLE PRECISION D(nx,nx)
INTEGER nx
! Writing to D would happen here.
! Each thread would get some of the columns.
RETURN
END
------------------
Is there any way I can make this safe without computing the pieces
independently and copying them in in serial?
Thanks very much,
Anand
The relevant bits of the crash report are
Process: Python [6796]
Path: /Library/Frameworks/Python.framework/Versions/2.5/
Resources/Python.app/Contents/MacOS/Python
Identifier: Python
Version: ??? (???)
Code Type: X86 (Native)
Parent Process: bash [2950]
Date/Time: 2008-06-23 22:58:21.777 +0100
OS Version: Mac OS X 10.5.3 (9D34)
Report Version: 6
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000039cc148
Crashed Thread: 3
...
Thread 3 Crashed:
0 multiarray.so 0x011c135b _strided_byte_copy + 427
(arrayobject.c:350)
1 multiarray.so 0x011f071d _copy_from_same_shape +
525 (arrayobject.c:978)
2 multiarray.so 0x012086eb _array_copy_into + 1195
(arrayobject.c:1134)
3 distances.so 0x031d0453 array_from_pyobj + 2179
(fortranobject.c:660)
4 distances.so 0x031cd5aa f2py_rout_distances_test
+ 170 (distancesmodule.c:233)
5 distances.so 0x031cee54 fortran_call + 68
(fortranobject.c:323)
6 org.python.python 0x0019b5d2 PyObject_Call + 50
7 org.python.python 0x0022a9e4 PyEval_EvalFrameEx + 15492
8 org.python.python 0x0022d445 PyEval_EvalFrameEx + 26341
9 org.python.python 0x0022d445 PyEval_EvalFrameEx + 26341
10 org.python.python 0x0022dba5 PyEval_EvalCodeEx + 1845
11 org.python.python 0x001bf4ce function_call + 446
12 org.python.python 0x0019b5d2 PyObject_Call + 50
13 org.python.python 0x001a3732 instancemethod_call + 354
14 org.python.python 0x0019b5d2 PyObject_Call + 50
15 org.python.python 0x00225c26
PyEval_CallObjectWithKeywords + 118
16 org.python.python 0x0026277f t_bootstrap + 63
17 libSystem.B.dylib 0x93ff06f5 _pthread_start + 321
18 libSystem.B.dylib 0x93ff05b2 thread_start + 34
...
Thread 3 crashed with X86 Thread State (32-bit):
eax: 0x00000000 ebx: 0x011c11bb ecx: 0x039cc148 edx: 0x00000000
edi: 0x00000021 esi: 0x03c39008 ebp: 0xb0184098 esp: 0xb0184080
ss: 0x0000001f efl: 0x00010293 eip: 0x011c135b cs: 0x00000017
ds: 0x0000001f es: 0x0000001f fs: 0x0000001f gs: 0x00000037
cr2: 0x039cc148
More information about the SciPy-User
mailing list