OpenMP
Barbara Chapman, Deepak Eachempati, Sunita Chandrasekaran · The MIT Press eBooks · 2015
Cited by 1
Read the abstract, see who wrote it and who cites it, and get the citation in APA, MLA, Chicago or Harvard.
About 7,052 papers for “OpenMP”
Barbara Chapman, Deepak Eachempati, Sunita Chandrasekaran · The MIT Press eBooks · 2015
Cited by 1
Pd3, Marshall, John, Bonfield, James et al. · Zenodo (CERN European Organization for Nuclear Research) · 2017
This is a version of HTSlib (https://github.com/samtools/htslib) with OpenMP optimizations described in the manuscript: <code>Nathan T. Weeks and Glenn R. Luecke, "Optimization of SAMtools Sorting Using OpenMP Tasks". Cluster Computing. (submitted) </code>
Cited by 0Open access
Simon Hoffmann, Rainer Lienhart · Informatik im Fokus · 2008
Cited by 2
Пшоняк, П. · ELARTU (Ternopil National Technical University) · 2010
Cited by 0
Marongiu, A. · IRIS UNIMORE (University of Modena and Reggio Emilia) · 2018
Cited by 0
Bryan Ford, Amittai Aviram · 2012
Researchers widely agree that determinism in parallel programs is desirable. Although experimental parallel programming languages have long featured deterministic semantics, in mainstream parallel environments, developers still build on non-deterministic constructs such as mutexes, leading to time- or schedule-dependent heisenbugs. To make deterministic programming more accessible, we introduce DOMP, a deterministic extension to OpenMP, preserving the familiarity of traditional languages such as C and Fortran, and maintaining source-compatibility with much of the existing OpenMP standard. Our analysis of parallel idioms used in 35 popular benchmarks suggests that the idioms used most often (89% of instances in the analyzed code) are either already expressible in OpenMP's deterministic subset (74%), or merely lack more general reduction (12%) or pipeline (3%) constructs. DOMP broadens OpenMP's deterministic subset with generalized reductions, and implements an efficient deterministic runtime that acts as a drop-in replacement for Gnu's widely used conventional OpenMP support library COMP, on mainstream Unix platforms. We evaluate DOMP with several existing OpenMP benchmarks, each requiring under 50 source line changes and a majority requiring none, as well as several benchmarks we ported to OpenMP/DOMP. We find DOMP's efficiency and scalability comparable to GOMP in 7 of 11 benchmarks, suggesting that a deterministic model for mainstream parallel programming may be well within reach.
Cited by 3
Попов С. Б., Попов С. Б. · Repository of Samara University (Samara National Research University) · 2011
Труды сотрудников СГАУ(электрон. версия).
Cited by 0
Raymond J. Spiteri, Kyle Klenk · CMS/CAIMS books in mathematics · 2025
Cited by 0
The MIT Press eBooks · 2023
Cited by 0
Raymond J. Spiteri, Kyle Klenk · CMS/CAIMS books in mathematics · 2025
Cited by 0
Mohr, B. · JuSER (Forschungszentrum Jülich) · 2003
Cited by 0
Sahu, Subhajit · Zenodo (CERN European Organization for Nuclear Research) · 2022
OpenMP-based parallel graph implementation. I have been trying to parallelize the graph data structure from bottom up. Each vertex has a <strong>list of edges</strong>, which is a <strong>sorted vector of pairs</strong> of <em>edge id</em> and <em>weight</em>. A sorted list has better locality, lookup, and update time. To amortize cost of edge deletions and insertions, they are <em>simply queued up</em> and lazily updated. <em>Either</em> a batch of deletions <em>or</em> insertions must be done at a time to use lazy behaviour (not a mix). The lazy update is done manually by calling <code>update()</code> with a temporary per-thread buffer. The buffer is needed to do an <em>in-place</em> <code>set_union_last_unique()</code> / <code>set_difference_unique()</code>. Different threads must work on <em>different</em> vertices. <br> The last time i tried parallelizing graph reading with 12 threads, performance as 1/2 that of sequential, with converting each line to numbers taking the most time. It seems that the default stream operator (<code>>></code>) uses locks for some reason to support locales, and is not recommended to use in parallel code. <br> I switched to using <code>strtoull()</code> and <code>strtod()</code> for the conversion, switched to <code>istringstream</code> from <code>stringstream</code>, and parallelized edge addition into the graph (along with parallel update). On <code>web-Google</code> graph we are now getting a speedup of <strong>~6x</strong> for graph loading. I now log system date and time for detecting any more bottlenecks. The parallel edge update is as follows. Only one of the 12 threads will add the edge to the graph if the source vertex belongs to its chunk. <br> Graph functions such as <code>symmetricize()</code> are now simply parallelized as below. <br> We are able to load graphs with more that <em>4 billion edges</em> in under <strong>10</strong> <strong>minutes</strong>. Most of the time spent is loading the graph is the time needed to <em>read the file</em>, and <em>add edges to the graph data structure</em>. We get a net loading rate of about <strong>10 million edges per second</strong>. <em>Updating the graph</em>, which involves sorting the edges of each vertex while picking only the last unique entry, is about <em>50 times faster</em>. <br> All outputs are saved in a gist and a small part of the output is listed here. Some charts are also included below, generated from sheets. The input data used for this experiment is available from the SuiteSparse Matrix Collection. This experiment was done with guidance from Prof. Kishore Kothapalli and Prof. Dip Sankar Banerjee. <br> <pre><code class="lang-bash">$ g++ -std=c++17 -O3 main.cxx $ ./a.out ~/Data/GAP-road.mtx $ ./a.out ~/Data/GAP-twitter.mtx $ ... # 2022-12-17 21:04:36 Loading graph /home/subhajit/Data/GAP-road.mtx ... # 2022-12-17 21:04:36 OMP_NUM_THREADS=24 # 2022-12-17 21:04:42 readMtxOmpW(): vertices=269.8ms, read=3173.7ms, parse=218.2ms, edges=2290.6ms, update=193.3ms # 2022-12-17 21:04:42 order: 23947347 size: 57708624 [directed] {} # 2022-12-17 21:04:42 [06160.472 ms] readMtxOmpW # # 2022-12-17 21:04:43 Loading graph /home/subhajit/Data/GAP-twitter.mtx ... # 2022-12-17 21:04:43 OMP_NUM_THREADS=24 # 2022-12-17 21:08:07 readMtxOmpW(): vertices=711.1ms, read=138848.7ms, parse=10906.0ms, edges=50429.3ms, update=3494.1ms # 2022-12-17 21:08:07 order: 61578415 size: 1468364884 [directed] {} # 2022-12-17 21:08:07 [204464.219 ms] readMtxOmpW # # ... </code></pre> <br> <br> References How can I convert a std::string to int? Fastest way to read numerical values from text file in C++ (double in this case) What's the difference between istringstream, ostringstream and stringstream? / Why not use stringstream in every case? c++ stringstream is too slow, how to speed up? Best Approach to read huge files utilizing multithreading; Stephan van Hulst :: Coderanch How to get current time and date in C++? Signed variant of size_t in standard C++ library Is 'signed size_t' different from 'ssize_t'? How to create a temporary directory? How to amend a commit without changing commit message (reusing the previous one)? Syntax for a single-line while loop in Bash How can I save username and password in Git? How do I tell git to use fewer cores/threads when compressing? Containers library :: cppreference Date and time utilities :: cppreference Standard library header <string> :: cppreference Standard library header <algorithm> :: cppreference The University of Florida Sparse Matrix Collection; Timothy A. Davis et al. (2011) <br> <br> <br>
Cited by 0Open access
Sahu, Subhajit · Zenodo (CERN European Organization for Nuclear Research) · 2022
OpenMP-based parallel graph implementation. I have been trying to parallelize the graph data structure from bottom up. Each vertex has a <strong>list of edges</strong>, which is a <strong>sorted vector of pairs</strong> of <em>edge id</em> and <em>weight</em>. A sorted list has better locality, lookup, and update time. To amortize cost of edge deletions and insertions, they are <em>simply queued up</em> and lazily updated. <em>Either</em> a batch of deletions <em>or</em> insertions must be done at a time to use lazy behaviour (not a mix). The lazy update is done manually by calling <code>update()</code> with a temporary per-thread buffer. The buffer is needed to do an <em>in-place</em> <code>set_union_last_unique()</code> / <code>set_difference_unique()</code>. Different threads must work on <em>different</em> vertices. <br> The last time i tried parallelizing graph reading with 12 threads, performance as 1/2 that of sequential, with converting each line to numbers taking the most time. It seems that the default stream operator (<code>>></code>) uses locks for some reason to support locales, and is not recommended to use in parallel code. <br> I switched to using <code>strtoull()</code> and <code>strtod()</code> for the conversion, switched to <code>istringstream</code> from <code>stringstream</code>, and parallelized edge addition into the graph (along with parallel update). On <code>web-Google</code> graph we are now getting a speedup of <strong>~6x</strong> for graph loading. I now log system date and time for detecting any more bottlenecks. The parallel edge update is as follows. Only one of the 12 threads will add the edge to the graph if the source vertex belongs to its chunk. <br> Graph functions such as <code>symmetricize()</code> are now simply parallelized as below. <br> We are able to load graphs with more that <em>4 billion edges</em> in under <strong>10</strong> <strong>minutes</strong>. Most of the time spent is loading the graph is the time needed to <em>read the file</em>, and <em>add edges to the graph data structure</em>. We get a net loading rate of about <strong>10 million edges per second</strong>. <em>Updating the graph</em>, which involves sorting the edges of each vertex while picking only the last unique entry, is about <em>50 times faster</em>. <br> All outputs are saved in a gist and a small part of the output is listed here. Some charts are also included below, generated from sheets. The input data used for this experiment is available from the SuiteSparse Matrix Collection. This experiment was done with guidance from Prof. Kishore Kothapalli and Prof. Dip Sankar Banerjee. <br> <pre><code class="lang-bash">$ g++ -std=c++17 -O3 main.cxx $ ./a.out ~/Data/GAP-road.mtx $ ./a.out ~/Data/GAP-twitter.mtx $ ... # 2022-12-17 21:04:36 Loading graph /home/subhajit/Data/GAP-road.mtx ... # 2022-12-17 21:04:36 OMP_NUM_THREADS=24 # 2022-12-17 21:04:42 readMtxOmpW(): vertices=269.8ms, read=3173.7ms, parse=218.2ms, edges=2290.6ms, update=193.3ms # 2022-12-17 21:04:42 order: 23947347 size: 57708624 [directed] {} # 2022-12-17 21:04:42 [06160.472 ms] readMtxOmpW # # 2022-12-17 21:04:43 Loading graph /home/subhajit/Data/GAP-twitter.mtx ... # 2022-12-17 21:04:43 OMP_NUM_THREADS=24 # 2022-12-17 21:08:07 readMtxOmpW(): vertices=711.1ms, read=138848.7ms, parse=10906.0ms, edges=50429.3ms, update=3494.1ms # 2022-12-17 21:08:07 order: 61578415 size: 1468364884 [directed] {} # 2022-12-17 21:08:07 [204464.219 ms] readMtxOmpW # # ... </code></pre> <br> <br> References How can I convert a std::string to int? Fastest way to read numerical values from text file in C++ (double in this case) What's the difference between istringstream, ostringstream and stringstream? / Why not use stringstream in every case? c++ stringstream is too slow, how to speed up? Best Approach to read huge files utilizing multithreading; Stephan van Hulst :: Coderanch How to get current time and date in C++? Signed variant of size_t in standard C++ library Is 'signed size_t' different from 'ssize_t'? How to create a temporary directory? How to amend a commit without changing commit message (reusing the previous one)? Syntax for a single-line while loop in Bash How can I save username and password in Git? How do I tell git to use fewer cores/threads when compressing? Containers library :: cppreference Date and time utilities :: cppreference Standard library header <string> :: cppreference Standard library header <algorithm> :: cppreference The University of Florida Sparse Matrix Collection; Timothy A. Davis et al. (2011) <br> <br> <br>
Cited by 0Open access
Steven Tang, Richard Sinnott · 2025
Though it is possible to use pure OpenMP or pure MPI to develop parallel and distributed memory applications respectively, both are often combined in a hybrid MPI/OpenMP model to target clusters of multi-core nodes.In this paper, we introduce and discuss the design and implementation of a source-to-source compiler, translating OpenMP-annotated source code to MPI/OpenMP.We evaluate the performance of the translated programs on the HPC Spartan cluster at the University of Melbourne.
Cited by 0Open access
Victor Eijkhout · Society for Industrial and Applied Mathematics eBooks · 2026
In many scientific applications the bulk of the work takes the form of loops over large datasets, specifically multidimensional arrays. Often, the loop iterations are independent, for instance, in computing the output components of a matrix-vector product, the pixels of an image under convolution, or any operation on the points of a finite elements (FE) grid. Since the iterations are independent, they can be processed in parallel.
Cited by 0
Petr Bělohlávek · Digital Repository (National Repository of Grey Literature) · 2015
Due to its backward compatibility, multi-threaded programming in Java is often performed ineffectively and repels inexperienced programmers from development of parallel applications. This thesis introduces omp4j - an OpenMP-like preprocessor that supports Java language standards 6, 7 and 8 without any runtime dependencies. Furthermore, the thesis develops a scalable and portable solution for all commonly used JDKs. The combination of the syntax and bytecode analyses is employed by the preprocessor in order to parallelize the source code. The developed project may be used either as a CLI utility or as a third-party library for Java and Scala projects. The latter possibility is demonstrated in an online demo which was developed together with the project website - www.omp4j.org. Additionally, the performance evaluation, which discusses various aspects of the implemented preprocessor, is presented and the comparisons to the related C++ and Java solutions are elaborated. In comparison to the similar projects, significantly better scalability of omp4j is proven at significance level alpha = 0.01 for some of the benchmarks. Powered by TCPDF (www.tcpdf.org)
Cited by 0
Barbara Chapman, Gabriele Jost, Ruud van der Pas · 2007
This chapter contains sections titled: Introduction, Terminology, Parallel Construct, Sharing the Work among Threads in an OpenMP Program, Clauses to Control Parallel and Work-Sharing Constructs, OpenMP Synchronization Constructs, Interaction with the Execution Environment, More OpenMP Clauses, Advanced OpenMP Constructs, Wrap-Up
Cited by 0
Christian Terboven, Dieter an Mey · RWTH Publications (RWTH Aachen) · 2008
Cited by 0
Bělohlávek, Petr · Digital Repository (National Repository of Grey Literature) · 2015
Due to its backward compatibility, multi-threaded programming in Java is often performed ineffectively and repels inexperienced programmers from development of parallel applications. This thesis introduces omp4j - an OpenMP-like preprocessor that supports Java language standards 6, 7 and 8 without any runtime dependencies. Furthermore, the thesis develops a scalable and portable solution for all commonly used JDKs. The combination of the syntax and bytecode analyses is employed by the preprocessor in order to parallelize the source code. The developed project may be used either as a CLI utility or as a third-party library for Java and Scala projects. The latter possibility is demonstrated in an online demo which was developed together with the project website - www.omp4j.org. Additionally, the performance evaluation, which discusses various aspects of the implemented preprocessor, is presented and the comparisons to the related C++ and Java solutions are elaborated. In comparison to the similar projects, significantly better scalability of omp4j is proven at significance level alpha = 0.01 for some of the benchmarks. Powered by TCPDF (www.tcpdf.org)
Cited by 0
Förster, Michael, Naumann, Uwe, Utke, Jean · RWTH Publications (RWTH Aachen) · 2011
Cited by 0