• Aucun résultat trouvé

PROOF

Dans le document Groupe calcul parallèle (Page 37-64)

I. Hrivnacova, IPN Orsay

Séminaire sur le calcul parallèle et GPU, 20 December 2013, IPN Orsay

PROOF

PROOF = The Parallel ROOT Facility

An extension of ROOT enabling interactive analysis of large sets of ROOT files in parallel on clusters of computers or many-core machines.

More generally PROOF can parallelize tasks that can be formulated as a set of independent sub-tasks

PROOF for TSelector based analysis:

Start analysis locally ("client"),

PROOF distributes data and code,

Lets CPUs ("workers") run the analysis,

Collects and combines (merges) data,

Shows analysis results locally

Séminaire sur le calcul parallèle et GPU,20 December 2013, IPN Orsay 3

With courtesy of Bertrand Bellenot, Axel Naumann, CERN

Séminaire sur le calcul parallèle et GPU,20 December 2013, IPN Orsay 4

With courtesy of Bertrand Bellenot, Axel Naumann, CERN

TSelector & PROOF

To be able to perform event-level parallelism, PROOF needs to be in charge of the event-loop;

This is provided by the Selector framework, defined by the abstract class TSelector with methods

Begin() - called on the client only

SlaveBegin() - called on each worker (create histograms)

Process() - do event analysis

SlaveTerminate() - rarely used; post processing of partial results before they are sent to master and merged

Terminate() - runs on the client: save results, display histograms, ...

Séminaire sur le calcul parallèle et GPU,20 December 2013, IPN Orsay 6

With courtesy of Bertrand Bellenot, Axel Naumann, CERN

Documentation

“Formation ROOT” in February 2012 at IPN Orsay:

http://ipnwiki.in2p3.fr/ipnsii/index.php/Formation_ROOT_2012

Root documentation:

http://root.cern.ch/drupal/content/proof

Christophe DIARRA Séminaire sur le calcul parallèle et GPU IPNO - 20/12/2013 diarra@ipno.in2p3.fr

C’est un ensemble de ressources

informatiques distribuées géographiquement , reliées à Internet et interagissant via un middleware (intergiciel)

Les ressources sont : les CPU, le stockage, les logiciels

Le matériel informatique est hétérogène et géré de façon décentralisée

Grace au middleware les utilisateurs disposent d’un supercalculateur virtuel

La grille facilite la mutualisation des

ressources et la collaboration scientifique

2001-2010 : projets européens sur les grilles

European DataGrid (EDG)

Enabling Grids for E-SciencE (EGEE)

Buts : Créer une grille européenne pour la communauté scientifique

Avril 2010 : fin EGEE début EGI

S’appuie sur les NGI (National Grid Initiative)

En France la NGI (GIS France Grilles) est pilotée par l’Institut des Grilles et du Cloud du CNRS

Buts : pérenniser l’infrastructure de grille en Europe

EGI comporte 37 NGI + CERN

EGI fournit le middleware EMI (european middleware initiative)

LCG est la plus grande grille de production au monde (300K CPU, 200 PB disk et 100PB tape, +1M jobs/jour)

Le middleware EMI comprend :

Un système d’autorisation et d’authentification

Un système de gestion de jobs

Un système de gestion des données

Un système d’information

Un système d’accounting (comptabilité)

Un système de monitoring (supervision)

Il faut posséder un certificat électronique

S’inscrire dans une Organisation Virtuelle

Une VO (Virtual Organization) est une

communauté d’utilisateurs ayant des intérêts communs et qui utilisent la grille pour

collaborer et partager des ressources

Se servir des utilitaires ou outils (fournis) pour transférer des données

Soumettre un job (traitement par lot) pour pour faire tourner un code de calcul

6 Authentification

Autorisation Accounting Workload Management

System (WMS) Information System

User Interface

Worker Nodes Computing

Element

Soumission job + suivi et

récupération résultat

Logging &

Bookeeping (LB)

Demande status

Information sur le CE, SE

Storage Element

File Replica Metadata Catalog

Information sur la localisation des

données Informations publiées par les services CE, SE,

Soumission job et récupération résultat

Données d’auth.

& d’autorisation

La grille avec 2 clusters distincts:

CE ipngrid04: >800 cores

CE ipngrid12: 496 cores avec MPI/IB

2 SE : DPM (17 TB), xrootd (>300 TB pour ALICE)

2 UI: ipngrid01 et ipngrid02

Calcul interactif : sur ipngrid01 (32 cores) + 3GPUs NVIDIA M2090

Compilateurs/Logiciels: CUDA, Compilateurs

Intel/MKL, PGI/ACML, Matlab, Mathematica, NAG

~30 utilisateurs locaux (RC, PACS/MURE, PANDA, Physique Théorique, AUGER, Instrumentation, …)

NB: ressources GRIF disponibles aussi (12K cores, 4PB)

JDL :

$ cat hello.jdl

Executable = "/bin/echo";

Arguments = "Hello World";

StdOutput = "std.out";

StdError = "std.err";

OutputSandbox = {"std.out","std.err"};

Requirements = RegExp("ipngrid04.in2p3.fr.*ipno$",other.GlueCEUniqueID);

voms-proxy-init --voms vo.ipno.in2p3.fr --valid 24:0

glite-wms-job-submit -a -o jid hello.jdl

