Ilmu Telekomunikasi    
   
Daftar Isi
(Sebelumnya) GowallaGPL compatibility (Berikutnya)

GPGPU

General-purpose computing on graphics processing units (General-purpose graphics processing unit, GPGPU, GPGP or less often GP²U) is the utilization of a graphics processing unit (GPU), which typically handles computation only for computer graphics, to perform computation in applications traditionally handled by the central processing unit (CPU).[1][2][3] Any GPU providing a functionally complete set of operations performed on arbitrary bits can compute any computable value. Additionally, the use of multiple graphics cards in one computer, or large numbers of graphics chips, further parallelizes the already parallel nature of graphics processing.[4]

OpenCL is the currently dominant open general-purpose GPU computing language. The dominant proprietary framework is Nvidia's CUDA.[5]

Contents

Programmability

In principle, any boolean function can be built-up from a functionally complete set of logic operators. An early example of general purpose computing with a GPU involved performing additions by using an early stream processor called a blitter to invoke a special sequence of logical operations on bit vectors.[6] Such methods are seldom used today as modern GPUs now include support for more advanced mathematical operations including addition, multiplication, and often certain transcendental functions.

The programmability of the pipelines have trended[clarification needed] according to Microsoft’s DirectX specification,[citation needed] with DirectX 8 introducing Shader Model 1.1, DirectX 8.1 Pixel Shader Models 1.2, 1.3 and 1.4, and DirectX 9 defining Shader Model 2.x and 3.0. Each shader model increased the programming model flexibilities and capabilities, ensuring the conforming hardware follows suit. The DirectX 10 specification introduces Shader Model 4.0 which unifies the programming specification for vertex, geometry (“Geometry Shaders” are new to DirectX 10) and fragment processing allowing for a better fit for unified shader hardware, thus providing one computational pool of programmable resource.[vague] Common formats are:

  • 8 bits per pixel – Sometimes palette mode, where each value is an index in a table with the real color value specified in one of the other formats. Sometimes three bits for red, three bits for green, and two bits for blue.
  • 16 bits per pixel – Usually allocated as five bits for red, six bits for green, and five bits for blue.
  • 24 bits per pixel – eight bits for each of red, green, and blue
  • 32 bits per pixel – eight bits for each of red, green, blue, and alpha (transparence)

For early fixed-function or limited programmability graphics (i.e. up to and including DirectX 8.1-compliant GPUs) this was sufficient because this is also the representation used in displays. This representation does have certain limitations, however. Given sufficient graphics processing power even graphics programmers would like to use better formats, such as floating point data formats, to obtain effects such as high dynamic range imaging. Many GPGPU applications require floating point accuracy, which came with graphics cards conforming to the DirectX 9 specification.

DirectX 9 Shader Model 2.x suggested the support of two precision types: full and partial precision. Full precision support could either be FP32 or FP24 (floating point 32- or 24-bit per component) or greater, while partial precision was FP16. ATI’s R300 series of GPUs supported FP24 precision only in the programmable fragment pipeline (although FP32 was supported in the vertex processors) while Nvidia’s NV30 series supported both FP16 and FP32; other vendors such as S3 Graphics and XGI supported a mixture of formats up to FP24.

Shader Model 3.0 altered the specification, increasing full precision requirements to a minimum of FP32 support in the fragment pipeline. ATI’s Shader Model 3.0 compliant R5xx generation (Radeon X1000 series) supports just FP32 throughout the pipeline while Nvidia’s NV4x and G7x series continued to support both FP32 full precision and FP16 partial precisions. Although not stipulated by Shader Model 3.0, both ATI and Nvidia’s Shader Model 3.0 GPUs introduced support for blendable FP16 render targets, more easily facilitating the support for High Dynamic Range Rendering.[citation needed]

The implementations of floating point on Nvidia GPUs are mostly IEEE compliant; however, this is not true across all vendors.[7] This has implications for correctness which are considered important to some scientific applications. While 64-bit floating point values (double precision float) are commonly available on CPUs, these are not universally supported on GPUs; some GPU architectures sacrifice IEEE compliance while others lack double-precision altogether. There have been efforts to emulate double-precision floating point values on GPUs; however, the speed tradeoff negates any benefit to offloading the computation onto the GPU in the first place.[8]

