segfault calling SSE enabled library from ctypes

O

Olivier Grisel

Hello,

It seems that I am able to reproduce the same problem as reported
earlier on this list by someone else:

http://mail.python.org/pipermail/python-list/2008-October/511794.html

Similar setup: python 2.5.2 / gcc (Ubuntu 4.3.2-1ubuntu11) from
Intrepid on 32bit intel Core 2 Duo. I can confirm this is not related
to any alignment problem from data passed from python, I took care of
that and I could even reproduce the problem with the following minimal
test case that does not use any external data (you can fetch the
following source here
http://www.bitbucket.org/ogrisel/ctypes_sse/get/tip.gz )

<sample>

=== dummysse.c ===

#include <stdio.h>
#include <emmintrin.h>

void dummy_sse(void)
{
// allocate an alligned vector of 128 bits
__m128 myvector;

printf("[dummy_sse] before calling setzero\n");
fflush(stdout);

// initialize it to 4 32 bits float valued to zeros
myvector = _mm_setzero_ps();

printf("[dummysse] after calling setzero\n");
fflush(stdout);

// display the content of the vector
float* part = (float*) &myvector;
printf("[dummysse] myvector = {%f, %f, %f, %f}\n",
part[0], part[1], part[2], part[3]);
}

int main()
{
dummy_sse();
return 0;
}

=== dummysse.py ===

from ctypes import cdll

lib = cdll.LoadLibrary('./dummysse.so')
lib.dummy_sse()


=== Makefile ===
CC = gcc
CFLAGS = -Wall -g -O0 -msse2

all: dummysse dummysse.so

dummysse:
$(CC) $(CFLAGS) $(LIBS) -o dummysse dummysse.c
# ./dummysse

dummysse.so:
$(CC) $(CFLAGS) $(LIBS) -shared -o dummysse.so dummysse.c
# python dummysse.py

clean:
rm -f dummysse dummysse.so

</sample>

By running the main of the C program I get the expected behavior:

gcc -Wall -g -O0 -msse2 -o dummysse dummysse.c
./dummysse
[dummy_sse] before calling setzero
[dummysse] after calling setzero
[dummysse] myvector = {0.000000, 0.000000, 0.000000, 0.000000}

Running from python, the call to the _mm_setzero_ps() segfaults:

gcc -Wall -g -O0 -msse2 -shared -o dummysse.so dummysse.c
python dummysse.py
[dummy_sse] before calling setzero
Segmentation fault

Is this to be expected? The result to a call to "valgrind python
dummysse.py" is available here :

http://www.bitbucket.org/ogrisel/ctypes_sse/src/tip/valgrind.log

I am not familiar with python internal at all so I cannot understand
what's wrong. You can notice that valgrind make the program run till
the end and display the correct results (4 zeros) on stdout while
logging a bunch of errors (most of those are not related to our
problem since they appear when launching python on an empty script).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,053
Latest member
BrodieSola

Latest Threads

Top