Nouvelles du Libre

Aperi’tic logiciel libre en milieu professionnel - jeudi 25 septembre 2014 à Gap

Linuxfr - ven, 19/09/2014 - 10:12

Un Aperi’tic consacré au logiciel libre en milieu professionnel, jeudi 25 septembre 2014 de 10h à 12h à la CCI 05, 16 rue Carnot à Gap.

Né au MIT en 1983, le logiciel libre est aujourd'hui sorti des laboratoires de recherche pour s'établir très largement dans tous les domaines de l'informatique. On trouve des logiciels libres dans les « Box » qui gèrent nos connexions Internet, sur nos ordinateurs personnels et nos postes de travail mais aussi dans nos téléphones et autres objets technologiques qui peuplent notre quotidien. L'histoire du logiciel libre est intimement liée à celle du réseau Internet. Saviez-vous que la majorité des serveurs web fonctionnent avec des logiciels libres ?

Comment fonctionnent les licences de ces logiciels que chacun peut utiliser, copier, étudier et modifier librement en toute légalité ? Quels sont les modèles économiques du logiciel libre ? Quels sont les enjeux dans le cadre d'une utilisation professionnelle ?

D'un point de vue pratique, quels sont les logiciels libres utilisables ? Pour la bureautique ? Pour l'internet et le multimédia ? Pour le travail collaboratif et le partage de données en réseau ? Quel est l'état de l'art en matière de logiciels libres pour la gestion d'entreprise ? Comment s'y prendre pour tirer le meilleur parti de ces solutions ? Telles sont les questions auxquelles répondra Jean-Christophe Becquet, directeur d'APITUX et vice-président de l'April, expert du logiciel libre en milieu professionnel depuis 1997.

Télécharger ce contenu au format Epub

Lire les commentaires

Catégories: Nouvelles du Libre

Formation, Certification et Technologie Libre

Linuxfr - ven, 19/09/2014 - 08:52

L'Institut de Technologie Libre (ITL) organise sur Perpignan et (bientôt) sur Montpellier une formation menant au Titre Professionnel Concepteur(trice) Développeur(se) Informatique de niveau 2 délivré par le Ministère du Travail, de l'Emploi, de la Formation Professionnelle et du Dialogue social.

L'ITL est agréé par la Direction Régionale des Entreprises, de la concurrence, de la Consommation du Travail et de l'Emploi (Languedoc-Roussillon), pour organiser des sessions de validation pour ce Titre Professionnel.

Dans le cadre de cette formation, l'ITL utilise exclusivement des logiciels libres (e.g. PostgreSQL) et des standards ouverts (e.g. HTML5).

Le programme de formation couvre les trois Certificats de Compétences Professionnelles composant le Titre Professionnel :

  • développer des composants d'interface ;
  • développer la persistance des données ;
  • développer une application n-tiers.

La prochaine session de formation démarre le 21/01/2015 et finit le 19/07/2015, tandis que celle de validation démarre le 27/07/2015 pour une durée de cinq jours.

Comme l'ITL accueille des candidats non informaticiens (en reconversion professionnelle), une préparation (facultative) est organisée. La prochaine session de préparation démarre le 21/10/2014 et finit le 20/01/2015.

L'ITL organise également une session de validation blanche (facultative), laquelle démarre le 20/07/2015 et dure cinq jours. De plus amples informations, un formulaire de demande d'information et un formulaire de candidature figurent sur le site de l'ITL.

Télécharger ce contenu au format Epub

Lire les commentaires

Catégories: Nouvelles du Libre

Forum PHP 2014, demandez le programme

Toolinux - jeu, 18/09/2014 - 23:40

Le programme du Forum PHP 2014 les 23 et 24 octobre au Beffroi de Montrouge est connu, avec les retours d'expérience de l'Express, lemonde.fr, MaisonsduMonde.com, CCM Benchmark, Bla Bla Car, Arte et VDM.