Most operations on the GPU operate in a vectorized fashion: one operation can be performed on up to four values at once. For instance, if one color <R1, G1, B1> is to be modulated by another color <R2, G2, B2>, the GPU can produce the resulting color <R1*R2, G1*G2, B1*B2> in one operation. This functionality is useful in graphics because almost every basic data type is a vector (either 2-, 3-, or 4-dimensional). Examples include vertices, colors, normal vectors, and texture coordinates. Many other applications can put this to good use, and because of their higher performance, vector instructions (SIMD) have long been available on CPUs.

In 2002, James Fung et al developed OpenVIDIA at University of Toronto, and demonstrated this work, which was later published in 2003, 2004, and 2005,[9] in conjunction with a collaboration between University of Toronto and nVIDIA. In November 2006 Nvidia launched CUDA, an SDK and API that allows using the C programming language to code algorithms for execution on Geforce 8 series GPUs. OpenCL, an open standard defined by the Khronos Group[10] provides a cross-platform GPGPU platform that additionally supports data parallel compute on CPUs. OpenCL is actively supported on Intel, AMD, Nvidia and ARM platforms. GPGPU compared, for example, to traditional floating point accelerators such as the 64-bit CSX700 boards from ClearSpeed that are used in today's supercomputers, current top-end GPUs from AMD and Nvidia emphasize single-precision (32-bit) computation; double-precision (64-bit) computation executes more slowly.[citation needed]

GPGPU programming concepts

GPUs are designed specifically for graphics and thus are very restrictive in operations and programming. Due to their design, GPUs are only effective for problems that can be solved using stream processing and the hardware can only be used in certain ways.

Stream processing

GPUs can only process independent vertices and fragments, but can process many of them in parallel. This is especially effective when the programmer wants to process many vertices or fragments in the same way. In this sense, GPUs are stream processors – processors that can operate in parallel by running one kernel on many records in a stream at once.

A stream is simply a set of records that require similar computation. Streams provide data parallelism. Kernels are the functions that are applied to each element in the stream. In the GPUs, vertices and fragments are the elements in streams and vertex and fragment shaders are the kernels to be run on them. Since GPUs process elements independently there is no way to have shared or static data. For each element we can only read from the input, perform operations on it, and write to the output. It is permissible to have multiple inputs and multiple outputs, but never a piece of memory that is both readable and writable.[vague]

Arithmetic intensity is defined as the number of operations performed per word of memory transferred. It is important for GPGPU applications to have high arithmetic intensity else the memory access latency will limit computational speedup.[11]

Ideal GPGPU applications have large data sets, high parallelism, and minimal dependency between data elements.

GPU programming concepts

Computational resources

There are a variety of computational resources available on the GPU:

  • Programmable processors – Vertex, primitive, and fragment pipelines allow programmer to perform kernel on streams of data
  • Rasterizer – creates fragments and interpolates per-vertex constants such as texture coordinates and color
  • Texture Unit – read only memory interface
  • Framebuffer – write only memory interface

In fact, the programmer can substitute a write only texture for output instead of the framebuffer. This is accomplished either through Render to Texture (RTT), Render-To-Backbuffer-Copy-To-Texture (RTBCTT), or the more recent stream-out.

Textures as stream

The most common form for a stream to take in GPGPU is a 2D grid because this fits naturally with the rendering model built into GPUs. Many computations naturally map into grids: matrix algebra, image processing, physically based simulation, and so on.

Since textures are used as memory, texture lookups are then used as memory reads. Certain operations can be done automatically by the GPU because of this.

Kernels

Kernels can be thought of as the body of loops. For example, a programmer operating on a grid on the CPU might have code that looks like this:

// Input and output grids have 10000 x 10000 or 100 million elements. void transform_10k_by_10k_grid(float in[10000][10000], float *out[10000][10000]){  for(int x = 0; x < 10000; x++)  { for(int y = 0; y < 10000; y++) {  // The next line is executed 100 million times  *out[x][y] = do_some_hard_work(in[x][y]); }  }}

On the GPU, the programmer only specifies the body of the loop as the kernel and what data to loop over by invoking geometry processing.

Flow control

In sequential code it is possible to control the flow of the program using if-then-else statements and various forms of loops. Such flow control structures have only recently been added to GPUs.[12] Conditional writes could be accomplished using a properly crafted series of arithmetic/bit operations, but looping and conditional branching were not possible.

