Journal Pythran - 0.8.7

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
20
17
sept.
2018

Demat'i-nal,

La mouture 0.8.7, tendrement nommée skol-loarn de Pythran, est de sortie. Rappelons que Pythran est un compilateur dédié au calcul scientifique pour Python. Il s'installe avec pip ou conda et nécessite juste un compilateur C++ qui parle le dialecte c++11 sur l'hôte. Car oui, Pythran fait partie de cette ignoble lignée des transpileurs…

Quelques liens utiles :

Journal Pythran 0.9.2 - koailh

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
19
6
mai
2019

Demat' iNal,

C'est avec délectation que je t'annonce la sortie de la révision 0.9.2 du compilateur pythran. Pythran est un compilateur pour les noyaux de calcul écrits en Python, compatible avec un (large) sous-ensemble de Python. Il comprend les annotations OpenMP et est capable de générer des instructions vectorielles grâce à xsimd.

La dernière sortie date de plus de 4 mois, donc pas mal de nouveautés sont au rendez vous. La liste complète est consultable en ligne.

(…)

Journal Pythran 0.2 : Python peut-il être aussi rapide que du C ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
19
17
fév.
2013

Salut petit journal, toi qui est fan de Pythran :-)
Mais oui, tu sais, ce traducteur Python -> C++ pour le prototypage d'algorithmes dans cette merveille d'expressivité et de concision qu'est le Python ! Sinon, je te renvoie à http://pythonhosted.org/pythran/ où tu trouveras un peu de matière à te mettre sous la dent.

Tu as sûrement déjà lu ces deux posts un peu vieux mais assez cocasses :

mais sais tu que Pythran commence à générer du code qui (…)

Journal Changelog, pour quoi, pour quoi ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
18
5
fév.
2023

Demat'iNal,

À quelques jours / semaines d'intervalles, j'ai eu besoin d'intéragir avec la notion de Changelog, ou plutôt de release note, mais je vais abusivement utiliser le premier terme pour désigner le second.

  1. Un utilisateur de la bibliothèque de types vectoriels xsimd nous a demandé d'en fournir un (ce que j'ai fait assez diligeamment)

  2. Lors d'une chouette présentation au FOSDEM hier, dans la devroom LLVM, quand j'ai appris que le Changelog n'était pas utilisé par les personnes (…)

Journal De retour du FOSDEM 2020

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
17
4
fév.
2020

Demat’iNal,

Le week‑end dernier avait lieu le FOSDEM, événement annuel, gratuit, pendant lequel différentes communautés se retrouvent autour d’un thème — les devrooms ou autour de sujets fédérateurs.

Il y a une ambiance assez spéciale pour une conf, vu que c’est éclaté sur le campus de l’ULB, et que vu la gratuité de l’évènement et son rayonnement, il y a beaucoup de monde. Vraiment beaucoup, à tel point que la stratégie gagnante me semble être de choisir (…)

Journal C++, surcharge d'opérateur, ordre d'évaluation

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
17
21
fév.
2020

Demat'iNal,

Un collègue a récemment piqué mon intérêt (ouille) avec ce petit bout de code :

#include <map>
#include <iostream>

int main() {
    std::map<int, int> m;
    m[1] = m.size();
    std::cout << m[1] << std::endl;
    return 0;
}

Qui, compilé par deux version différentes de GCC (9.2 et 5.1) donne deux résultats différents (voir https://godbolt.org/z/4_xVPV).

Qu'en déduire (…)

Journal Analyse de plage de valeurs dans Pythran

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
16
11
mai
2020

Demat'iNal,

Il y a quelques semaines, Pythran a gagné une analyse de plage de valeurs un peu plus solide que la précédente implémentation. Rien qui ne révolutionne la recherche, mais l'occasion pour moi d'explorer le sujet avec vous ici.

L'histoire commence en octobre 2018 avec l' issue #1029, alors que j'essayais de convertir des bouts de code de scikit-image à Pythran.

La fonction _integ

La fonction ci-dessous est extraite du fichier _hessian_det_appx.pyx, écrite en cython

# cython: wraparound=False
(…)

Journal Pythran revient de SciPy2013

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
16
15
juil.
2013

Salut les réptiles,

Pythran est un compilateur Python vers C++ ciblé pour le calcul scientifique, dont je vous ai déjà parlé à de nombreuses reprises.

À la fin de l'épisode précedent, je partais pour les US et présenter mon bébé au monde entier. Voici donc mon carnet de notes virtuels.

Déjà il faut répéter ses présentations, sinon ça donne ça, où l'on voit que je ferais bien d'apprendre à me tenir droit…

Ensuite j'ai eu quelques (…)

Journal Switch, chaîne constante et c++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
16
31
août
2016

Salut 'Nal (ah non, ça marche pas)

Lors d'une discussion avec un collègue, ça chambrait 1 gentillement sur l'absence de switch sur des chaînes constantes en C++. Ça a déclenché quelques recherches de mon côté, et voilà ce que j'ai pu trouver (les codes qui suivent ne sont que le reflet de ce que j'ai pu lire en ligne, rien de nouveau sous le soleil brestois)

