New OpenMP Directives for Irregular Data Access Loops

Many scientific applications involve array operations that are sparse in nature, ie array elements depend on the values of relatively few elements of the same or another array. When parallelised in the shared-memory model, there are often inter-thread dependencies which require that the individual a...

Full description

Bibliographic Details
Main Authors: J. Labarta, E. Ayguadé, J. Oliver, D.S. Henty
Format: Article
Language:English
Published: Hindawi Limited 2001-01-01
Series:Scientific Programming
Online Access:http://dx.doi.org/10.1155/2001/798505
id doaj-fb5ad3808d244a86b9d6fc3ec1d38b6c
record_format Article
spelling doaj-fb5ad3808d244a86b9d6fc3ec1d38b6c2021-07-02T06:52:28ZengHindawi LimitedScientific Programming1058-92441875-919X2001-01-0192-317518310.1155/2001/798505New OpenMP Directives for Irregular Data Access LoopsJ. Labarta0E. Ayguadé1J. Oliver2D.S. Henty3European Center for Parallelism of Barcelona, Technical University of Catalunya, Barcelona 08034, SpainEuropean Center for Parallelism of Barcelona, Technical University of Catalunya, Barcelona 08034, SpainEuropean Center for Parallelism of Barcelona, Technical University of Catalunya, Barcelona 08034, SpainEdinburgh Parallel Computing Center, The University of Edinburgh, Edinburgh EH93JZ, UKMany scientific applications involve array operations that are sparse in nature, ie array elements depend on the values of relatively few elements of the same or another array. When parallelised in the shared-memory model, there are often inter-thread dependencies which require that the individual array updates are protected in some way. Possible strategies include protecting all the updates, or having each thread compute local temporary results which are then combined globally across threads. However, for the extremely common situation of sparse array access, neither of these approaches is particularly efficient. The key point is that data access patterns usually remain constant for a long time, so it is possible to use an inspector/executor approach. When the sparse operation is first encountered, the access pattern is inspected to identify those updates which have potential inter-thread dependencies. Whenever the code is actually executed, only these selected updates are protected. We propose a new OpenMP clause, indirect, for parallel loops that have irregular data access patterns. This is trivial to implement in a conforming way by protecting every array update, but also allows for an inspector/executor compiler implementation which will be more efficient in sparse cases. We describe efficient compiler implementation strategies for the new directive. We also present timings from the kernels of a Discrete Element Modelling application and a Finite Element code where the inspector/executor approach is used. The results demonstrate that the method can be extremely efficient in practice.http://dx.doi.org/10.1155/2001/798505
collection DOAJ
language English
format Article
sources DOAJ
author J. Labarta
E. Ayguadé
J. Oliver
D.S. Henty
spellingShingle J. Labarta
E. Ayguadé
J. Oliver
D.S. Henty
New OpenMP Directives for Irregular Data Access Loops
Scientific Programming
author_facet J. Labarta
E. Ayguadé
J. Oliver
D.S. Henty
author_sort J. Labarta
title New OpenMP Directives for Irregular Data Access Loops
title_short New OpenMP Directives for Irregular Data Access Loops
title_full New OpenMP Directives for Irregular Data Access Loops
title_fullStr New OpenMP Directives for Irregular Data Access Loops
title_full_unstemmed New OpenMP Directives for Irregular Data Access Loops
title_sort new openmp directives for irregular data access loops
publisher Hindawi Limited
series Scientific Programming
issn 1058-9244
1875-919X
publishDate 2001-01-01
description Many scientific applications involve array operations that are sparse in nature, ie array elements depend on the values of relatively few elements of the same or another array. When parallelised in the shared-memory model, there are often inter-thread dependencies which require that the individual array updates are protected in some way. Possible strategies include protecting all the updates, or having each thread compute local temporary results which are then combined globally across threads. However, for the extremely common situation of sparse array access, neither of these approaches is particularly efficient. The key point is that data access patterns usually remain constant for a long time, so it is possible to use an inspector/executor approach. When the sparse operation is first encountered, the access pattern is inspected to identify those updates which have potential inter-thread dependencies. Whenever the code is actually executed, only these selected updates are protected. We propose a new OpenMP clause, indirect, for parallel loops that have irregular data access patterns. This is trivial to implement in a conforming way by protecting every array update, but also allows for an inspector/executor compiler implementation which will be more efficient in sparse cases. We describe efficient compiler implementation strategies for the new directive. We also present timings from the kernels of a Discrete Element Modelling application and a Finite Element code where the inspector/executor approach is used. The results demonstrate that the method can be extremely efficient in practice.
url http://dx.doi.org/10.1155/2001/798505
work_keys_str_mv AT jlabarta newopenmpdirectivesforirregulardataaccessloops
AT eayguade newopenmpdirectivesforirregulardataaccessloops
AT joliver newopenmpdirectivesforirregulardataaccessloops
AT dshenty newopenmpdirectivesforirregulardataaccessloops
_version_ 1721336760127979520