Recent GPUs allow branching, but usually with a performance penalty. Branching should generally be avoided in inner loops, whether in CPU or GPU code, and various methods, such as static branch resolution, pre-computation, predication, loop splitting,[13] and Z-cull[14] can be used to achieve branching when hardware support does not exist.

GPU methods

Map

The map operation simply applies the given function (the kernel) to every element in the stream. A simple example is multiplying each value in the stream by a constant (increasing the brightness of an image). The map operation is simple to implement on the GPU. The programmer generates a fragment for each pixel on screen and applies a fragment program to each one. The result stream of the same size is stored in the output buffer.

Reduce

Some computations require calculating a smaller stream (possibly a stream of only 1 element) from a larger stream. This is called a reduction of the stream. Generally a reduction can be accomplished in multiple steps. The results from the prior step are used as the input for the current step and the range over which the operation is applied is reduced until only one stream element remains.

Stream filtering

Stream filtering is essentially a non-uniform reduction. Filtering involves removing items from the stream based on some criteria.

Scatter

The scatter operation is most naturally defined on the vertex processor. The vertex processor is able to adjust the position of the vertex, which allows the programmer to control where information is deposited on the grid. Other extensions are also possible, such as controlling how large an area the vertex affects.

The fragment processor cannot perform a direct scatter operation because the location of each fragment on the grid is fixed at the time of the fragment's creation and cannot be altered by the programmer. However, a logical scatter operation may sometimes be recast or implemented with an additional gather step. A scatter implementation would first emit both an output value and an output address. An immediately following gather operation uses address comparisons to see whether the output value maps to the current output slot.

Gather

The fragment processor is able to read textures in a random access fashion, so it can gather information from any grid cell, or multiple grid cells, as desired.[vague]

Sort

The sort operation transforms an unordered set of elements into an ordered set of elements. The most common implementation on GPUs is using sorting networks.[14]

Search

The search operation allows the programmer to find a particular element within the stream, or possibly find neighbors of a specified element. The GPU is not used to speed up the search for an individual element, but instead is used to run multiple searches in parallel.[citation needed]

Data structures

A variety of data structures can be represented on the GPU:

Applications

Research: Higher Education and Supercomputing

Computational Chemistry and Biology

