7 research outputs found

    Symbolic crosschecking of data-parallel floating-point code

    Get PDF

    Symbolic Crosschecking of Data-Parallel Floating Point Code

    No full text
    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

    Get PDF
    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.

    Get PDF
    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

    Symbolic Crosschecking of Data-Parallel Floating-Point Code

    No full text
    corecore