- Evénements et séminaires
Catégories: Nouvelles du Libre

Journée de conférences dédiées à PostgreSQL et PostGIS le 25 septembre

Toolinux - jeu, 18/09/2014 - 23:12

Pour comprendre de quelle manière PostgreSQL s'impose désormais non seulement comme une alternative à Oracle mais aussi bientôt aux bases de type MongoDB, Dalibo et Oslandia organisent à Paris le 25 septembre 2014 une journée de conférences dédiée à PostgreSQL et PostGIS.

- Evénements et séminaires
Catégories: Nouvelles du Libre

Citrix acquiert Virtual pour sécuriser son offre de virtualisation

Toolinux - jeu, 18/09/2014 - 23:10

Citrix annonce annonce l'acquisition de la start-up Virtual, qui propose actuellement la seule plateforme cloud sur le marché permettant la virtualisation au sein d'environnements iOS et Android.

- Services
Catégories: Nouvelles du Libre

Acronis acquiert nScaled

Toolinux - jeu, 18/09/2014 - 23:09

Acronis a annoncé aujourd'hui l'acquisition de nScaled, fournisseur de solution de reprise d'activité après sinistre en tant que service, basé à San Francisco.

- Logiciels
Catégories: Nouvelles du Libre

72 % des entreprises ne font pas confiance au cloud ?

Toolinux - jeu, 18/09/2014 - 23:05

L'impact économique d'une fuite de données a presque triplé sous l'effet de l'utilisation accrue des services Cloud, un phénomène désigné comme « l'effet multiplicateur du Cloud ».

- Revue de presse
Catégories: Nouvelles du Libre

Orange Madagascar a adopté Talend

Toolinux - jeu, 18/09/2014 - 23:00

Orange Madagascar a retenu Talend Enterprise Data Integration pour industrialiser ses traitements d'intégration de données et analyser ses Big Data.

- Services
Catégories: Nouvelles du Libre

Guide de l'open source, édition 2014

Toolinux - jeu, 18/09/2014 - 23:00

Cette nouvelle édition du Guide recense plus de 350 solutions open source professionnelles, dans près de 50 domaines d'applications pour l'entreprise.

- Revue de presse
Catégories: Nouvelles du Libre

Sortie de Odoo 8 (anciennement OpenERP)

Linuxfr - jeu, 18/09/2014 - 21:11

Odoo, la suite libre d'applications de gestion, vient de sortir sa version 8. Dans les nouvelles fonctionnalités, on retrouve un point de vente fonctionnant aussi sur iPad et Android, un outil de création de site internet, une boutique en ligne, un moteur de rapports statistiques, un système de blogue (clone open source de Medium).

Quelques applications marketing ont également été publiées : envois de mails, une gestion d'événements, un outil de création de sondages et un clone de Stackoverflow (Q&A)

Le cadriciel Python a été totalement réécrit permettant d'être plus efficace pour créer des modules personnalisés.

Toutes les applications de gestion d'Odoo ont été complétées d'une interface frontend (site web). Quelques exemples de fonctionnalités qui sont apparues grâce à la partie web :

  • ventes : une boutique en ligne ;
  • événement : un site web de publication d'événements et vente de tickets ;
  • recrutements : publication des offres d'emploi et formulaires pour postuler ;
  • devis : version en ligne des devis construite sur base de modèles ;
  • composition graphique d'e-mails pour l'envoi massif ;
  • gestion de la relation client : formulaires de contact.

Cette version est le résultat de 18 mois de recherche et développement avec une collaboration efficace entre l'éditeur et la communauté. Une bonne partie des modules communautaires ont d'ailleurs déjà été portés à la nouvelle API.

Télécharger ce contenu au format Epub

Lire les commentaires

Catégories: Nouvelles du Libre

Numba 0.14

Linuxfr - jeu, 18/09/2014 - 06:47