Bioinfomatics
ApplicationDescriptionSupported FeaturesExpected Speed Up†GPU‡Multi-GPU SupportRelease Status
BarraCUDASequence mapping softwareAlignment of short sequencing reads6-10xT 2075, 2090, K10, K20, K20XYesAvailable now Version 0.6.2
CUDASW++Open source software for Smith-Waterman protein database searches on GPUsParallel search of Smith-Waterman database10-50xT 2075, 2090, K10, K20, K20XYesAvailable now Version 2.0.8
CUSHAWParallelized short read alignerParallel, accurate long read aligner - gapped alignments to large genomes10xT 2075, 2090, K10, K20, K20XYesAvailable now Version 1.0.40
GPU-BLASTLocal search with fast k-tuple heuristicProtein alignment according to blastp, multi cpu threads3-4xT 2075, 2090, K10, K20, K20XSingle onlyAvailable now Version 2.2.26
GPU-HMMERParallelized local and global search with profile Hidden Markov modelsParallel local and global search of Hidden Markov Models60-100xT 2075, 2090, K10, K20, K20XYesAvailable now Version 2.3.2
mCUDA-MEMEUltrafast scalable motif discovery algorithm based on MEMEScalable motif discovery algorithm based on MEME4-10xT 2075, 2090, K10, K20, K20XYesAvailable now Version 3.0.12
SeqNFindA GPU Accelerated Sequence Analysis ToolsetReference assembly, blast, smith-waterman, hmm, de novo assembly400xT 2075, 2090, K10, K20, K20XYesAvailable now
UGENEOpensource Smith-Waterman for SSE/CUDA, Suffix array based repeats finder and dotplotFast short read alignment6-8xT 2075, 2090, K10, K20, K20XYesAvailable now Version 1.11
WideLMFits numerous linear models to a fixed design and responseParallel linear regression on multiple similarly-shaped models150xT 2075, 2090, K10, K20, K20XYesAvailable now Version 0.1-1
Molecular Dynamics
ApplicationDescriptionSupported FeaturesExpected Speed Up†GPU ‡Multi-GPU SupportRelease Status
AbaloneModels molecular dynamics of biopolymers for simulations of proteins, DNA and ligandsSimulations (on 1060 GPU)4-29xT 2075, 2090, K10, K20, K20XSingle OnlyAvailable now Version 1.8.48
ACEMDGPU simulation of molecular mechanics force fields, implicit and explicit solventWritten for use on GPUs160 ns/day GPU version onlyT 2075, 2090, K10, K20, K20XYesAvailable now
AMBERSuite of programs to simulate molecular dynamics on biomoleculePMEMD: explicit and implicit solvent89.44 ns/day JAC NVET 2075, 2090, K10, K20, K20XYesAvailable now Version 12 + bugfix9
DL-POLYSimulate macromolecules, polymers, ionic systems, etc on a distributed memory parallel computerTwo-body forces, Link-cell pairs, Ewald SPME forces, Shake VV4xT 2075, 2090, K10, K20, K20XYesAvailable now, Version4.0 Source only
CHARMMMD package to simulate molecular dynamics on biomolecule.Implicit (5x), Explicit (2x) Solvent via OpenMMTBDT 2075, 2090, K10, K20, K20XYesIn Development Q4/12
GROMACSSimulation of biochemical molecules with complicated bond interactionsImplicit (5x), Explicit(2x) solvent165 ns/Day DHFRT 2075, 2090, K10, K20, K20XSingle onlyAvailable now Version 4.6 in Q4/12
HOOMD-BlueParticle dynamics package written grounds up for GPUsWritten for GPUs2xT 2075, 2090, K10, K20, K20XYesAvailable now
LAMMPSClassical molecular dynamics packageLennard-Jones, Morse, Buckingham, CHARMM, Tabulated, Course grain SDK, Anisotropic Gay-Bern, RE-squared, “Hybrid”combinations3-18xT 2075, 2090, K10, K20, K20XYesAvailable now
NAMDDesigned for high-performance simulation of large molecular systems100M atom capable6.44 ns/days STMV 585x 2050sT 2075, 2090, K10, K20, K20XYesAvailable now, Version 2.9
OpenMMLibrary and application for molecular dynamics for HPC with GPUsImplicit and explicit solvent, custom forcesImplicit: 127-213 ns/day; Explicit: 18-55 ns/day DHFRT 2075, 2090, K10, K20, K20XYesAvailable now Version 4.1.1

†Expected speedups are highly dependent on system configuration. GPU performance compared against multi-core x86 CPU socket. GPU performance benchmarked on GPU supported features and may be a kernel to kernel performance comparison. For details on configuration used, view application website.Speedups as per NIVDIA in house testing or ISV’s documentation .

‡ Q=Quadro GPU, T=Tesla GPU. NVIDIA recommended GPUs for this application. Please check with developer / ISV to obtain certification information.

The following are some of the areas where GPUs have been used for general purpose computing:

See also

  • OpenMP
  • OpenHMPP[34]
  • Graphics processing unit
    • Perbandingan -- ATI graphics processing units
    • Perbandingan -- Nvidia graphics processing units
    • Graphics pipeline
    • Graphics card
  • Stream processing
  • Mark Harris founder of GPGPU.org, coined the term "GPGPU"
  • Physics engine is a computer program that simulates Newtonian physics, on CPU, GPU or physics processing unit (PPU)
    • Physics processing unit (PPU)
  • Havok Physics, FX, commercial physics engine middleware SDK for computer and video games
  • PhysX SDK, commercial realtime physics engine middleware SDK developed by AGEIA
    • AGEIA also designed a dedicated physics processing unit expansion card designed to accelerate the PhysX SDK
  • GPU programming libraries/layers:
    • Close to Metal, now called Stream, AMD/ATI's GPGPU technology for ATI Radeon-based GPUs
    • Compute Unified Device Architecture (CUDA), Nvidia's GPGPU technology for their GeForce-, Quadro- and Tesla-based GPUs
    • Lib Sh, a GPGPU library for C++
    • BrookGPU is the Stanford University Graphics group's compiler and runtime implementation of the Brook stream programming language
    • Open Computing Language (OpenCL) cross-platform GPGPU language for GPUs (AMD/ATI/Nvidia) and general purpose CPUs
      Apple's GPU utilization introduced in Mac OS X v10.6 ‘Snow Leopard’
    • C++ AMP C++ Accelerated Massive Parallelism accelerates execution of C++ code by taking advantage of data-parallel hardware such as a graphics processing unit (GPU) on a discrete graphics card.
    • DirectCompute Microsoft's GPU computing API - Initially released with the DirectX 11 API
    • Renderscript Google's GPU computing and rendering API for Android
  • Audio processing unit (DSP can also be done via GPU with GPGPU technology)
  • Daftar/Tabel -- emerging technologies
  • Larrabee (microarchitecture)

