Changes

Jump to: navigation, search

GPU

211 bytes added, 22:42, 7 August 2019
GPGPU
=GPGPU=
The traditional job of a GPU is to take the x,y,z coordinates of triangles, and map these triangles to screen-space through a matrix multiplication. And as As video game graphics grew more sophisticated, the number of triangles and polygons per scene grew larger. GPUs similarly grew in size to make more sophisticated models, GPUs would create massively parallel architectures behemoths capable of performing billions of transformations hundreds of times per second.
These lists of triangles (as well as their colors, textures, reflectivity, and other attributes), were traditionally specified in a graphical language or API such as DirectX or OpenGL. But video game programmers demanded more and more flexibility from their hardware: such as lighting, transparency, reflections, and particles. This flexibility was granted with full scale programming languages, called vertex shaders or pixel shaders, where graphics programmers can customize the vertex-processing or pixel-processing portions GPU pipelines of their graphical codeold.
Eventually, the fixed-functionality of GPUs disappeared, and GPUs became nothing more than massively parallel general purpose computers. Graphical languages, such as DirectX and OpenGL, still call these capabilities "vertex shaders" or "pixel shaders" for historical purposes. But to properly abstract these general purpose capabilities, modern GPGPU languages have been created.
== NVidia Software overview ==
NVidia CUDA is their general purpose compute framework. CUDA has a C++ compiler based on LLVM / clang, which compiles into an assembly-like language called PTX. NVidia device drivers take PTX and compile that down to the final machine code (called NVidia SASS). NVidia keeps PTX portable between its GPUs, while its SASS assembly language may change from year-to-year as NVidia releases new GPUs. A defining feature of CUDA was the "single source" C++ compiler, the same compiler would work with both CPU host-code and GPU device-code. This meant that the data-structures from the CPU can be shared directly with the GPU code.
* [https://developer.nvidia.com/cuda-zone NVidia CUDA Zone]
== AMD Software Overview ==
AMD's original software stack, called AMDGPU-pro, provides OpenCL 1.2 and 2.0 capabilities on Linux and Windows. However, most of AMD's efforts today is on an experimental framework called ROCm. ROCm is AMD's open source compiler and device driver stack intended for general purpose compute. ROCm supports two languages: HIP (a CUDA-like single-source C++ interface compiler also based on LLVM/clang), and OpenCL 2.0. ROCm only works on Linux machines supporting modern hardware, such as PCIe 3.0 and relatively recent GPUs (such as the Rx 580, and Vega GPUs).
AMD regularly publishes the assembly language details of their architectures. Their "GCN Assembly" changes slightly from generation to generation, but the fundamental principles have remained the same.

Navigation menu