Compilation et optimisation statique des communications hôte-accélérateur
Résumé
La puissance de calcul disponible dans les machines hybrides à base d'accélérateurs matériels de type GPU nécessite de réécrire les programmes selon un modèle complexe et réparti : les données traitées doivent être copiées entre mémoire de l'hôte et mémoire de l'accélérateur. Cette contrainte est régulièrement identifiée comme le goulot d'étranglement. Nous proposons une transformation automatique qui génère statiquement des instructions de copies entre l'hôte et l'accélérateur selon deux stratégies " au plus tôt " et " au plus tard ". De plus, les communications inutiles ou redondantes sont évitées. Nous présentons les résultats obtenus avec des tests pris parmi les Polybench 2.0, les Rodinia, et sur une simulation numérique réelle. Nous obtenons une accélération moyenne de 4 à 5 par rapport à une parallélisation naïve sur un GPU moderne avec PAR4ALL, HMPP, et PGI ; et de 3.5 par rapport à une version OPENMP avec une machine équipée de 12 coeurs.
Title: Static compilation analysis for host-accelerator
Abstract: We present an automatic, static program transformation that schedules and generates efficient memory transfers between a computer host and its GPU like hardware accelerator, addressing a well-known performance bottleneck. Our static automatic approach uses two simple heuristics: to perform transfers to the accelerator as early as possible and to delay transfers back from the accelerator as late as possible. In the generated code, redundant communications due to data reuse between kernel executions are avoided. We present experimental results obtained with the Polybench 2.0, some Rodinia benchmarks, and with a real numerical simulation. We obtain an average speedup of 4 to 5 when compared to a naïve parallelization using a modern GPU with PAR4ALL, HMPP, and PGI, and 3.5 when compared to an OPENMP version using a 12-core multiprocessor.
Title: Static compilation analysis for host-accelerator
Abstract: We present an automatic, static program transformation that schedules and generates efficient memory transfers between a computer host and its GPU like hardware accelerator, addressing a well-known performance bottleneck. Our static automatic approach uses two simple heuristics: to perform transfers to the accelerator as early as possible and to delay transfers back from the accelerator as late as possible. In the generated code, redundant communications due to data reuse between kernel executions are avoided. We present experimental results obtained with the Polybench 2.0, some Rodinia benchmarks, and with a real numerical simulation. We obtain an average speedup of 4 to 5 when compared to a naïve parallelization using a modern GPU with PAR4ALL, HMPP, and PGI, and 3.5 when compared to an OPENMP version using a 12-core multiprocessor.