wiki:InsiaProgPerlTp6

Sommaire

TP6 - Module natif Perl (XS)

Le but de ce TP est d'illustrer le passage d'un extrait de programme Perl dont les performances ne sont pas optimales dans un code équivalent en C. On utilise le petit programme d'affichage de l'ensemble de Mandelbrot en mode console développé lors du premier TP.

1. Module Perl

Dans une première étape, nous allons séparer le programme Perl qui va être conservé tel quel (mandelterm.pl) de la partie qui va être portée en C. Cette dernière doit dans un premier temps être déportée vers un module. On se propose d'implémenter la fonction mandelbrot dans le module Mandelbrot.

Le programme mandelterm.pl est donc amputé de la définition de cette fonction et commence ainsi (voir source:/insia/perl/tp6/module/mandelterm.pl):

#!/usr/bin/perl -w

use Mandelbrot;
use strict;
...

Ecrivez le module Mandelbrot.pl correspondant.

2. Module natif

Dans un nouveau répertoire, reprenez à nouveau le mandelterm.pl utilisé au chapitre précédent. Créez alors la structure de fichiers nécessaires pour développer un module natif ainsi:

$ h2xs -A -n Mandelbrot

Dans le répertoire Mandelbrot, vous allez alors modifier le fichier .xs pour y ajouter d'une part le prototype de la fonction C mandelbrot(), d'autre part le code en C lui-même. Recherchez l'exemple qui convient dans man perlxstut pour y parvenir.

Inspiration pour le code C de mandelbrot(): source:/insia/c/projet-mandelbrot/mandelbrot.cgi.c

Note: N'oubliez pas d'exporter votre fonction mandelbrot en editant le fichier lib/Mandelbrot.pm.

Pour compiler votre module et le tester:

$ perl Makefile.PL
$ make
$ PERL5LIB="$PWD/blib/arch:$PWD/blib/lib" ../mandelterm.pl

Quelle est la différence de vitesse avec l'implémentation originale en Perl ? Qu'en concluez-vous ?

Last modified 13 years ago Last modified on Jun 4, 2007, 3:59:43 PM