In big-data analytics, using tensor decomposition to extract patterns from large, sparse multivariate data is a popular technique. Many challenges exist for designing parallel, high performance tensor decomposition algorithms due to irregular data accesses and the growing size of tensors that are processed. There have been many efforts at implementing shared-memory algorithms for tensor decomposition, most of which have focused on the traditional C C++ with OpenMP framework. However, Chapel is becoming an increasingly popular programing language due to its expressiveness and simplicity for writing scalable parallel programs. In this work, we port a state of the art C OpenMP parallel sparse tensor decomposition tool, SPLATT, to Chapel. We present a performance study that investigates bottlenecks in our Chapel code and discusses approaches for improving its performance. Also, we discuss features in Chapel that would have been beneficial to our porting effort. We demonstrate that our Chapel code is competitive with the C OpenMP code for both runtime and scalability, achieving 83 -96 performance of the original code and near linear scalability up to 32 cores.
There has been a significant effort to evaluate and analyze the performance of Chapel programs for both single- and multi-node environments. Johnson and Hollingsworth ported and optimized several C OpenMP based benchmarks to single-node Chapel including LULESH, MiniMD, and CLOMP @cite_8 . Haque and Richards implemented an optimized multi-node version of CoMD in Chapel as well as identified key limitations of Chapel in regards to scope-based code locality @cite_4 . Our work, while similar, differs from these efforts in that SPLATT is a sparse application from a different problem domain. It also is a full application with several components, ranging from file I O and sorting to custom sparse data structures and parallel algorithms, rather than a benchmark or proxy application.
@cite_4 @cite_8
2566316545 2481619518
Chapel supports distributed computing with an underlying PGAS memory address space. While it provides abstractions for writing simple and elegant distributed code, the type system currently lacks a notion of locality i.e. a description of an object's access behavior in relation to its actual location. This often necessitates programmer intervention to avoid redundant non-local data access. Moreover, due to insufficient locality information the compiler ends up using “wide” pointers—that can point to non-local data—for objects referenced in an otherwise completely local manner, adding to the runtime overhead.In this work we describe CoMD-Chapel, our distributed Chapel implementation of the CoMD benchmark. We demonstrate that optimizing data access through replication and localization is crucial for achieving performance comparable to the reference implementation. We discuss limitations of existing scope-based locality optimizations and argue instead for a more general (and robust) type-based approach. Lastly, we also evaluate code performance and scaling characteristics. The fully optimized version of CoMD-Chapel can perform to within 62 –87 of the reference implementation. This paper investigates how Chapel performance compares with other parallel frameworks. We provide specific examples of how programmers may improve their single-node (single-locale) Chapel programs to improve performance. We also identify some changes that would be possible to the language to make it easier to get these performance gains. Specifically, we compare the intranode performance of Chapel programs with OpenMP in C C++ by conducting case studies profiling the LULESH, MiniMD, SSCA#2, and CLOMP benchmarks. Our optimization techniques demonstrate improved runtime performance of Chapel benchmarks by factors of 3x, 5.3x, 6.3x, and 4.8x respectively and outperformed their OpenMP counterparts by factors of 2x for LULESH, 1.6x for SSCA#2, and 4.8x for CLOMP.