Abstract

The work proposes an approach to programming parallel architectures without using parallel programming interfaces (APIs) and parallel directives for various numerical simulation and computer graphics applications. The primary goal of this approach is to resolve the fundamental conflict between cross-platform compatibility and hardware acceleration when developing high-performance programs. This conflict is resolved through the automation of the development process: algorithmic descriptions in C++, free from any specific parallel constructs, are automatically translated into the implementation of the same algorithm, and a realization is generated on an existing parallel architecture programming API (C++ translates to SPIR-V for GPUs, and vector instructions for CPUs). Furthermore, if specific hardware acceleration is required, the programmer can replace individual parts of the generated code by substituting kernels and virtual functions in the generated code. Such substitution allows for code regeneration without losing usermade changes tailored to a particular hardware platform. The developed system operates as a white box, allowing the programmer to read and debug the generated code as if it were written manually. This enables us to easily distinguish translator errors from user errors and, moreover, does not create dependencies on the developed system in projects. The generated code can always be manually rewritten when necessary. The application of the developed technology is considered using the example of one of the most complex and inconvenient problems for GPUs — parallel algorithms for constructing trees.

Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call