python timings

April 14th, 2013

On the one hand, we measure database query latency in milliseconds. On the other hand, a read from L1 cache costs less than a nanosecond. That got me thinking that there is a pretty big spectrum in between the two. I wonder how much time typical language constructs cost. Just as a reminder, here is the typical list of important timings:

0.5 ns        read from L1 cache
            1   ns        execute cpu instruction
            7   ns        read from L2 cache
          100   ns        read from memory
       20,000   ns        transmit over local network
    8,000,000   ns        read from disk
  150,000,000   ns        transmit over the internet Europe -> US
1,000,000,000   ns        one second

There happens to be a really easy way to do a quick and dirty measurement using ipython, with its built-in timing feature. It takes an expression that it will execute a number of times, depending on how long it takes, with an upper bound in seconds. So for really trivial expressions you get a large number of repetitions:

In [66]: %timeit 1+2
10000000 loops, best of 3: 20.7 ns per loop

The catch is that timeit expects an expression, so the simplest way to get around that is to make every test a function call, and in there we can run arbitrary expressions and statements alike. The baseline will then be a function with an empty body.

Here are the results from my cpython 2.7.3:

5 ns        assignment
            4 ns        integer_addition
           10 ns        string_concat
            5 ns        string_interpolate
           35 ns        dict_lookup
           77 ns        list_comprehension

           22 ns        branch
        1,095 ns        try_catch

       86,895 ns        create_class        
           97 ns        instantiate_class
          135 ns        call_method
          105 ns        call_function

          217 ns        get_current_time
        1,745 ns        get_current_date

Clearly this leaves a lot to be desired from a methodological standpoint. The reference list of latencies is not scaled to my laptop in particular, plus we are adding the overhead of a function call to every measurement (and then trying to subtract it out), but at least it's constant across all measurements. At best these numbers are a rough indication of how much things cost, but that's good enough for our purpose.

Finally, here is the code:

def call_function():  # 105ns
    pass

def create_class():  # 87us
    class C(object):
        pass

class D(object):
    def meth(self):
        pass

def instantiate_class():  # 202ns
    D()

d = D()
def call_method():  # 240ns
    d.meth()

def assignment():  # 110ns
    a = 1

def branch():  # 127ns
    if True:
        pass

def try_catch():  # 1.2us
    try:
        raise Exception
    except:
        pass


def integer_addition():  # 109ns
    1 + 2

def string_concat():  # 115ns
    "a" + "b"

def string_interpolate():  # 110ns
    "a%s" % "b"

d = {'a': 1}
def dict_lookup():  # 140ns
    d['a']

l = []
def list_comprehension():  # 182ns
    [x for x in l]

import time
def get_current_time():  # 322ns
    time.time()

from datetime import datetime
def get_current_date():  # 1.85us
    datetime.now()

l'étranger

February 24th, 2013

J'ai eu une expérience bien étrange. J'allais au supermarché, j'étais à peine sorti du bâtiment, lorsqu'un homme qui avait arrêté sa voiture dans la rue m'interpella. "Excusez moi, est-ce que vous parlez italien ?". Il n'y avait personne d'autre dans la rue. Bon, j'étais trop curieux pour faire semblant que non. Je lui ai dit oui et je crois qu'il était si étonné par ma réponse que moi par sa demande. Il m'a raconté qu'il venait de travailler toute la semaine dans une exposition des marchandises, à quelques rues de ma maison effectivement. Il représentait la société Emporio Armani et il était là pour présenter des nouvelles montres de cette marque. Maintenant, il devait rentrer en Italie, mais pas forcément avec ses marchandises. Il m'a dit que c'étaient des échantillons et qu'on ne pouvait pas les vendre régulièrement. Alors, comme j'étais si sympa et que je parlais si bien l'italien en n'étant même pas italien (je lui ai dit ça), il aurait été bien heureux de m'offrir ses montres. Il m'en a montrées plusieurs, elles n'étaient pas mal effectivement. Il m'a dit "celle-ci vaut 700 euros, celle-là 400 euros". Il m'a dit qu'il voulait acheter des cadeaux à l'aéroport et si je voulais lui proposer 400 pour une, il m'aurait données toutes, c'est à dire six ou bien douze comme il y en avait deux sachets pleins.

J'ai pu lui dire que 400 cent euros pour une montre c'est du délire et qu'à la limite j'ai pu lui offrir 4 euro, mais je pensais qu'il se serait senti insulté et comme il était très sympa je n'ai rien dit. En revanche j'ai dit que je ne porte pas de montre depuis plus que 10 ans, donc ça ne m'intéresse pas du tout. Comme ça, on s'est dit adieux et il est parti dans sa voiture à matricule française.