Numba, l'optimiseur Python spécialisé dans le calcul numérique, est sorti en version 0.14. Numba est un compilateur juste-à-temps (JIT) pour Python, basé sur LLVM, permettant d'optimiser du code de calcul numérique, notamment basé sur Numpy. Il est compatible avec CPython 2.6, 2.7, 3.3 et 3.4. Des paquets binaires sont disponibles via Anaconda, la distribution de paquets binaires dédiée au calcul scientifique maintenue par Continuum Analytics, l'entreprise qui développe Numba.

Sommaire Qu'est-ce que Numba ?

Numba est un compilateur juste à temps pour CPython spécialisé dans l'optimisation de code scientifique.

… CPython ?

CPython est l'implémentation par défaut (ou "de référence", en langage politiquement correct) de Python. Les autres implémentations s'appellent PyPy, Jython, etc.

… Spécialisé ?

Numba ne prétend pas être capable d'optimiser tous les types de code Python, ni même toutes les constructions du langage (même si cela n'est pas exclu comme objectif à long terme). Numba est capable d'optimiser les calculs numériques et scientifiques impliquant des entiers, des flottants, des complexes ; il est capable de reconnaître certaines types de données bien connus, comme les tableaux Numpy.

La liste des fonctionnalités optimisables grandit évidemment de version en version, par exemple la version 0.14 supporte désormais les types numpy.datetime64 et numpy.timedelta64, qui permettent de faire des calculs sur des séries temporelles.

… Juste à temps ?

Numba fonctionne lors de l'exécution de votre code Python. Il suffit d'apposer le décorateur "@numba.jit" à une fonction pour la faire optimiser par Numba (certains aiment prier pour qu'il arrive à l'optimiser). Il n'y a pas de phase de compilation séparée, ni de ligne de commande à lancer.

Plateformes supportées

Numba utilise LLVM, ce qui permet une portabilité relativement aisée. Actuellement, les systèmes sous Linux, OS X et Windows sont supportés. Côté matériel, x86, x86-64 sont supportés et il y a également un backend CUDA (avec des limitations).

Un exemple

Partons de notre ami l'ensemble de Mandelbrot. Pour cela, posons la fonction suivante dans un fichier nommé mandel.py :

import numpy def mandelbrot(width, height): x_min, x_max = -2.0, 1.0 y_min, y_max = -1.0, 1.0 arr = numpy.zeros((height, width), dtype=int) xs = numpy.linspace(x_min, x_max, num=width) ys = numpy.linspace(y_min, y_max, num=height) max_iters = 20 for idx_x, x in enumerate(xs): for idx_y, y in enumerate(ys): c = complex(x, y) z = 0.0j for i in range(max_iters): z = z * z + c if z.real * z.real + z.imag * z.imag >= 4: # Hors de l'ensemble break else: # Dans l'ensemble arr[idx_y, idx_x] = 1 return arr

Cette fonction renvoie un tableau d'entiers Numpy indiquant si un point fait partie de l'ensemble de Mandelbrot (1) ou non (0).

Maintenant, lançons un Python depuis le même répertoire :

>>> import mandel >>> print(mandel.mandelbrot(20, 15)) [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0] [0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

Ouf, ça ressemble :-) Maintenant compilons cette même fonction avec Numba :

