7 research outputs found
Symbolic Crosschecking of Data-Parallel Floating Point Code
In this thesis we present a symbolic execution-based technique for cross-checking programs
accelerated using SIMD or OpenCL against an unaccelerated version, as well as a technique for
detecting data races in OpenCL programs. Our techniques are implemented in KLEE-CL, a
symbolic execution engine based on KLEE that supports symbolic reasoning on the equivalence
between expressions involving both integer and floating-point operations.
While the current generation of constraint solvers provide good support for integer arithmetic,
there is little support available for floating-point arithmetic, due to the complexity inherent
in such computations. The key insight behind our approach is that floating-point values are
only reliably equal if they are essentially built by the same operations. This allows us to use
an algorithm based on symbolic expression matching augmented with canonicalisation rules to
determine path equivalence.
Under symbolic execution, we have to verify equivalence along every feasible control-flow
path. We reduce the branching factor of this process by aggressively merging conditionals,
if-converting branches into select operations via an aggressive phi-node folding transformation.
To support the Intel Streaming SIMD Extension (SSE) instruction set, we lower SSE instructions
to equivalent generic vector operations, which in turn are interpreted in terms of primitive
integer and floating-point operations.
To support OpenCL programs, we symbolically model the OpenCL environment using an
OpenCL runtime library targeted to symbolic execution. We detect data races by keeping
track of all memory accesses using a memory log, and reporting a race whenever we detect that
two accesses conflict. By representing the memory log symbolically, we are also able to detect
races associated with symbolically indexed accesses of memory objects.
We used KLEE-CL to find a number of issues in a variety of open source projects that use SSE
and OpenCL, including mismatches between implementations, memory errors, race conditions
and compiler bugs
Engineering a static verification tool for GPU kernels
We report on practical experiences over the last 2.5 years related to the engineering of GPUVerify, a static verification tool for OpenCL and CUDA GPU kernels, plotting the progress of GPUVerify from a prototype to a fully functional and relatively efficient analysis tool. Our hope is that this experience report will serve the verification community by helping to inform future tooling efforts. © 2014 Springer International Publishing
Simulation of a continuum tumor model using distributed computing.
Mathematical modeling aims to provide a theoretical framework for understanding tissue dynamics and for establishing treatment response for diseased tissues, such as tumors. Previously published continuum models have successfully represented idealized two-dimensional and three-dimensional tissue for short periods of time. A recently published continuum model of cancer increases model complexity and describes three-dimensional tissue that, due to the required complexity of the geometric multigrid solver, can only be feasibly applied to millimeter-scale simulations. Furthermore, the computational cost for such models has hindered their application in the laboratory and in the clinic. With computational demands greatly outpacing current openMP-based approaches on single-CPU-socket machines, higher performance solvers for large-scale tissue models remain a critical need. In this thesis, preliminary results of a CUDA and CUDA-MPI based parallelization applied to a tissue model are presented, with significant speedups seen in solution calculation for an initial time step. With further access to larger distributed computing, these parallel frameworks could potentially scale to simulate large-scale tissues