Au fil des flows

19avr/120

Accelerate your code 2012, c’est parti !

J'ai l'impression que notre première participation à ce concours remonte à hier. Pourtant c'etait il y'a un an à présent. Depuis, nous avons avec Maxime participé à toutes les éditions avec un plaisir renouvellé à chaque fois.

Depuis le 16 avril, c'est reparti. Vous trouverez l'énoncé sur le site d'Intel.
Anthony, Paul et Xavier, de Intel Software France, ont décidé de nous faire travailler sur l'ADN cette fois ci.

Le principe du concours reste le même :
- Ecrire un programme qui marche
- Ecrire le programme le plus rapide possible
- Ecrire le programme le plus rapide possible exploitant le plus grand nombre de processeurs disponibles
- Partager son expérience au sein de la communauté

Chaque fois, il s'agit d'un problème se basant sur dont l'algorithme de résolution n'est pas trivial. Au cours des concours précédents, nous avions beaucoup plus de mal à trouver l'algorithme optimal plutôt qu'à optimiser le parallélisme.

Ce n'est pas tout à fait vrai, le problème précédent, nous avions échoué à paralléliser l'analyse du fichier.

Avec le 4L trophy, nous pensions ne pas participer à cette édition. Apres de nombreux doutes et hésitations, nous avons tranché. Vous nous retrouverez bien dans la course. Ce serait trop dommage de ne pas profiter une fois de plus de l'occasion surtout que le problème est très intéressant.

Quelques details sur le sujet

Le programme prend en entrée une référence d'ADN. Une suite de lettre ACGT.

Voici un exemple :

GTAAATGTACCCCAGTAAAGCATCTTAATGTATCTAAGCCACAGAAACTTGCACGATCTCCTGCAAGAATATCCCCGCAC
ATCAAAGATGGAGAGAAAGATAAACACAGAGAAAAACATCCGAATTCATCCCCTAGGACATATAAATGGAGCTTTCAGCT
CA

A partir de cette référence, le programme résultat devra extraire les sous parties présentes dans d'autres fichiers (Un fichier peut contenir plusieurs chaines ADN).

Le programme devra donner les résultats sous la forme suivante :

test_sequence_1
1 910 771 1680
911 1680 1 770
1681 2088 1681 2088

les 2 premiers nombres représentent la position du début et de la fin du motif dans le fichier de reference. Les 2 nombres suivants sont la position dans l'une des séquences d'entrée.

Qu'est ce que c'est la programmation parallele ?

A l'heure d'aujourd'hui, nous commençons à atteindre les limites pour la miniaturisation des puces. La solution choisie par les fondeurs est de créer des processeurs avec de plus en plus de coeurs.

Pour profiter de ces architectures, vous devez écrire du code capable de s'exécuter sur plusieurs unités de calcul.

Pour ça, vous avez plusieurs librairies à votre disposition. La base c'est pThread, l'implémentation des threads posix sous linux. C'est une librairie bas niveau qui vous laisse un contrôle totale sur le fonctionnement de votre programme. La contrepartie c'est que vous devez gérer une complexité plus élevée. La librairie OpenMp suit la philosophie totalement inverse. Vous gérez peu de choses, vous indiquez seulement au compilateur quels sont les parties parallèles (et les boucles parallèles) de votre programme.

Voici un exemple d'un code (assez stupide, vous pouvez le dire) utilisant la librairie open mp pour s'exécuter sur plusieurs processeurs :

#include<stdio.h>
#include<omp.h>

int main (int argc, char const *argv[])
{
  int k;
  #pragma omp parallel for num_threads(8)
  for(k=0;k<100;k++)
  {
    int i = 0;
    sleep(1); // Le sleep permet de simuler une tache prenant un certain temps
    printf("k : %d managed by the thread %d \n",k,omp_get_thread_num());
  }

  return 0;
}

Je remet le lien des 2 articles que nous avions postés sur le site d'Intel à l'occasion de la première édition :
- Résolution du problème des smallbrains numbers
- Recherche de nombres premiers particuliers (Une solution au second problème)

Rien à dire, ce fut une sacré expérience et nous espérons que cette fois ci ce sera encore aussi plaisant.

Posted by Fabien Arcellier

Commentaires (0) Trackbacks (0)

Aucun commentaire pour l'instant


Leave a comment

Aucun trackbacks pour l'instant