\documentclass[11pt,twoside]{article}
\usepackage[T1]{fontenc}
\usepackage{times}
\usepackage{geometry}
\geometry{verbose,a4paper,tmargin=20mm,bmargin=20mm,lmargin=25mm,rmargin=25mm}
\pagestyle{headings}
\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}
\usepackage{graphics}
\usepackage{pifont}
\usepackage[latin1]{inputenc}
\usepackage{epsfig,subfigure,amsmath}
\usepackage[french]{babel}

\makeatletter


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@}
%% Special footnote code from the package 'stblftnt.sty'
%% Author: Robin Fairbairns -- Last revised Dec 13 1996
\let\SF@@footnote\footnote
\def\footnote{\ifx\protect\@typeset@protect
    \expandafter\SF@@footnote
  \else
    \expandafter\SF@gobble@opt
  \fi
}
\expandafter\def\csname SF@gobble@opt \endcsname{\@ifnextchar[%]
  \SF@gobble@twobracket
  \@gobble
}
\edef\SF@gobble@opt{\noexpand\protect
  \expandafter\noexpand\csname SF@gobble@opt \endcsname}
\def\SF@gobble@twobracket[#1]#2{}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
\newenvironment{lyxlist}[1]
  {\begin{list}{}
    {\settowidth{\labelwidth}{#1}
     \setlength{\leftmargin}{\labelwidth}
     \addtolength{\leftmargin}{\labelsep}
     \renewcommand{\makelabel}[1]{##1 \hfill}}}
  {\end{list}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage[french]{babel}
\makeatother

\renewcommand\labelitemi[0]{\ding{224}}
\begin{document}


\title{Travaux Pratiques : \\
  Programmer une application pour XtremWeb}
\author{Samir DJILALI}
%%\maketitle
%%\tableofcontents{}
\newpage
\newpage
\section{Introduction}
Le but de ce travail est de vous permettre de programmer (ou adapter)
une application pour pouvoir l'exécuter sur une environnement géré
par XtremWeb. Afin de vous familiariser avec l'environnement
d'exécution, une brève description de XtremWeb sera exposée dans la
première section. La deuxième section présente l'application
considérée pour la suite du TP. Enfin, deux TPs vous seront proposer, l'un s'interessant au client XtremWeb, l'autre à l'API de soumission. Chacune d'elle détaillera le travaille à effectuer.


\section{XtremWeb}

\subsection{Architecture Générale}

XtremWeb est conçu pour fournir un environnement de calcul
Global. L'idée de base est de mettre à contribution des machines,
durant leurs inactivité, pour effectuer des calculs. L'architecture de
XtremWeb est basée sur un modèle trois tiers. Les machines
participant à un projet sont classées suivant leurs rôles en trois
catégories :
\begin{itemize}
\item{{\bf Client :} C'est le point d'entrée à XtremWeb. Il permet de soumettre à la plateforme (via le serveur) des taches, les monitorer, récupérer les résultats de leur execution et les supprimer.
  
  Le client peut etre utilisé soit en ligne de commande soit en utilisant une API Java.
}
\item{{\bf Ex\'ecuteur (Worker) :} c'est une machine volontaire qui
  se propose de faire des calculs durant ses périodes
  d'inactivité. Un worker disponible contacte le serveur pour
  récupérer une tâche (exécutable + données), exécute la tâche puis
  renvoie le résultat au serveur.}
\item{{\bf Serveur (Dispatcher):} c'est une entité de coordination. Le serveur gère les requêtes
des clients pour les distribuer vers les machines workers qui demandent
du travail. Il stocke aussi les résultats reçus des workers pour les
mettre à disposition des clients.}
\end{itemize}

\subsection{Modèle de Programmation}
L'architecture actuelle de XtremWeb permet d'accepter des applications
de type maître-esclave. Dans ce modèle, le maître découpe un grand
volume de calcul pour le distribuer sur plusieurs esclaves. Dans
un environnement XtremWeb, le maître correspond au client et les
 esclaves aux machines workers. Une restriction est à noter : les
workers n'ont pas la possibilité de communiquer entre eux. 

\subsection{XtremWeb à GridUse}
Nous avons installé un dispatcher dans la salle de TP. Il est sur le serveur {\tt monox5}. Chacun des postes utilisateurs fait tourner un worker, il est lancé au démarrage de la machine.

\section{PovRay}
PovRay (the Persistence of Vision Ray-Tracer) crée des images 3D
réalistes en utilisant une technique de rendu appelée ray-tracing. Il
lit un fichier texte contenant des informations décrivant les objets
et les lumières dans une scène et génère une image de cette scène d'un
point de vue d'une caméra (elle aussi décrite dans les fichiers
texte). Le ray-tracing n'est en aucun cas un processus rapide, mais il
produit des images de très bonne qualité avec réflexions
réalistes, effets d'ombres, perspective et d'autres effets.

\newpage

\section{TP Client XtremWeb}

L'objectif de ce TP est de déployer une exécution distribuée de PovRay 
sur une plateforme XtremWeb. Dans un premier temps, nous nous interesserons 
à l'environnement d'exécution offert par XtremWeb puis à la manière de 
paralléliser la génération d'une scène PovRay.
Nous pourrons ensuite utiliser PovRay sur XtremWeb et réunir les données 
produites pour construire le résultat final.

\subsection{Découverte de l'environnement d'exécution}

Dans cette première partie du TP, nous allons découvrir comment s'exécutent 
les applications. Nous allons intégrer le programme {\tt helloWorld} dans 
XtremWeb.
Après avoir modifié le {\tt helloWorld.c} et l'avoir compilé statiquement, 
insérez le programme dans XtremWeb, provoquez une exécution et récupérez 
le résultat.

Soyez attentif à donner un nom unique pour votre application. Afin de ne 
pas rentrer en concurrence avec les autres participant au TP, nous vous 
conseillons le nomage suivant: votre nom d'utilisateur nom de votre application.

\subsection{Transformation d'une application classique en multi-paramétrique}

PovRay est une application séquentielle. Utilisée classiquement, elle génére 
une image à partir de fichier(s) de définition de scène. L'objectif de cette 
partie est de trouver un moyen de faire calculer à PovRay seulement une partie 
de l'image et non la totalité de la scène. En modifiant les paramètres du 
logiciel, essayez de calculer un quart de l'image.

\subsection{Utilisation de PovRay dans XtremWeb}

Maintenant que nous savons calculer un partie de l'image, nous allons faire 
calculer par XtremWeb les quatre parties de l'image. La commande {\tt ---xwmacro} 
vous permettra de soumettre toutes vos taches en une seule exécution.

\subsection{Conception du résultats final}

Maintenant que nous avons les quatre parties du résultat, il nous reste à 
constituer l'image finale. L'utilitaire d'ImageMagic {\tt montage} vous permettra d'associer les portions d'images pour créer le résultat final.

\subsection{Et maintenant le film...}

Vous savez générer une image. Vous pouvez maintenant essayer de générer un film. Attention, vu le nombre limité de workers, vous ne devrez lancer que cinq taches simultanément. Pour corser le problème, assurez vous qu'il y ait en permanence entre deux et cinq taches dans la queue d'XtremWeb.

\subsection{Annexes}

\subsubsection{XtremWeb Client}

Voici les différentes commandes dont vous pourriez avoir besoin lors de ce TP :

\begin{itemize}
\item{{\bf \tt ---xwapps :} liste les applications présente dans XtremWeb }
\item{{\bf \tt ---xwaddapp <name> <arch> <os> <binaire> :} Ajoute une application}
\item{{\bf \tt ---xwzipfile <fichier zip> ---xwsubmit <application name> <arguments>:} Soumet une tache xtremweb}
\item{{\bf \tt ---xwstatus <uid>:} Donne le status d'une tache}
\item{{\bf \tt ---xwget <uid>:} Récupère les résultats d'une tache}
\item{{\bf \tt ---xwmacro <fichier de macro>:} le fichier en paramètre contient une liste de commande}
\end{itemize}

\subsubsection{PovRay}

Pour obtenir de l'aide sur povray, executez la commande suivante {\tt povray -h}.

Voici un exemple d'execution generant l'image {\tt plage.jpg} de taille 800x600 à partir de la scène {\tt plage.pov} : {\tt povray +W800 +H600 +Oplage.jpg +Iplage.pov}.

Pour la génération d'image partielle, interessez vous aux options {\tt SRnn}, {\tt ERnn}, {\tt SCnn}, {\tt ECnn} où nn représente la taille ou le ratio de la portion d'image.

\subsubsection{ImageMagic Montage}

Le manuel de {\tt montage} a été installé sur chacune des machines. Vous pouvez 
le consulter en executant {\tt man montage}. la commande {\tt -geometry +0+0} 
permet de supprimer les bordures et {\tt -tile XxY} d'indiquer de combien d'images 
en abscisse (X) et en ordonné (Y) sera constituée l'image finale.

\subsubsection{Zip}

Pour créer un fichier zip, vous pouvez utiliser la commande suivante {\tt zip <fichier.zip> <fichiers à zipper>}.

\newpage

\section{TP API Java}

\subsection{Travail Demandé}
\'Ecrire le programme java exécuté par le maître pour calculer une
image avec PovRay.

Ce travail peut être fait en plusieurs étapes, afin de mieux découvrir
les fonctionnalités offertes par l'API de XtremWeb.

Tout d'abord, Vous aurez un exemple de programme (Example.java) utilisant
cette API pour soumettre une tâche et récupérer ses
résultats. Modifier ce programme pour soumettre un job calculant une
image PovRay. Il s'agit de modifier la description du job.

En deuxième étape, vous devez paralléliser votre calcul en découpant
la scène à calculer en plusieurs morceaux.

Enfin, vous pouvez optimiser votre programme en le
partitionnant en deux threads : un pour la soumettre les jobs et
l'autre pour récupérer les résultats. Ces deux threads peuvent
s'exécuter en parallèle. Cette méthode est très intéressante dans le
cas où des résultats sont disponibles avant la soumission de toutes les
tâches.

\subsection{Programmation}

Il faut, tout d'abord, distinguer deux programmes : Un programme
maître exécuté par un client, et des programmes esclaves exécutés
par des workers. Le programme maître se déroule en trois phases :
\begin{itemize}
\item{initialisation : découper le problème initial en plusieurs
  sous-problèmes indépendants (des calculs PovRay).}
\item{calcul : envoyer les sous-problèmes générés au serveur XtremWeb.}
\item{finalisation : récupérer les résultats et reconstituer l'image finale.}
\end{itemize} 

Pour l'instant, l'API XtremWeb n'est disponible qu'en java. C'est la
raison pour laquelle vous devez écrire votre programme maître en java.

Le programme esclave consiste en une exécution de PovRay avec le
calcul d'une partie de la scène globale. La délimitation de cette
partie par rapport à la scène globale est décrite sur la ligne de
commande. Il peut être du natif (compilé à partir de n'importe quel
langage de programmation) ou du byte-code java (.class ou .jar).
Dans le cadre de ce TP, l'application PovRay est une application 
Binaire.

\subsection{Aide}
\begin{itemize}
\item{Lire le fichier de configuration (utilisez le même
que celui généré pour les workers qui se trouve dans
XW\_Install\_Path/etc/xwrc où XW\_Install\_Path est le répertoire
d'installation XtremWeb). Utilisez la classe xtremweb.common.XWConfigurator.}

\item{Construire un objet ClientInterface, qui contient l'identité d'un
client (login et password). Utilisez la classe
xtremweb.RMIClient.ClientInterface.} 

\item{\'Etablir une connection avec le serveur XtremWeb. Utilisez la
  classe xtremweb.RMIClient.FTCommRMI.}

\item{Créer une session et un groupe de jobs. L'utilisation d'un groupe
permettra une gestion plus simple pour tester l'état d'avancement des
jobs et récupérer les résultats. Les classes à utiliser sont :
xtremweb.common.SessionInterface et xtremweb.common.GroupInterface.} 

\item{Construire un job. Utiliser les classes
  xtremweb.common.MobileWork et xtremweb.common.Zipper.}
On suppose que l'application PovRay est disponible chez le serveur
  XtremWeb.
Le nom de l'application est PovRay et la ligne de commande pour
  calculer une partie rectangulaire d'une scène est de cette forme: 
{\tt +SC0.00 +EC0.50 +SR0.00 +ER0.50 +W800 +H600 +Ibucket.pov +Oresults.jpg}
, où les quatre premières valeurs sont des pourcentages designant
respectivement : début et fin de la colonne, début et fin de la ligne
par rapport à la scène. La ligne de commande précédente calcule le
quart supérieur gauche d'une scène décrite dans un fichier nommé
bucket.pov. La scène globale fait 800 pixels de largeur et 600 pixels
de hauteur. L'image résultat sera stockée dans un fichier nommé
results.jpg. 
\item{Soumettre un job. Utilisez la méthode submitJob de la classe
  xtremweb.RMIClient.FTCommRMI.} 

\item{Tester l'état d'avancement des jobs. Utilisez la méthode
  groupStatus de la classe xtremweb.RMIClient.FTCommRMI.} 

\item{Récupérer les résultats. Utiliser la méthode getGroupResults de
  la classe xtremweb.RMIClient.FTCommRMI.} 
\end{itemize}


\subsection{Annexes}
Une description plus détaillée des fonctions constituant l'API de
XtremWeb est disponible dans le document de cours. 
 

\end{document}