>>> from numba import jit >>> opt = jit(mandel.mandelbrot) >>> print(opt(20, 15)) [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0] [0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

Et lançons un benchmark d'une scientificité rigoureuse sur un tableau de 200x200 :

>>> import timeit >>> timeit.timeit("mandel.mandelbrot(200, 200)", setup="import mandel", number=1) 0.20483311700081686 >>> timeit.timeit("opt(200, 200)", setup="from __main__ import opt", number=1) 0.003343598000355996

Sur ce cas d'usage d'une grande importance, Numba est ainsi 60 fois plus rapide que l'interpréteur CPython !

Principe de fonctionnement

Numba est un optimiseur fonction par fonction. Il part de la fonction que vous décorez avec numba.jit et lance une inférence de types pour essayer d'assigner un type précis à chaque variable et valeur intermédiaire dans la fonction. Pour cela, il utilise des règles dédiées à chaque opérateur, fonction standard, etc.

Pour définir les types de départ du processus d'inférence, il y a en réalité deux possibilités :

  • Dans l'utilisation de base de numba.jit, l'utilisateur ne passe pas de paramètres : c'est alors lors de l'appel de la fonction décorée que les types des arguments sont utilisés pour lancer le processus d'inférence (la compilation est ici paresseuse).
  • Dans une utilisation avancée, l'utilisateur peut décrire explicitement les types à l'entrée de la fonction (cela lui permet, par exemple, de choisir des flottants simple précision plutôt que double précision) ; dans ce cas, la compilation a lieu immédiatement.

L'inférence de type est l'étage fondamental qui permet ensuite de produire du code travaillant sur des types bas niveau, plutôt qu'au niveau du modèle objet de Python, qui est beaucoup plus difficile à optimiser. Bien entendu, la chaîne de traitement (pipeline) est constituée de multiples étages :

  1. décodage du bytecode CPython
  2. construction d'un graphe de flot de contrôle (CFG)
  3. génération d'une représentation intermédiaire (IR) spécifique à Numba
  4. inférence de types, produisant une détermination du type de chaque variable manipulée par la fonction
  5. génération de code LLVM correspondant à l'exécution de l'IR sur les types déterminés précédemment
  6. appel à LLVM pour la génération du code machine, et encapsulation du tout dans un objet dédié (wrapper) qui lance le code machine quand il est appelé

Grâce à LLVM, Numba n'a pas à se charger des optimisations bas niveau (propagation de constantes, vectorisation SIMD, etc.) et peut se concentrer sur les traitements spécifiques au langage Python.

Pour une présentation plus détaillée, il convient de lire la documentation (en anglais) : architecture de Numba.

Limitations

À l'heure actuelle, plutôt que de se lancer dans une liste interminable de limitations, il est plus raisonnable de lister ce qui est supporté.

Types supportés
  • les scalaires numériques, que ce soit les types Python (int, float, complex…) ou NumPy (numpy.complex64, etc.)
  • les booléens
  • les dates et intervalles de temps NumPy (numpy.datetime64 et numpy.timedelta64)—mais pas les types standard datetime.datetime et datetime.timedelta
  • les tuples des types ci-dessus
  • les tableaux NumPy des types ci-dessus
Constructions supportées

Numba supporte la plupart des constructions syntaxiques du langage, sauf le traitement des exceptions (try... except, etc.), les gestionnaires de contexte (with), les générateurs (yield) et quelques autres détails.

Fonctions supportées

Numba supporte une grande partie des opérateurs numériques, des fonctions standard (notamment le module math), et certaines fonctions de NumPy. Il est également capable d'optimiser les appels à des fonctions externes via ctypes ou cffi.

Différences sémantiques

Le caractère volontaire (opt-in) de la compilation permet à Numba de présenter des différences sémantiques par rapport au langage Python. Je ne les listerai pas ici, mais une différence évidente a trait aux entiers : les entiers de Python sont de largeur arbitraire, ceux de Numba sont de largeur fixe (déterminée à l'inférence de types, ou forcée par l'utilisateur). Un dépassement lors d'opérations mathématiques entraîne simplement une troncation.

Notons qu'une grande partie de ces différences reflète en réalité le comportement de NumPy (dont les entiers sont aussi à largeur fixe, par exemple).

Numba et l'écosystème Python

Le fait que Numba fonctionne au-dessus de CPython lui permet de s'intégrer facilement à l'écosystème existant. Comme on l'aura compris, l'intégration avec NumPy est également une fonctionnalité de premier plan. D'une manière générale, la stratégie de Continuum (cf. ci-dessous) est de maximiser les possibilités d'interaction entre les multiples briques de calcul scientifique disponibles pour Python.

Statut du projet

Numba est supporté par Continuum Analytics, qui paye à cet effet plusieurs développeurs (dont l'auteur de cette dépêche). Le développement est en partie financé par des clients et des fonds de recherche américains. Nous recevons également des contributions extérieures. Bien entendu, le projet est libre (licence de type MIT).

Contribuer

Numba est un projet jeune auquel manquent de nombreuses fonctionnalités ; il y a donc beaucoup d'opportunités de contribution. Le processus est détaillé dans la documentation. Les compétences nécessaires dépendent de ce à quoi vous vous intéressez :-) La majeure partie du code de Numba est en Python ; il y a quelques parties en C, mais on les évite assez facilement. Nul besoin d'être en expert en NumPy ou en LLVM pour commencer (je ne les connaissais presque pas).

Au débotté, voici quelques directions possibles de contribution, par ordre de difficulté :

  • améliorer la documentation
  • améliorer le retour utilisateur, qui est actuellement assez fruste (messages d'erreur, informations sur la fonction compilée)
  • corriger des bugs (!)
  • ajouter le support de nouvelles fonctions (de la bibliothèque standard ou de NumPy)
  • ajouter le support de nouveaux types
  • ajouter le support de nouvelles constructions (comme la gestion des exceptions ou les générateurs)
Télécharger ce contenu au format Epub

Lire les commentaires

Catégories: Nouvelles du Libre

Numba 1.4

Linuxfr - jeu, 18/09/2014 - 06:47

Numba, l'optimiseur Python spécialisé dans le calcul numérique, est sorti en version 1.4. Numba est un compilateur juste-à-temps (JIT) pour Python, basé sur LLVM, permettant d'optimiser du code de calcul numérique, notamment basé sur Numpy. Il est compatible avec CPython 2.6, 2.7, 3.3 et 3.4. Des paquets binaires sont disponibles via Anaconda, la distribution de paquets binaires dédiée au calcul scientifique maintenue par Continuum Analytics, l'entreprise qui développe Numba.

Sommaire Qu'est-ce que Numba ?

Numba est un compilateur juste à temps pour CPython spécialisé dans l'optimisation de code scientifique.

… CPython ?

CPython est l'implémentation par défaut (ou "de référence", en langage politiquement correct) de Python. Les autres implémentations s'appellent PyPy, Jython, etc.

… Spécialisé ?

Numba ne prétend pas être capable d'optimiser tous les types de code Python, ni même toutes les constructions du langage (même si cela n'est pas exclu comme objectif à long terme). Numba est capable d'optimiser les calculs numériques et scientifiques impliquant des entiers, des flottants, des complexes ; il est capable de reconnaître certaines types de données bien connus, comme les tableaux Numpy.

La liste des fonctionnalités optimisables grandit évidemment de version en version, par exemple la version 0.14 supporte désormais les types numpy.datetime64 et numpy.timedelta64, qui permettent de faire des calculs sur des séries temporelles.

… Juste à temps ?

Numba fonctionne lors de l'exécution de votre code Python. Il suffit d'apposer le décorateur "@numba.jit" à une fonction pour la faire optimiser par Numba (certains aiment prier pour qu'il arrive à l'optimiser). Il n'y a pas de phase de compilation séparée, ni de ligne de commande à lancer.

Plateformes supportées

Numba utilise LLVM, ce qui permet une portabilité relativement aisée. Actuellement, les systèmes sous Linux, OS X et Windows sont supportés. Côté matériel, x86, x86-64 sont supportés et il y a également un backend CUDA (avec des limitations).

Un exemple

Partons de notre ami l'ensemble de Mandelbrot. Pour cela, posons la fonction suivante dans un fichier nommé mandel.py :

import numpy def mandelbrot(width, height): x_min, x_max = -2.0, 1.0 y_min, y_max = -1.0, 1.0 arr = numpy.zeros((height, width), dtype=int) xs = numpy.linspace(x_min, x_max, num=width) ys = numpy.linspace(y_min, y_max, num=height) max_iters = 20 for idx_x, x in enumerate(xs): for idx_y, y in enumerate(ys): c = complex(x, y) z = 0.0j for i in range(max_iters): z = z * z + c if z.real * z.real + z.imag * z.imag >= 4: # Hors de l'ensemble break else: # Dans l'ensemble arr[idx_y, idx_x] = 1 return arr

Cette fonction renvoie un tableau d'entiers Numpy indiquant si un point fait partie de l'ensemble de Mandelbrot (1) ou non (0).

Maintenant, lançons un Python depuis le même répertoire :

>>> import mandel >>> print(mandel.mandelbrot(20, 15)) [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0] [0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

Ouf, ça ressemble :-) Maintenant compilons cette même fonction avec Numba :

>>> from numba import jit >>> opt = jit(mandel.mandelbrot) >>> print(opt(20, 15)) [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0] [0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

Et lançons un benchmark d'une scientificité rigoureuse sur un tableau de 200x200 :

>>> import timeit >>> timeit.timeit("mandel.mandelbrot(200, 200)", setup="import mandel", number=1) 0.20483311700081686 >>> timeit.timeit("opt(200, 200)", setup="from __main__ import opt", number=1) 0.003343598000355996

Sur ce cas d'usage d'une grande importance, Numba est ainsi 60 fois plus rapide que l'interpréteur CPython !

Principe de fonctionnement

Numba est un optimiseur fonction par fonction. Il part de la fonction que vous décorez avec numba.jit et lance une inférence de types pour essayer d'assigner un type précis à chaque variable et valeur intermédiaire dans la fonction. Pour cela, il utilise des règles dédiées à chaque opérateur, fonction standard, etc.

Pour définir les types de départ du processus d'inférence, il y a en réalité deux possibilités :

  • Dans l'utilisation de base de numba.jit, l'utilisateur ne passe pas de paramètres : c'est alors lors de l'appel de la fonction décorée que les types des arguments sont utilisés pour lancer le processus d'inférence (la compilation est ici paresseuse).
  • Dans une utilisation avancée, l'utilisateur peut décrire explicitement les types à l'entrée de la fonction (cela lui permet, par exemple, de choisir des flottants simple précision plutôt que double précision) ; dans ce cas, la compilation a lieu immédiatement.

L'inférence de type est l'étage fondamental qui permet ensuite de produire du code travaillant sur des types bas niveau, plutôt qu'au niveau du modèle objet de Python, qui est beaucoup plus difficile à optimiser. Bien entendu, la chaîne de traitement (pipeline) est constituée de multiples étages :

  1. décodage du bytecode CPython
  2. construction d'un graphe de flot de contrôle (CFG)
  3. génération d'une représentation intermédiaire (IR) spécifique à Numba
  4. inférence de types, produisant une détermination du type de chaque variable manipulée par la fonction
  5. génération de code LLVM correspondant à l'exécution de l'IR sur les types déterminés précédemment
  6. appel à LLVM pour la génération du code machine, et encapsulation du tout dans un objet dédié (wrapper) qui lance le code machine quand il est appelé

Grâce à LLVM, Numba n'a pas à se charger des optimisations bas niveau (propagation de constantes, vectorisation SIMD, etc.) et peut se concentrer sur les traitements spécifiques au langage Python.

Pour une présentation plus détaillée, il convient de lire la documentation (en anglais) : architecture de Numba.

Limitations

À l'heure actuelle, plutôt que de se lancer dans une liste interminable de limitations, il est plus raisonnable de lister ce qui est supporté.

Types supportés
  • les scalaires numériques, que ce soit les types Python (int, float, complex…) ou NumPy (numpy.complex64, etc.)
  • les booléens
  • les dates et intervalles de temps NumPy (numpy.datetime64 et numpy.timedelta64)—mais pas les types standard datetime.datetime et datetime.timedelta
  • les tuples des types ci-dessus
  • les tableaux NumPy des types ci-dessus
Constructions supportées

Numba supporte la plupart des constructions syntaxiques du langage, sauf le traitement des exceptions (try... except, etc.), les gestionnaires de contexte (with), les générateurs (yield) et quelques autres détails.

Fonctions supportées

Numba supporte une grande partie des opérateurs numériques, des fonctions standard (notamment le module math), et certaines fonctions de NumPy. Il est également capable d'optimiser les appels à des fonctions externes via ctypes ou cffi.

Différences sémantiques

Le caractère volontaire (opt-in) de la compilation permet à Numba de présenter des différences sémantiques par rapport au langage Python. Je ne les listerai pas ici, mais une différence évidente a trait aux entiers : les entiers de Python sont de largeur arbitraire, ceux de Numba sont de largeur fixe (déterminée à l'inférence de types, ou forcée par l'utilisateur). Un dépassement lors d'opérations mathématiques entraîne simplement une troncation.

Notons qu'une grande partie de ces différences reflète en réalité le comportement de NumPy (dont les entiers sont aussi à largeur fixe, par exemple).

Numba et l'écosystème Python

Le fait que Numba fonctionne au-dessus de CPython lui permet de s'intégrer facilement à l'écosystème existant. Comme on l'aura compris, l'intégration avec NumPy est également une fonctionnalité de premier plan. D'une manière générale, la stratégie de Continuum (cf. ci-dessous) est de maximiser les possibilités d'interaction entre les multiples briques de calcul scientifique disponibles pour Python.

Statut du projet

Numba est supporté par Continuum Analytics, qui paye à cet effet plusieurs développeurs (dont l'auteur de cette dépêche). Le développement est en partie financé par des clients et des fonds de recherche américains. Nous recevons également des contributions extérieures. Bien entendu, le projet est libre (licence de type MIT).

Contribuer

Numba est un projet jeune auquel manquent de nombreuses fonctionnalités ; il y a donc beaucoup d'opportunités de contribution. Le processus est détaillé dans la documentation. Les compétences nécessaires dépendent de ce à quoi vous vous intéressez :-) La majeure partie du code de Numba est en Python ; il y a quelques parties en C, mais on les évite assez facilement. Nul besoin d'être en expert en NumPy ou en LLVM pour commencer (je ne les connaissais presque pas).

Au débotté, voici quelques directions possibles de contribution, par ordre de difficulté :

  • améliorer la documentation
  • améliorer le retour utilisateur, qui est actuellement assez fruste (messages d'erreur, informations sur la fonction compilée)
  • corriger des bugs (!)
  • ajouter le support de nouvelles fonctions (de la bibliothèque standard ou de NumPy)
  • ajouter le support de nouveaux types
  • ajouter le support de nouvelles constructions (comme la gestion des exceptions ou les générateurs)
Télécharger ce contenu au format Epub

Lire les commentaires

Catégories: Nouvelles du Libre

QNAP lance l'application mobile Qget Android HD

Toolinux - mer, 17/09/2014 - 23:20

QNAP annonce la sortie de l'application mobile Qget Android HD, destinée aux utilisateurs de tablettes pour gérer des tâches de téléchargement sur leur Turbo NAS.

- Logiciels
Catégories: Nouvelles du Libre

iPrint 1.1 et Filr 1.1 chez Novell

Toolinux - mer, 17/09/2014 - 23:15

Les dernières versions de Novell iPrint et Novell Filr offrent aux entreprises des solutions d'impression et de partage de fichiers pour les principaux systèmes mobiles.

- Logiciels
Catégories: Nouvelles du Libre

BlendWebMix : deuxième édition fin octobre à Lyon

Toolinux - mer, 17/09/2014 - 23:11

La Cuisine Du Web, l'Université de Lyon et le Cluster Edit confirment la tenue de la deuxième édition de BlendWebMix, les 29 & 30 octobre prochains à la Cité Internationale de Lyon.

- Evénements et séminaires
Catégories: Nouvelles du Libre

Trend Micro Mobile Security disponible pour Android

Toolinux - mer, 17/09/2014 - 23:08

Google Play Services ne vous inspire pas 100% confiance ? Trend Micro Mobile Security pour Android permet d'identifier des maliciels mobiles, avant leur téléchargement.

- Logiciels
Catégories: Nouvelles du Libre

Oracle : créer, gérer et protéger des software-defined data centers

Toolinux - mer, 17/09/2014 - 23:04

VMware annonce la disponibilité de VMware NSX 6.1, VMware vCenter Site Recovery Manager 5.8, VMware vCloud Suite 5.8, VMware vRealize Operations Insight, VMware vRealize Suite 6, et VMware vSphere Data Protection Advanced 5.8.

- Logiciels
Catégories: Nouvelles du Libre

On connaît les 7 finalistes du Valeo Innovation Challenge

Toolinux - mer, 17/09/2014 - 23:00

Valeo a dévoilé aujourd'hui les 7 équipes sélectionnées par ses experts pour soutenir leur projet à Paris face au jury le jeudi 16 octobre 2014. En jeu : 100.000 euros.

- Evénements et séminaires
Catégories: Nouvelles du Libre

Apéro Python à Lyon le mercredi 24 septembre

Linuxfr - mer, 17/09/2014 - 19:25

Un apéro Python aura lieu à Lyon le mercredi 24 septembre à partir de 19h à l'Antre Autre (11 rue Terme, Lyon 1er). Un AFPyro est un moment convivial où les Pythonistes peuvent échanger librement autour d’un verre ou d’une assiette.

Une présentation sur les docstrings sera proposée. Les docstrings permettent de rédiger la documentation développeur directement dans le code.

Venez nombreux !

Télécharger ce contenu au format Epub

Lire les commentaires

Catégories: Nouvelles du Libre

Install Party GNU/Linux le samedi 27 septembre à Marseille

Linuxfr - mer, 17/09/2014 - 07:34

L'association CercLL (CercLL d'Entraide et Réseau Coopératif autour des Logiciels Libres) vous invite à une install party GNU/Linux, le samedi 27 septembre 2014 de 14h30 à 19h30 dans la salle de la Fabulerie au 4 rue de la bibliothèque 13001 Marseille. Au programme :

  • découverte de l'univers des logiciels libres ;
  • installation d'un environnement GNU/Linux, ainsi que le meilleur des logiciels libres ;
  • démonstration de jeux vidéo sous Linux.

L'entrée est libre, et l'évènement est accessible aux débutants-e-s. Une participation de 2 euros est demandée. Vous pourrez, si vous le souhaitez, adhérer à l'association pour la soutenir (cotisation de 20 euros pour une durée d'un an). Si vous avez d'autres questions en préalable à votre venue à l'évènement, une adresse mail de contact est disponible : cerll13@gmail.com.


Vous avez envie de découvrir un système d'exploitation libre, simple d'utilisation, stable, rapide et sécurisé ? Vous souhaitez une nouvelle façon d'utiliser votre ordinateur ? Vous vous sentez une affection naissante pour le gnou et le manchot, les mascottes de GNU/Linux ? Venez avec votre ordinateur ! Nous installerons ensemble une distribution GNU/Linux avec des logiciels libres et gratuits pour une utilisation quotidienne.

Télécharger ce contenu au format Epub

Lire les commentaires

Catégories: Nouvelles du Libre
Syndiquer le contenu