|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 | ||||||||||
|
Expert Confirmé
![]() ![]() Inscription : décembre 2007 Messages : 1 767 ![]() |
Bonjour,
Ça y est!!! Voilà mon code test: bib.cpp Code :
Code :
Code :
Code :
Ce qui donne "calcul.pyd sous Windows, ou "calcul.so" sous Unix Utilisation: Code :
Contrairement à ce que je pensais, la partie de code en C++ (bib.cpp) n'est pas compilée en bibliothèque indépendante, mais liée au code Cython. J'ai essayé avec Windows (compilateur Visual C++ et mingw32) et Mint13 compatible Ubuntu 12.04: tout fonctionne parfaitement. A noter que l'exemple à télécharger fonctionne aussi parfaitement, et contient du code plus complexe (classes C++): si nécessaire, il pourrait être intéressant de s'y reporter. Ok? [Edit] niveau performance, la solution du pgcd directement codé en C++ est 4 fois plus rapide que la version en Python pourtant déjà rapide (merci Euclide!). Condition d'essai: 1 million de valeurs de a et de b au hasard, comprises entre 100 et 100000.
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos... Mes recettes python: http://www.jpvweb.com |
||||||||||
|
|
00
|
|
|
#22 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 693 ![]() |
Salut,
Le wiki Cython contient des tutos montrant comment wrapper C++ ici. Pour répondre à la question du PO, l'outil le plus efficace dépend du contexte. Si le seul élément du contexte c'est vous, on peut supposer que vous découvrez ces sujets. Partez de construction C++ et regardez les difficultés que vous éprouvez à les mettre en œuvre dans un cas ou dans l'autre. Quelque soit l'outil que vous aurez choisi, pratiquez suffisamment longtemps pour faire le tour du sujet. Après avoir pris le temps de balayer le sujet avec un de ces outils, passer à un autre ne sera pas un gros soucis: tous ces outils font la même chose seule la mise en œuvre change. Bon courage, - W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#23 |
|
Membre Expert
![]() Fred Enseignant Inscription : juillet 2006 Messages : 1 304 ![]() |
Bravo Tyrtamos!!!
Je pige pas les import dans le pyx, tu peux m'expliquer d'où ils viennent, j'ai du zapper des choses dans le tuto? Sinon pourquoi tout ces décorateurs, je n'ai jamais utilisé cela dans un pyx, et dans beaucoup de fichiers exemples, je ne les vois pas non plus.
__________________
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein) |
|
|
00
|
|
|
#24 | ||
|
Expert Confirmé
![]() ![]() Inscription : décembre 2007 Messages : 1 767 ![]() |
Bonjour fred1599,
Citation:
Code :
from cpython cimport bool, list, dict, tuple, long as llong
Pour le 2e: Code :
from cython import cclass, ccall, cfunc, returns as creturns, locals as clocals - type d'objet: cclass: classe; cfunc: fonction appelable uniquement à partir du C; ccall: fonction appelable à partir du C et de Python. - creturns: déclare le type d'objet en retour. - clocals: déclare le type des arguments et des variables internes des fonctions. Citation:
J'ai d'ailleurs pris la précaution de vérifier que cette solution n'était pas plus longue à l'exécution que la solution qui oblige à ré-écrire le code. Il n'y a que quelques petits problèmes qui restent à résoudre, comme par exemple les initialisations: quand on déclare que x est un "double" (type C), il faut l'initialiser par x=1.0 et non x=1 qui génère une erreur. Mais c'est seulement un bon réflexe à prendre... Ce n'est cependant pas une "assurance tout risque", car certains codes en pur Python ne se traduisent pas en Cython, ou ne donnent pas la meilleure performance souhaitée: dans ce cas, mais dans ce cas seulement, il faut repenser le code pour l'adapter à Cython.
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos... Mes recettes python: http://www.jpvweb.com |
||
|
|
00
|
|
|
#25 |
|
Membre Expert
![]() Fred Enseignant Inscription : juillet 2006 Messages : 1 304 ![]() |
Ok, merci Tyrtamos, je vais analyser tes codes, relire la doc, dommage que je sois parti 3 jours, ça va me mettre en haleine pendant tout ce temps. Tu auras sûrement des retours d'ici vendredi ou samedi.
Aussi je souhaiterais chercher une manière plus ressemblante à celle que j'utilisais avec du C et très simple. Je suis en train de voir du côté de ctypes qui semble bien plus simple pour appeler la lib, je vais chercher.
__________________
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein) |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com