FPChecker: Detecting FloatingPoint Exceptions in GPU Applications Floatingpoint arithmetic is widely used in applications from several fields including scientific computing, machine learning, graphics, and finance. Many of these applications are rapidly adopting the use of GPUs to speedup computations. GPUs, however, have limited support to detect floatingpoint exceptions, which hinders the development of reliable applications in GPUbased systems. We present FPCHECKER, the first tool to automatically detect floatingpoint exceptions in GPU applications. FPCHECKER uses the clangLLVM compiler to instrument GPU kernels and to detect exceptions at runtime. Once an exception is detected, it reports to the programmer the code location of the exception as well as other useful information. The programmer can then use this report to avoid the exception, e.g., by modifying the application algorithm or changing the input. We present the design of FPCHECKER, an evaluation of the overhead of the tool, and a realworld case scenario on which the tool is used to identify a hidden exception. The slowdown of FPCHECKER is moderate and the code is publicly available as open source.

A general purpose contention manager for software transactions on the GPU Abstract   The Graphics Processing Unit (GPU) is now used extensively for general purpose GPU programming (GPGPU), allowing for greater exploitation of the multicore model across many application domains. This is particularly true in cloudedgefog computing, where multiple GPU enabled servers support many different end user services. This move away from the naturally parallel domain of graphics can incur significant performance issues. Unlike the CPU, code that is hindered from execution due to blockingwaiting on the GPU can affect thousands of threads, rendering the advantages of a GPU irrelevant and reducing a highly parralel environemnt down to a serial one in the worst case. In this paper we present a solution that minimises blockingwaiting in GPGPU computing using a contention manager that offsets memory conflicts across threads through thread reordering. We consider conflicts of memory not only to avoid corruption (standard for transactional memory) but also in the semantic layer of application logic (e.g., enforcing ordering to ensure money drawn from bank account occurs after all deposits). We demonstrate how our approach is successful across a number of industry benchmarks and compare our approach to the only other related solution. We also demonstrate that our approach is scalable in terms of thread numbers (a key requirement on the GPU). We believe this is the first work of its kind demonstrating a generalised conflict and semantic contention manager suitable for the scale of parralel execution found on a GPU.