Plus tard, j'ai réfléchi. Est-ce que c'était une arnaque ? Si ces montres valaient vraiment ce qu'il m'a dit, toutes ces marchandises dans sa voiture ont dû valoir des milliers d'euros. Alors pourquoi les offrir à un étranger ? Pourquoi ne pas les vendre lui même sur internet s'il n'y avait pas d'autres moyens ? Ça n'a aucun sens. Dans des circonstances semblables, je dis toujours non à quoi que ce soit parce que je n'arrive pas à faire les calculs sur le coup.

les mots qui n'existent pas

February 23rd, 2013

Tous les jours il y a des inventions dans le monde. Un gars dans un sous-sol qui invente un truc ou un machin pour combler quelques besoins obscurs de sa vie. Et il faut alors en parler. On n'aime jamais autant parler qu'à propos des nouveautées, tout le monde les adore. Ce qui est nouveau nous paraît toujours de la première importance.

Cela dit, il nous faut des mots, on ne peut rien dire sans. Dans certains pays on ne veut pas traduire les mots en les adaptant aux sons de la propre langue, en "traduisant la prononciation". On aime inventer des nouveaux mots pour des concepts nouveaux à partir des racines indigènes. C'est comme ça que le mot courriel a été conçu.

En français, dans le champ informatique avant tout, on est bien muni des mots qui ont l'air indigène. J'allume mon ordinateur, j'utilise le navigateur pour chercher le pilote qui correspond à ma carte d'affichage, je l'installe, tout marche à merveille (mais bien sûr) et enfin je sauvegarde le disque dur dans une clé USB pour ne pas perdre cette configuration précieuse.

En Italie on est quelque peu plus complaisant. J'allume il mio computer et je dois d'abord taper la mia password. Avec il mouse je démarre il browser et je vais envoyer un email. Ensuite je regarde une émission internet en streaming. Tout de même, la plupart des mots informatiques ont été réinventés en italien.

Mais ce n'est pas seulement en informatique qu'on se prête à ce jeu. Même dans la politique il y a des concepts qui ont échappés au contrôle linguistique. En France il n'y pas de leadership. En Italie il n'y a pas de privacy malgré le authority (les agences gouvernementales de la protection de la vie privée).

De toute façon, les nations veulent en général préserver une identité nationale et une langue grosso modo pure. Mais ce n'est pas forcément le cas. Aux Pays Bas il y a une nonchalance jamais vue à cet égard. Il y a des mots natifs pour beaucoup de concepts informatiques, mais on utilise plutôt des anglicismes parce que c'est plus simple. Surtout quand on a affaire à des gens qui communiquent avec nous en anglais et qu'on ne veut pas traduire tous les mots dans une autre langue tout simplement pour en parler entre nous. Comme ça: de bug is gefixed maar de status is nog unknown, ou bien: le bug a été fixedé mais le status est encore unknown.

je vous laisse

February 14th, 2013

Mes frères, mes sœurs,

Je vous laisse. Ce n'est pas le boulot le plus beau du monde, ce n'est qu'un boulot quelqonque. J'en ai marre de tous les imbéciles dans cet endroit, c'est pire que l'agence de location de voitures où je travaillais pendant ma jeunesse. Il y a toujours quelqu'un qui a besoin de quelque chose et le téléphone ne s'arrête jamais de sonner. Avec une sonnerie débile si aimé par mon prédécesseur qu'on peut pas le changer. Oui, tout est comme ça dans ce poste. Plein de traditions, pas de nouveauté, rien change. Même les vêtements qu'on est obligé de porter. Au début j'ai pensé que ça pourrait étre drôle, quoi. Il n'en est rien. Ce n'est pas drôle si personne ne rit. On peut pas rire dans ce poste, il n'y a que des prétentieux. Parfois je pense que c'est ça notre profession, la prétention. Bon, ça va. Je me casse.

Votre Ratz (jusqu'il y a quelques instants, maintenant c'est Joseph R)

la luxure

February 4th, 2013

- Tu aimes la luxure toi ?

- C'est quoi donc ?

- Bon, tu sais quand on a plein d'objets coûteux autour de soi?

- Ah oui c'est génial ça ! Superbe !

- C'est quoi la superbe ?

- Non, je veux dire c'est superbe quand ça arrive.

- Ah, d'accord.