Archives de catĂ©gorie : Dev

CUDA

Voici la seconde partie de mon article sur les GPU.
Celui-ci vous permettra de découvrir CUDA de NVIDIA

1      Présentation

CUDA ou Computer Unified Device Architecture est une librairie de dĂ©veloppement créée par NVIDIA en 2007. Celle-ci associĂ©e Ă  une carte graphique compatible, permet d’utiliser la puissance de calculs des GPU d’architectureG80 et plus de NVidia (Ă  partir des GeForce 8800 et dĂ©clinaisons).
Par abus de langage nous parlerons aussi de langage CUDA.
CUDA est aussi le premier langage Ă  exploiter l’unification des shaders : les processeurs de la carte ne sont pas diffĂ©rentiĂ©s en unitĂ©s pour le traitement des vertex ou des fragments, chacun de ceux-ci peut ĂȘtre assignĂ© Ă  n’importe quelle tĂąche.

L’API CUDA supporte plusieurs langages tels que le C, le C++ et le Fortran.
Ces trois langages peuvent ĂȘtre utilisĂ©s simultanĂ©ment pour Ă©crire diverses fonctions exĂ©cutĂ©es par le GPU.

Il existe cependant des « wrapper », des passerelles, servant de liaison entre ces langages bas-niveau et des langages de plus haut niveaux tels que Python, Java et .Net.

CUDA est constituĂ© d’un pilote (driver), dĂ©jĂ  intĂ©grĂ© aux drivers les plus rĂ©cents, d’un runtime, et de quelques librairies.

Les différents composants de CUDA
Les différents composants de CUDA

Il existe 3 niveaux de programmation pour CUDA, chacune disposant de sa propre API :

–       Utilisation d’une librairie externe.
Celle-ci, possÚde le code de toute les fonctions à exécuter par le GPU, et sert de liaison entre le programme et le GPU.
Le développeur ne peut utiliser que certaines fonctions prédéfinies, et ne peut contrÎler directement le GPU.
Les deux librairies les plus connues sont CUBLAS qui offre un ensemble d’élĂ©ments pour rĂ©aliser des calculs d’algĂšbre linĂ©aires sur le GPU, ainsi que CUFFT qui permet le calcul de transformĂ©e de Fourrier.

–       l’API de haut niveau : l’API CUDA Runtime ou appelĂ©e plus communĂ©ment C for CUDA.
Cette API est implĂ©mentĂ©e « au dessus » de l’API bas niveau. Chaque appel Ă  une fonction du runtime est dĂ©composĂ© en instructions plus basiques gĂ©rĂ©es par l’API driver.
Ces 2 API sont exclusives : le programmeur doit utiliser soit l’une soit l’autre. Il est impossible de mĂ©langer des appels de fonctions de l’une et de l’autre.
Lorsque l’on parle d’API de haut niveau, il convient de relativiser : l’API runtime reste ce que beaucoup considĂšreraient comme dĂ©jĂ  de trĂšs bas niveau. Cependant elle offre des fonctions bien pratiques pour l’initialisation ou la gestion des contextes.
Cette API sera la plus couramment utilisée.

–       l’API de bas niveau : l’API CUDA Driver.
Cette API est plus complexe à gérer, elle demande plus de travail pour lancer un traitement sur le GPU, mais en contrepartie elle est plus flexible, offrant un contrÎle supplémentaire au programmeur qui le désire.
Cette API a l’avantage de pouvoir charger des portions de code en tant que module à partir de code binaires CUDA ou de code assembleur, et permet aussi d’inspecter les paramùtres, 

Cette API est beaucoup plus difficile à écrire, à débugger et nécessite beaucoup plus de lignes de code à écrire, mais elle offre de meilleure performances.

Les API Runtime et Driver sont capables toutes les deux de communiquer avec des ressources OpenGL ou Direct3D. L’utilitĂ© est Ă©vidente : CUDA pourrait ĂȘtre utilisĂ© pour gĂ©nĂ©rer des ressources (gĂ©omĂ©trie, textures procĂ©durales, etc.) qui seraient ensuite passĂ©es Ă  l’API graphique ou Ă  l’inverse on pourrait imaginer que l’API 3D pourrait envoyer le rĂ©sultat du rendu Ă  CUDA qui serait dans ce cas utilisĂ© pour effectuer un post traitement. Les exemples d’interactions sont nombreux et l’avantage est que les ressources restent stockĂ©es dans la mĂ©moire RAM du GPU sans avoir Ă  passer par le goulot d’étranglement du bus PCI-Express.

CUDA est fourni avec un « émulateur » : le code devant s’exĂ©cuter sur le GPU est en fait exĂ©cutĂ© sur le GPU. Les performances sont alors bien moindres, mais permettent de dĂ©bugger l’application et de tester celle-ci lorsqu’on ne dispose pas de GPU compatible.

Authentification Kerberos en JNDI

