621 research outputs found
Benchmarking the cost of thread divergence in CUDA
All modern processors include a set of vector instructions. While this gives
a tremendous boost to the performance, it requires a vectorized code that can
take advantage of such instructions. As an ideal vectorization is hard to
achieve in practice, one has to decide when different instructions may be
applied to different elements of the vector operand. This is especially
important in implicit vectorization as in NVIDIA CUDA Single Instruction
Multiple Threads (SIMT) model, where the vectorization details are hidden from
the programmer. In order to assess the costs incurred by incompletely
vectorized code, we have developed a micro-benchmark that measures the
characteristics of the CUDA thread divergence model on different architectures
focusing on the loops performance
Using Graph Properties to Speed-up GPU-based Graph Traversal: A Model-driven Approach
While it is well-known and acknowledged that the performance of graph
algorithms is heavily dependent on the input data, there has been surprisingly
little research to quantify and predict the impact the graph structure has on
performance. Parallel graph algorithms, running on many-core systems such as
GPUs, are no exception: most research has focused on how to efficiently
implement and tune different graph operations on a specific GPU. However, the
performance impact of the input graph has only been taken into account
indirectly as a result of the graphs used to benchmark the system.
In this work, we present a case study investigating how to use the properties
of the input graph to improve the performance of the breadth-first search (BFS)
graph traversal. To do so, we first study the performance variation of 15
different BFS implementations across 248 graphs. Using this performance data,
we show that significant speed-up can be achieved by combining the best
implementation for each level of the traversal. To make use of this
data-dependent optimization, we must correctly predict the relative performance
of algorithms per graph level, and enable dynamic switching to the optimal
algorithm for each level at runtime.
We use the collected performance data to train a binary decision tree, to
enable high-accuracy predictions and fast switching. We demonstrate empirically
that our decision tree is both fast enough to allow dynamic switching between
implementations, without noticeable overhead, and accurate enough in its
prediction to enable significant BFS speedup. We conclude that our model-driven
approach (1) enables BFS to outperform state of the art GPU algorithms, and (2)
can be adapted for other BFS variants, other algorithms, or more specific
datasets
High-speed detection of emergent market clustering via an unsupervised parallel genetic algorithm
We implement a master-slave parallel genetic algorithm (PGA) with a bespoke
log-likelihood fitness function to identify emergent clusters within price
evolutions. We use graphics processing units (GPUs) to implement a PGA and
visualise the results using disjoint minimal spanning trees (MSTs). We
demonstrate that our GPU PGA, implemented on a commercially available general
purpose GPU, is able to recover stock clusters in sub-second speed, based on a
subset of stocks in the South African market. This represents a pragmatic
choice for low-cost, scalable parallel computing and is significantly faster
than a prototype serial implementation in an optimised C-based
fourth-generation programming language, although the results are not directly
comparable due to compiler differences. Combined with fast online intraday
correlation matrix estimation from high frequency data for cluster
identification, the proposed implementation offers cost-effective,
near-real-time risk assessment for financial practitioners.Comment: 10 pages, 5 figures, 4 tables, More thorough discussion of
implementatio
MaxSSmap: A GPU program for mapping divergent short reads to genomes with the maximum scoring subsequence
Programs based on hash tables and Burrows-Wheeler are very fast for mapping
short reads to genomes but have low accuracy in the presence of mismatches and
gaps. Such reads can be aligned accurately with the Smith-Waterman algorithm
but it can take hours and days to map millions of reads even for bacteria
genomes. We introduce a GPU program called MaxSSmap with the aim of achieving
comparable accuracy to Smith-Waterman but with faster runtimes. Similar to most
programs MaxSSmap identifies a local region of the genome followed by exact
alignment. Instead of using hash tables or Burrows-Wheeler in the first part,
MaxSSmap calculates maximum scoring subsequence score between the read and
disjoint fragments of the genome in parallel on a GPU and selects the highest
scoring fragment for exact alignment. We evaluate MaxSSmap's accuracy and
runtime when mapping simulated Illumina E.coli and human chromosome one reads
of different lengths and 10\% to 30\% mismatches with gaps to the E.coli genome
and human chromosome one. We also demonstrate applications on real data by
mapping ancient horse DNA reads to modern genomes and unmapped paired reads
from NA12878 in 1000 genomes. We show that MaxSSmap attains comparable high
accuracy and low error to fast Smith-Waterman programs yet has much lower
runtimes. We show that MaxSSmap can map reads rejected by BWA and NextGenMap
with high accuracy and low error much faster than if Smith-Waterman were used.
On short read lengths of 36 and 51 both MaxSSmap and Smith-Waterman have lower
accuracy compared to at higher lengths. On real data MaxSSmap produces many
alignments with high score and mapping quality that are not given by NextGenMap
and BWA. The MaxSSmap source code is freely available from
http://www.cs.njit.edu/usman/MaxSSmap
GPU in Physics Computation: Case Geant4 Navigation
General purpose computing on graphic processing units (GPU) is a potential
method of speeding up scientific computation with low cost and high energy
efficiency. We experimented with the particle physics simulation toolkit Geant4
used at CERN to benchmark its geometry navigation functionality on a GPU. The
goal was to find out whether Geant4 physics simulations could benefit from GPU
acceleration and how difficult it is to modify Geant4 code to run in a GPU.
We ported selected parts of Geant4 code to C99 & CUDA and implemented a
simple gamma physics simulation utilizing this code to measure efficiency. The
performance of the program was tested by running it on two different platforms:
NVIDIA GeForce 470 GTX GPU and a 12-core AMD CPU system. Our conclusion was
that GPUs can be a competitive alternate for multi-core computers but porting
existing software in an efficient way is challenging
Exposing errors related to weak memory in GPU applications
© 2016 ACM.We present the systematic design of a testing environment that uses stressing and fuzzing to reveal errors in GPU applications that arise due to weak memory effects. We evaluate our approach on seven GPUS spanning three NVIDIA architectures, across ten CUDA applications that use fine-grained concurrency. Our results show that applications that rarely or never exhibit errors related to weak memory when executed natively can readily exhibit these errors when executed in our testing environment. Our testing environment also provides a means to help identify the root causes of such errors, and automatically suggests how to insert fences that harden an application against weak memory bugs. To understand the cost of GPU fences, we benchmark applications with fences provided by the hardening strategy as well as a more conservative, sound fencing strategy
Architecture-Aware Optimization on a 1600-core Graphics Processor
The graphics processing unit (GPU) continues to
make significant strides as an accelerator in commodity cluster
computing for high-performance computing (HPC). For example,
three of the top five fastest supercomputers in the world, as
ranked by the TOP500, employ GPUs as accelerators. Despite this
increasing interest in GPUs, however, optimizing the performance
of a GPU-accelerated compute node requires deep technical
knowledge of the underlying architecture. Although significant
literature exists on how to optimize GPU performance on the
more mature NVIDIA CUDA architecture, the converse is true
for OpenCL on the AMD GPU.
Consequently, we present and evaluate architecture-aware optimizations
for the AMD GPU. The most prominent optimizations
include (i) explicit use of registers, (ii) use of vector types, (iii)
removal of branches, and (iv) use of image memory for global data.
We demonstrate the efficacy of our AMD GPU optimizations by
applying each optimization in isolation as well as in concert to
a large-scale, molecular modeling application called GEM. Via
these AMD-specific GPU optimizations, the AMD Radeon HD
5870 GPU delivers 65% better performance than with the wellknown
NVIDIA-specific optimizations
- …