Approche LLVM : StringSwitch

Source : http://llvm.org/docs/doxygen/html/StringSwitch_8h_source.html

L'idée est de simuler une cascade de

(…)

Journal Obfusque ton code avec C++

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
16
mar.
2018

Cher Nuit-Nal,

toi qui aime le C++11, tu as peut-être déjà essayé de concaténer des chaînes constantes, suivant ce scénario là :

struct Some {
    static constexpr char Name[] = "Mr Popo";
};

char const *escape() {
    auto dogs = cats("hey, ",  Some::Name, " what's up?");
    return dogs;
}

int main() {
  char const* concat = escape();
  puts(concat);

  return 0;
}

(…)

Journal Quizz Python : esp[èa]ce de nom

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
8
mar.
2023

Demat' iNal

Regarde bien dans les yeux le bout de code suivant

def foo():
  x = 1
  class bar:
    x = x + 1
  return bar
foo()

exécute le mentalement. Rien d'exceptionnel ?
Et pourtant si,

NameError: name 'x' is not defined

Maintenant essayons avec :

def foo():
  x = 1
  class bar:
    y = x + 1
  return bar
foo()

Et là… non, rien.

Intuitivement, j'imagine que le x = x + 1 (…)

Journal Pythran 0.9.3 a une Fedora sur la tête

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
15
21
août
2019

Demat'iNal,

Te remémores-tu de Pythran, ce compilateur pour le Python scientifique caractérisé par la compatibilité de ces entrées avec Python et l'effort mis sur l'optimisation de codes de haut niveau écrits en Numpy ? Si oui, tu peux lire la suite. Si non, une petite plongée dans l'histoire peut être bénéfique :-)

La version 0.9.3 a été publiée hier, et est disponible sur pypi, conda (à travers conda-forge) et à travers un tag git.

Mais (…)

Journal pythran prépare sa mue

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
14
30
août
2012

SSS Ss SsSS SSs s [un serpent qui vous salue en morse, c'est pas banal!]

Comme tout animal à sang froid, Pythran a profité de l'été pour s'allonger sur un rocher et emmagasiner de la chaleur. Quand un humain s'adonne à cette activité, ce n'est pas très progressif, mais là ça a plutôt bien marché.

Petit résumé.

Tests Unitaires

Pythran repose sur unittest pour les tests unitaires. Un test consiste en
1. Une fonction écrite en python ;
2. des paramètres (…)

Journal Formation à Lyon : Compilateurs pour le Python Scientifique

Posté par  (site web personnel) . Licence CC By‑SA.
14
25
oct.
2017

Cher journal,

Du 7 au 9 novembre (2017 hein) aura lieu à Lyon une formation ouverte à tous sur le Python scientifique, ou plus exactement sur l'accélération de code scientifiques écrits en Python à travers trois compilateurs : Cython, Numba et Pythran. Trois compilos, trois approches, vive la diversité ! Et avec en bonus un petit aperçu sur l'évaluation de performances dans le cas de codes hybrides Python/natif.

Il y a certes un biais tout franchouillard à présenter Pythran (…)

Journal Conversion entre pointeurs de fonctions incompatibles

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
14
7
nov.
2018

Posons nous dans le cas suivant (oui ça commence direct)

int strange_apply(int (*f)(int) {

    return reinterpret_cast<(int(*)(int, int)>(f)(1, 2);

}

Ce code compile avec un warning depuis le dernier gcc, et c'est bien car c'est en fait un undefined behavior (cast entre types de fonctions incompatibles dans le cas présent).

Et pourtant on voit pas mal de code (…)