References

  1. ^ Fung etal, "Mediated Reality Using Computer Graphics Hardware for Computer Vision", Proceedings of the International Symposium on Wearable Computing 2002 (ISWC2002), Seattle, Washington, USA, 7-10 Oct 2002, pp. 83--89.
  2. ^ An EyeTap video-based featureless projective motion estimation assisted by gyroscopic tracking for wearable computer mediated reality, ACM Personal and Ubiquitous Computing published by Springer Verlag, Vol.7, Iss. 3, 2003.
  3. ^ "Computer Vision Signal Processing on Graphics Processing Units", Proceedings of the IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP 2004): Montreal, Quebec, Canada, 17–21 May 2004, pp. V-93 - V-96
  4. ^ "Using Multiple Graphics Cards as a General Purpose Parallel Computer: Applications to Computer Vision", Proceedings of the 17th International Conference on Pattern Recognition (ICPR2004), Cambridge, United Kingdom, 23–26 August 2004, volume 1, pages 805-808.
  5. ^ http://www.hpcwire.com/hpcwire/2012-0 2-28/opencl_gains_ground_on_cuda.html "As the two major programming frameworks for GPU computing, OpenCL and CUDA have been competing for mindshare in the developer community for the past few years."
  6. ^ Hull, Gerald (December 1987). "LIFE". Amazing Computing 2 (12): 81–84. http://www.archive.org/stream/amazing -computing-magazine-1987-12/Amazing_C omputing_Vol_02_12_1987_Dec#page/n81/ mode/2up.
  7. ^ Mapping computational concepts to GPUs: Mark Harris. Mapping computational concepts to GPUs. In ACM SIGGRAPH 2005 Courses (Los Angeles, California, 31 July – 4 August 2005). J. Fujii, Ed. SIGGRAPH '05. ACM Press, New York, NY, 50.
  8. ^ Double precision on GPUs (Proceedings of ASIM 2005): Dominik Goddeke, Robert Strzodka, and Stefan Turek. Accelerating Double Precision (FEM) Simulations with (GPUs). Proceedings of ASIM 2005 – 18th Symposium on Simulation Technique, 2005.
  9. ^ James Fung, Steve Mann, Chris Aimone, "OpenVIDIA: Parallel GPU Computer Vision", Proceedings of the ACM Multimedia 2005, Singapore, 6-11 Nov. 2005, pages 849-852
  10. ^ [1]:OpenCL at the Khronos Group
  11. ^ Asanovic, K., Bodik, R., Demmel, J., Keaveny, T., Keutzer, K., Kubiatowicz, J., Morgan, N., Patterson, D., Sen, K., Wawrzynek, J., Wessel, D., Yelick, K.: A view of the parallel computing landscape. Commun. ACM 52(10) (2009) 56–67
  12. ^ GPU Gems - Chapter 34, GPU Flow-Control Idioms
  13. ^ [2]: Future Chips. "Tutorial on removing branches", 2011
  14. ^ a b GPGPU survey paper: John D. Owens, David Luebke, Naga Govindaraju, Mark Harris, Jens Krüger, Aaron E. Lefohn, and Tim Purcell. "A Survey of General-Purpose Computation on Graphics Hardware". Computer Graphics Forum, volume 26, number 1, 2007, pp. 80-113.
  15. ^ "MATLAB Adds GPGPU Support". 20 September 2010. http://www.hpcwire.com/features/MATLA B-Adds-GPGPU-Support-103307084.html.
  16. ^ Fast k nearest neighbor search using GPU. In Proceedings of the CVPR Workshop on Computer Vision on GPU, Anchorage, Alaska, USA, June 2008. V. Garcia and E. Debreuve and M. Barlaud.
  17. ^ Wilson, Ron (3 September 2009). "DSP brings you a high-definition moon walk". EDN. Retrieved 3 September 2009. "Lowry is reportedly using Nvidia Tesla GPUs (graphics-processing units) programmed in the company's CUDA (Compute Unified Device Architecture) to implement the algorithms. Nvidia claims that the GPUs are approximately two orders of magnitude faster than CPU computations, reducing the processing time to less than one minute per frame." 
  18. ^ E. Alerstam, T. Svensson & S. Andersson-Engels, "Parallel computing with graphics processing units for high speed Monte Carlo simulation of photon migration" [3], J. Biomedical Optics 13, 060504 (2008) [4]
  19. ^ http://www.astro.lu.se/compugpu2010/
  20. ^ Schatz, M.C., Trapnell, C., Delcher, A.L., Varshney, A. (2007) High-throughput sequence alignment using Graphics Processing Units. BMC Bioinformatics 8:474.
  21. ^ Svetlin A. Manavski, Giorgio Valle (2008). "CUDA compatible GPU cards as efficient hardware accelerators for Smith-Waterman sequence alignment url=http://www.biomedcentral.com/1471-210 5/9/S2/S10". BMC Bioinformatics 9 (Suppl. 2): S10.
  22. ^ GPU-based Sorting in PostgreSQL Naju Mancheril, School of Computer Science - Carnegie Mellon University
  23. ^ AES on SM3.0 compliant GPUs. Owen Harrison, John Waldron, AES Encryption Implementation and Analysis on Commodity Graphics Processing Units. In proceedings of CHES 2007.
  24. ^ AES and modes of operations on SM4.0 compliant GPUs. Owen Harrison, John Waldron, Practical Symmetric Key Cryptography on Modern Graphics Hardware. In proceedings of USENIX Security 2008.
  25. ^ RSA on SM4.0 compliant GPUs. Owen Harrison, John Waldron, Efficient Acceleration of Asymmetric Cryptography on Graphics Hardware. In proceedings of AfricaCrypt 2009.
  26. ^ "Teraflop Troubles: The Power of Graphics Processing Units May Threaten the World's Password Security System". Georgia Tech Research Institute. http://www.gtri.gatech.edu/casestudy/ Teraflop-Troubles-Power-Graphics-Proc essing-Units-GPUs-Password-Security-S ystem. Retrieved 7 November 2010.
  27. ^ "Want to deter hackers? Make your password longer". MSNBC. 19 August 2010. Retrieved 7 November 2010. 
  28. ^ Lerner, Larry (9 April 2009). "Viewpoint: Mass GPUs, not CPUs for EDA simulations". EE Times. Retrieved 3 May 2009 
  29. ^ "W2500 ADS Transient Convolution GT". http://www.home.agilent.com/agilent/r edirector.jspx?action=ref&cname=P RODUCT&ckey=1582838&cc=US& ;lc=eng&cmpid=29280. "accelerates signal integrity simulations on workstations that have NVIDIA Compute Unified Device Architecture (CUDA)-based Graphics Processing Units (GPU)"
  30. ^ GrAVity: A Massively Parallel Antivirus Engine. Giorgos Vasiliadis and Sotiris Ioannidis, GrAVity: A Massively Parallel Antivirus Engine. In proceedings of RAID 2010.
  31. ^ "Kaspersky Lab utilizes NVIDIA technologies to enhance protection". 14 December 2009. "During internal testing, the Tesla S1070 demonstrated a 360-fold increase in the speed of the similarity-defining algorithm when compared to the popular Intel Core 2 Duo central processor running at a clock speed of 2.6 GHz." 
  32. ^ Gnort: High Performance Network Intrusion Detection Using Graphics Processors. Giorgos Vasiliadis et al, Gnort: High Performance Network Intrusion Detection Using Graphics Processors. In proceedings of RAID 2008.
  33. ^ Regular Expression Matching on Graphics Hardware for Intrusion Detection. Giorgos Vasiliadis et al, Regular Expression Matching on Graphics Hardware for Intrusion Detection. In proceedings of RAID 2009.
  34. ^ Open HMPP

External links

(Sebelumnya) GowallaGPL compatibility (Berikutnya)