{'fraction_non_alphanumeric': 0.019230769230769232, 'fraction_numerical': 0.0, 'mean_word_length': 5.357466063348416, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Sparse Matrix Multiplication Using UPC

Partitioned global address space (PGAS) languages, such as Unified Parallel C (UPC) have the promise of being productive. Due to the shared address space view that they provide, they make distributing data and operating on ghost zones relatively easy. Meanwhile, they provide thread-data affinity that can enable locality exploitation. In this paper, we are considering sparse matrix multiplication which is an important operation for many scientific and engineering applications. Recently, several different high-performance algorithms and libraries have been developed for that operation. However, in this work, we were able to take advantage of one of the advanced features provided by UPC, which is the fact that it is a globally addressable memory model. Due to that feature, using UPC in this operation would enable threads to read or write data from any other thread’s memory directly without any inter-process communication as the case with MPI. Our goal is to evaluate the performance of both parallel programming models based on experimental evaluation of sparse matrix multiplication. The comparative analysis will consider conceptual complexity and execution time. It will be shown that UPC which supports distributed shared memory model has a great productivity advantage over message passing when sparse matrix multiplication problems are considered.