La documentation officiel java au sujet de l’authentification kerberos en JNDI est trĂšs bien faite. Mais je vais quand mĂȘme me faire un petit mĂ©mo Ă  ce sujet.

Le but du jeu est de mettre en place un processus d’authentification sĂ©curisĂ© entre une application java sur un poste en Windows XP et un controleur de domaine active directory sur Windows 2003. Le login et mot de passe utilisĂ© sont ceux de l’utilisateur dĂ©finis dans l’AD. Tout ceci en utilisant JNDI pour les requĂȘtes LDAP.

Il existe plusieurs mĂ©thode d’authentification sĂ©curisĂ© SASL pour JNDI. Je vais ici parler uniquement de l’authentification en Kerberos v5 Ă  travers la GSSAPI.

Continuer la lecture de Authentification Kerberos en JNDI

ProblĂšme de case des noms de tables MySQL

Bonjour,

Aujourd’hui j’aimerais vous faire part d’un problĂšme courant en ce qui concerne le dĂ©veloppement via MySQL sous Windows et sous Unix. La configuration par dĂ©faut du serveur MySQL n’est pas la mĂȘme selon le systĂšme d’exploitation. Dans mon cas, le problĂšme vient de la variable lower_case_table_names. Cette derniĂšre est configurĂ©e Ă  1 sous Windows et Ă  0 sous Unix.Vous pourrez trouver tous les dĂ©tails dans la documentation officielle sur ce sujet et ainsi mieux comprendre les problĂšme engendrĂ©s.logo_mysql

Mais les explications pour modifier cette variable ou vĂ©rifier qu’elle est sa valeur actuelle ne sont pas forcĂ©ment fournies au mĂȘme endroit. Je vous livre donc ici, la marche Ă  suivre complĂšte …

Continuer la lecture de ProblĂšme de case des noms de tables MySQL

Sajax et l’URL Rewritting

Re-bonjour, voici le 2iÚme « hacks » pour Sajax (voir mon précédent post sur Sajax et les Cookies).

Alors soyons cours mais efficace.

Sajax appel ses requĂȘtes asynchrones par l’adresse courante de la page.

exemple :

Si nous sommes sur la page index.php, les requĂȘtes auront pour adresse :

http://www.bisiere.fr/index.php?rs=nom_de_la_fonction&rst=&rsrnd=1220887954407&rsargs[]=arg1&rsargs[]=arg2

Le problĂšme s’impose lorsque l’on souhaite utiliser l’URL Rewritting et accĂ©der Ă  la page index.php via l’adresse :

http://www.bisiere.fr/home

ce qui nous donnera une « requĂȘte Sajax » vers cette adresse :

http://www.bisiere.fr/home?rs=nom_de_la_fonction&rst=&rsrnd=1220887954407&rsargs[]=arg1&rsargs[]=arg2

Et au mieux, vous aurez en retour de cette requĂȘte la page Html elle mĂȘme (sans intĂ©rĂȘt donc) sinon une erreur.

Le problĂšme se situe dans la fonction sajax_get_my_uri() servant Ă  rĂ©cupĂ©rer l’adresse courante.

Continuer la lecture de Sajax et l’URL Rewritting

Sajax et les Cookies

Bonjour Ă  tous, aujourd’hui je vous propose deux « hacks » pour Sajax (Simple Ajax Toolkit).

Un problĂšme se pose lors de l’utilisation d’un script appelĂ© via une XMLHttpRequest de Sajax (requĂȘtes dites « asynchrones ») qui exĂ©cute un enregistrement de cookie :

function vote_cookie($id) {
	setcookie("MonCookie", $id, time() + 86400);
}

Dans notre cas, impossible de faire marcher ce script car Ă  chaque appel nous avons droit Ă  cette erreur :

Warning:  Cannot modify header information - headers already sent...

Continuer la lecture de Sajax et les Cookies

Installation d’un serveur Ubuntu 9.04 64bits virtualisĂ© via VirtualBox pour le dĂ©veloppement d’applications Java / Flex.

Bonjour Ă  tous,

GlassFish Logo

pré-requis pour lire cette documentation :

  • Aimer Java / Flex
  • Aimer coder
  • DĂ©tester les admins sys

Introduction

Cette documentation a pour objectif de reprendre pas Ă  pas l’installation d’un serveur Ubuntu 9.04 64bits. Nous qualifierons ce serveur de pre-prod car son but est de supporter la mise en bĂ©ta test de nos applications. De plus ce serveur sera vitualisĂ© via VirtualBox.

Le tutorial dĂ©bute aprĂšs l’installation de Ubuntu Server 9.04 64bits. Lors de cette installation aucun service n’a Ă©tĂ© prĂ©-installĂ©.

Continuer la lecture de Installation d’un serveur Ubuntu 9.04 64bits virtualisĂ© via VirtualBox pour le dĂ©veloppement d’applications Java / Flex.