
Sparse linear algebra kernels are memory-bound routines, and their performance varies significantly according to the non-null pattern of the sparse matrix operands. The impressive computing power and memory bandwidth of modern massively parallel computing devices encourage researchers to develop sparse linear algebra kernels that can exploit these platforms efficiently. In this sense, a main line of work improves the storage of matrices, aiming to optimize the communication between the memory and the cores. In previous work, the use of a strategy consisting of a delta-encoding with matrix reorderings compressed the indexing data of the matrix, saving storage and communications. This work presents an algorithm to improve the reordering strategy and the resulting compression of the indexing data. The results show that this strategy leads to important storage savings, which can also reduce data movements between the main memory and processors.
Simulating the propagation of acoustic waves is the basis of seismic imaging software, widely used by the industry for locating and detecting new oil basins. Due to their complexity, these simulations require a high computational processing power obtained using GPUs. To fully exploit these devices' computing potential, it is necessary to rightly define the configuration of the number of blocks and threads per block that will be assigned to a given kernel. However, as we show in this paper, this task is challenging since the ideal configuration will vary according to the grid size and the target metric (e.g., performance or energy). In this scenario, this paper evaluates different execution configurations for the Fletcher method, a widely used seismic application. When evaluating sixteen different grid sizes over a distinct set of configurations, we show that rightly choosing the number of blocks and threads per block can deliver up to 2 times more performance and save 18% of energy consumption compared to the standard way the Fletcher method is implemented.
SVD factorization is a fundamental operation to solve problems in chemistry, biology, physics, and engineering. These problems are image processing, data mining, and big data, among others. There are several methods to get SVD factorization. One of these methods involve the use of Householder transformation, so it is possible to parallelize this task. Furthermore, novel computer architectures are oriented to use heterogeneous computing, such as CPUs and GPUs, in order to increase the performance and reduce the energy consumption. In this work, an heterogeneous parallel implementation of SVD based on Householder transformation is presented. Some strategies for matrix partition are presented in order to scale the program in the use of GPU cards. The speedup is increased when several GPU cards are used.
Wildfires are a latent problem worldwide that every year burns thousands of hectares, negatively impacting the environment. To mitigate the damage, there is software to support wildfire analysis. Many of these computational tools are based on different mathematical models, each with its own advantages and disadvantages. Unfortunately, only a few of the software are open source. This work aims to develop an open-source GPU implementation of a mathematical model for the spread of wildfires using CUDA. The algorithm is based on the Method of Lines, allowing it to work with a system of partial differential equations as a dynamical system. We present the advantages of a GPU versus C and an OpenMP multi-threaded CPU implementation for computing the outcome of several scenarios.
Graphics Processing Units (GPUs) harbor immense parallelization capabilities that can significantly accelerate the processing of large datasets. In the context of geophysical modeling, these capabilities can be harnessed to achieve faster execution times without compromising the accuracy of results. This study investigates optimization techniques implemented in a three-dimensional elastic model developed using the DEVITO tool. DEVITO is a Domain-Specific Language for stencil computation, with a focus on seismic inversion problems. DEVITO enables the creation of geophysical models in Python through functions and classes provided by the tool. Using an internal compiler, DEVITO can translate the model written from symbolic equations in Python into a finite difference code in C/C++. The performance of an initial naive implementation is compared against two optimized versions. One of the approaches was named Tiling, and uses the OpenACC tile directive to block the most relevant loop nests of the application. The other optimized approach, Sig Fission, uses the loop fission technique to divide the workload of one of the nests and then applies the tile directive. These optimizations have led to notable improvements, including an increased cache hit rate, enhanced GPU scheduler occupancy, a decrease in the number of registers needed to issue instructions, and a remarkable 40% reduction in execution time. By capitalizing on the parallel computing power of GPUs, this study demonstrates the efficacy of employing optimization strategies, such as loop tiling and loop fission, in geophysical modeling targeting graphics processing units. These techniques pave the way for accelerated data processing, ultimately contributing to improved efficiency and accuracy in computational geophysics, without any loss of integrity in the results.