Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 29, 2011 19:54:42

DbIHbKA
От:
Зарегистрирован: 2011-06-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

SWIG и Python

у меня есть программа на C которая использует OpenMP для распараллеливания и я хочу сделать из нее модуль для Python. В документации к swig ничего не нашел google тоже ничем не помог вот решил спросить здесь.



Офлайн

#2 Июнь 29, 2011 20:25:51

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

SWIG и Python

DbIHbKA
ничего не нашел
так а что искали?



Офлайн

#3 Июнь 29, 2011 20:29:50

DbIHbKA
От:
Зарегистрирован: 2011-06-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

SWIG и Python

я искал как с помощью swig сделать из моей программы на С модуль дляPython



Офлайн

#4 Июнь 29, 2011 20:37:05

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

SWIG и Python

Это в доках swig есть
Если коротко - то говорите
swig -c++ -python ake.i

а в файле

/* File : example.i */
%module(docstring="ake imitation") ake

%include "typemaps.i"
%include "carrays.i"
%include <pybuffer.i>


%array_class(double, doubleArray);
%array_class(float, floatArray);
%array_class(int, intArray);
%array_class(short, shortArray);
%array_class(unsigned char, uArray);

%{
#define SWIG_FILE_WITH_INIT
#include "ake.h"
%}

%include "ake.h"
Это для c++ для с опция -c



Офлайн

#5 Июнь 29, 2011 20:46:07

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

SWIG и Python

Извините отвлекся
В данном случае должен получится ake_wrap.cxx ake.py
первый включаем в dll а второе автоматом используется для импорта dll должен быть не dll а _ake.pyd (надо переименовать или сделать чтобы сборщиек его сразу собирал) (инструкция для windows)



Офлайн

#6 Июнь 29, 2011 20:50:40

DbIHbKA
От:
Зарегистрирован: 2011-06-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

SWIG и Python

спасибо конечно но я все это и в документации прочитал. Когда используешь библиотеку OpenMP то при компиляции приходиться прописывать опцию -fopenmp а вот при сборке с swgi я не нашел где можно прописать эту опцию вот



Офлайн

#7 Июнь 29, 2011 21:32:52

DbIHbKA
От:
Зарегистрирован: 2011-06-29
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

SWIG и Python

попробовал собрал вот так:
gcc -fopenmp -o2 -fPIC -c first.c
gcc -fopenmp -O2 -fPIC -c first_wrap.c -I /usr/include/python2.7
gcc –shared first.o first_wrap.o -o _first.so
то есть тупо добавил опцию -fopenmp и при импортировании получил следующее

import first
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “first.py”, line 26, in <module>
_first = swig_import_helper()
File “first.py”, line 22, in swig_import_helper
_mod = imp.load_module('_first', fp, pathname, description)
ImportError: ./_first.so: undefined symbol: GOMP_parallel_end



Офлайн

#8 Июнь 29, 2011 21:33:16

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

SWIG и Python

swig ведь не собирается, собирается только ake_wrap.cxx
надо поискать динамическую библиотеку которая грузится - скорее всего ее не находит
те где GOMP_parallel_end находится



Отредактировано (Июнь 29, 2011 21:38:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version