Programming
We’re sure, that you have practical experience with the commercially available x86/GPU/ARM operating systems in С/С++ languages. Most likely, you’ve programmed GPU in specialized languages like OpenCL or CUDA. Quite possible, you’ve used specific techniques oriented for particular hardware for improved productivity of your code performance for either universal or graphics processors. As any programmer, you would like to save your time while delving into the hardware and to use languages that you are most comfortable with. And, at the same time, you would like to ‘squeeze’ everything you can from your hardware and to get really fast and/or (depends on the customer requirements) energy-efficient code.
Considering all mentioned above, we, having a clear understanding of difficulty of the work with any new architecture, aim to offer a universal approach to program all types of MALT processors. The approach enables to start working with MALT systems with C/C++ code whether it exists already or has to be written using the examples we offer. Then, in accordance with our recommendations, optimize it and get 100% out of the hardware. We provide a full-featured emulator to easily debug a user code. Along with the emulator there is a profiler for bottlenecks detection and optimization.
Depending of their preferences and requirements to application code optimization z programmer can choose one of the approaches:
– C++ for MALT. It is the most easiest way to start working with MALT. The С++17 standard is maintained to program scalar cores. The operation with the threads is implemented through the C++ constructions: std::thread, std::mutex, etc. MALT is considered a multicore processor, therefore it’s easy to port the existing software and libraries.
– OpenCL for MALT. OpenCL standard is used for operations with scalar and vector MALT cores. The implementation is provided with a library of problem-oriented algorithms that are optimized for MALT. Now it is easier for AMD, NVIDIA, ARM users to switch to MALT.
– MALTCС. Functional NVCC analog from NVIDIA. The personal front end for basic compilers of scalar and vector cores. MALTCC implements the potential of architecture and considerably simplifies program parallelization for target classes.
Let's mention, that a part of programming tools we've talked about is under development, so, please, ask for updated information about tools availability!
C++ for MALT
When using the C++ threads, MALT solutions resemble typical multicore processors. They support language standards right up to C++17. Functions for hardware extensions are located in the malt:: namespace.
The example of C++ for MALT:
|
MALTCC
MALTCC is front end which substantially automate the distribution of the tasks for scalar and vector cores in MALT heterogeneous system. MALTCC enables to greatly simplify the development of target tasks, hiding from a programmer the difficulties of thread synchronization in the asynchronous heterogeneous system. MALTCC is the easiest way of MALT development for programmers who are familiar with SDK NVIDIA® CUDA® and the like.
The example of a program in MALTCC:
NVIDIA® and CUDA® are the registered trademarks of NVIDIA Corporation |
OpenCL for MALT
The OpenCL standard is used for operations scalar and vector MALT cores. The implementation is provided with a library of problem-oriented algorithms that are optimized for MALT. Now it is easier for AMD, NVIDIA, ARM users to switch to MALT.
The example of a program in OpenCL for MALT:
|