glite-wms-job-status -i jid

glite-wms-job-output -i jid

8

https://ipngridwiki.in2p3.fr

http://www.egi.eu

http://lcg.web.cern.ch/lcg/

http://public.web.cern.ch/public/

http://grif.fr

http://www.gridcafe.org/index.html

Christophe DIARRA Séminaire sur le calcul parallèle et GPU

IPNO - 20/12/2013 diarra@ipno.in2p3.fr

C’est un standard industriel qui permet de la la parallélisation multi-tâches/multi-threads dans un contexte de mémoire partagée

OpenMP propose une API pour C/C++, Fortran avec:

Des directives du compilateurs

Des bibliothèques

Des variables d’environnement

Le parallélisme est explicite mais la communication inter-tâches est gérée par le compilateur

OpenMP ne sait :

Gérer la mémoire distribuée

Gérer les I/O parallèles dans un même fichier (pas de garantie du résultat)

Détecter les problèmes de dépendances des données, d’accès concurrents, de deadlocks, de conflits entre données

Peu de directives au total

Possibilité de paralléliser avec 3 ou 4 directives

Facilité d’utilisation:

parallélisation incrémentale à la différence de MPI

Même* code source pour la version parallèle et série

(*) Moyenanant quelques directives du préprocesseur

Un programme OpenMP est exécuté par un processus unique qui active des threads à l’entrée d’une région parallèle

OpenMP utilise le modèle Fork – Join

4

Forme générale:

sentinelle directive [clause, ...]

Exemples:

Fortran: !$OMP PARALLEL DEFAULT(SHARED) PRIVATE(BETA,PI)

C/C++: #pragma omp parallel default(shared) private(beta,pi)

N.B.: sentinelles acceptés en Fortran

en free form source fortran: !$OMP

en fixed form source fortran: !$OMP, C$OMP,

*$OMP en colonne 1

Lors d’une compilation sans OpenMP, les

lignes de directives sont traitées comme des lignes de commentaires.

En Fortran:

!$OMP directive

[ structured block of code ]

!$OMP end directive

En C/C++:

#pragma directive

[ structured block of code ]

NB: En C le bloc est délimité par ‘{}’ sauf s’il est implicite (ex: après un ‘#pragma omp for’)

Une région parallèlle est un bloc de code exécuté par plusieurs threads

Fortran !$OMP PARALLEL [clause ...]

IF (scalar_logical_expression) PRIVATE (list)

SHARED (list)

DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE) FIRSTPRIVATE (list)

REDUCTION (operator: list) COPYIN (list)

NUM_THREADS (scalar-integer-expression) block

!$OMP END PARALLEL

C/C++ #pragma omp parallel [clause ...] newline if (scalar_expression)

private (list) shared (list)

default (shared | none) firstprivate (list)

reduction (operator: list) copyin (list)

num_threads (integer-expression) structured_block

Parallélisation de boucles (DO/for)

Création de sections (pour les blocs de code indépendants) : SECTIONS

Exécution : exécution mono-thread (SINGLE)

PROGRAM DOT_PRODUCT

INTEGER N, CHUNKSIZE, CHUNK, I PARAMETER (N=100)

PARAMETER (CHUNKSIZE=10) REAL A(N), B(N), RESULT

! Some initializations DO I = 1, N

A(I) = I * 1.0 B(I) = I * 2.0 ENDDO

RESULT= 0.0

CHUNK = CHUNKSIZE

!$OMP PARALLEL DO

!$OMP& DEFAULT(SHARED) PRIVATE(I)

!$OMP& SCHEDULE(STATIC,CHUNK)

!$OMP& REDUCTION(+:RESULT) DO I = 1, N

RESULT = RESULT + (A(I) * B(I)) ENDDO

!$OMP END PARALLEL DO

PRINT *, 'Final Result= ', RESULT END

#include <omp.h>

main () {

int i, n, chunk;

float a[100], b[100], result;

/* Some initializations */

n = 100;

chunk = 10;

result = 0.0;

for (i=0; i < n; i++) {

a[i] = i * 1.0;

b[i] = i * 2.0;

}

#pragma omp parallel for \ default(shared) private(i) \ schedule(static,chunk) \ reduction(+:result)

for (i=0; i < n; i++)

result = result + (a[i] * b[i]);

printf("Final result= %f\n",result);

}

BARRIER: synchronise tous les threads du groupe

MASTER: restreint l’exécution d’un bloc de code au master thread. Les autres thread continuent leur exécution après cette

section. Donc synchroniser si nécessaire avec BARRIER.

CRITICAL: un seul thread peut s’exécuter à la fois

ATOMIC: lecture+modification+écriture atomique

Pour pouvoir utiliser la biblothèque OpenMP:

Compilation GNU:

gcc –fopenmp –o prog prog.c

gfortran –fopenmp –o prog prog.f

Compilation Intel:

icc –openmp –o prog prog.c

ifort –openmp –o prog prog.f

setenv OMP_NUM_THREADS 8

./prog

Fortran C/C++

INTEGER FUNCTION OMP_GET_NUM_THREADS() ou

USE OMP_LIB

NBTHREADS = OMP_GET_NUM_THREADS()

#include <omp.h>

nbthreads=omp_get_num_threads();

Dans le document Groupe calcul parallèle (Page 37-64)

Documents relatifs