Difference between revisions of "GPGPU"

From ArchWiki
Jump to: navigation, search
(Undo revision 151040 by Kralyk (talk))
(Clarifications...)
Line 14: Line 14:
 
In Linux, there are currently two major GPGPU frameworks: [http://en.wikipedia.org/wiki/OpenCL OpenCL] and [http://en.wikipedia.org/wiki/CUDA CUDA]<br><br>
 
In Linux, there are currently two major GPGPU frameworks: [http://en.wikipedia.org/wiki/OpenCL OpenCL] and [http://en.wikipedia.org/wiki/CUDA CUDA]<br><br>
  
 +
==<br>OpenCL==
 +
===Overview===
 +
OpenCL (Open Computing Language) is an open, royalty-free parallel programming framework developed by the Khronos Group, a non-profit consortium.
  
==OpenCL==
+
Distribution of the OpenCL framework generally constists of:
 
+
* Library providing OpenCL API, known as libCL or libOpenCL (<tt>libOpenCL.so</tt> in linux)
===Overview===
+
* OpenCL implementation(s), which contain:
A distribution of the OpenCL framework generally constists of:
+
** Device drivers
* Library's shared object (libOpenCL.so, for detailed information [[#The OpenCL ICD model|see bellow]])
+
** OpenCL/C code compiler
* One or more vendor-specific OpenCL implementation packages
+
** SDK *
* Device drivers
+
* Header files *
 +
''* only needed for development''
  
For the OpenCL shared object, installing {{Package Official|libcl}} should do in general case:
+
===OpenCL libraray===
 +
There are several choices for the libCL. In general case, installing {{Package Official|libcl}} from [extra] should do :
 
  # pacman -S libcl
 
  # pacman -S libcl
 
+
However, there are situations when another libCL distribution is more suitable. The following paragraph covers this more advanced topic.
See [[#Implementations|Implementations]] on how to install implementation and device driver packages.
+
  
 
===The OpenCL ICD model===
 
===The OpenCL ICD model===
 
OpenCL offers the option to install multiple vendor-specific implementations on the same machine at the same time.
 
OpenCL offers the option to install multiple vendor-specific implementations on the same machine at the same time.
 
In practice, this is implemented using the Installable Client Driver (ICD) model.
 
In practice, this is implemented using the Installable Client Driver (ICD) model.
The center point of this model is the ICD Loader (which on linux is in fact the libOpenCL.so object).
+
The center point of this model is the libCL library which in fact imeplements ICD Loader.
 
Through the ICD Loader, an OpenCL application is able to access all platforms and all devices present in the system.
 
Through the ICD Loader, an OpenCL application is able to access all platforms and all devices present in the system.
  
Line 38: Line 42:
 
* unsupported/{{Package AUR|libopencl}} by AMD. Provides up to date version 1.1 of OpenCL. It is currently distributed by AMD under a restrictive license and therefore could not have been pushed into official repo.
 
* unsupported/{{Package AUR|libopencl}} by AMD. Provides up to date version 1.1 of OpenCL. It is currently distributed by AMD under a restrictive license and therefore could not have been pushed into official repo.
  
{{Note|ICD Loader's vendor is mentioned only to indetify each loader, it is otherwise completely irrelevant. ICD loaders are still vendor-agnostic and may be used interchangeably<br>(as long as they are implemented correctly)}}
+
(There is also Intel's libCL, this one is currently not provided in a seperate package though.)
 +
 
 +
{{Note|ICD Loader's vendor is mentioned only to indetify each loader, it is otherwise completely irrelevant. ICD Loaders are vendor-agnostic and may be used interchangeably<br>(as long as they are implemented correctly)}}
  
 
For basic usage, extra/libcl is recommended as it's installation and updating is convenient. For advanced usage, libopencl is recommended.  Both libcl and libopencl should still work with all the implementations.
 
For basic usage, extra/libcl is recommended as it's installation and updating is convenient. For advanced usage, libopencl is recommended.  Both libcl and libopencl should still work with all the implementations.
Line 45: Line 51:
 
To see which OpenCL imeplentations are currently active on your system, use the following command:
 
To see which OpenCL imeplentations are currently active on your system, use the following command:
 
{{Cli|$ ls /etc/OpenCL/vendors}}
 
{{Cli|$ ls /etc/OpenCL/vendors}}
 
====Nvidia====
 
{{Expansion}}
 
  
 
====AMD====
 
====AMD====
Line 58: Line 61:
  
 
Code is compiled using {{Package Official|llvm}} (dependency).
 
Code is compiled using {{Package Official|llvm}} (dependency).
 +
 +
====Nvidia====
 +
{{Expansion}}
  
 
====Intel====
 
====Intel====

Revision as of 03:28, 9 August 2011

Note: This article is a non-public work in progress as of yet



Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary end

GPGPU stands for General-purpose computing on graphics processing units. In Linux, there are currently two major GPGPU frameworks: OpenCL and CUDA


OpenCL

Overview

OpenCL (Open Computing Language) is an open, royalty-free parallel programming framework developed by the Khronos Group, a non-profit consortium.

Distribution of the OpenCL framework generally constists of:

  • Library providing OpenCL API, known as libCL or libOpenCL (libOpenCL.so in linux)
  • OpenCL implementation(s), which contain:
    • Device drivers
    • OpenCL/C code compiler
    • SDK *
  • Header files *

* only needed for development

OpenCL libraray

There are several choices for the libCL. In general case, installing Template:Package Official from [extra] should do :

# pacman -S libcl

However, there are situations when another libCL distribution is more suitable. The following paragraph covers this more advanced topic.

The OpenCL ICD model

OpenCL offers the option to install multiple vendor-specific implementations on the same machine at the same time. In practice, this is implemented using the Installable Client Driver (ICD) model. The center point of this model is the libCL library which in fact imeplements ICD Loader. Through the ICD Loader, an OpenCL application is able to access all platforms and all devices present in the system.

Although itself vendor-agnostic, the ICD Loader still has to be provided by someone. In Archlinux, there are currently two options:

  • extra/Template:Package Official by Nvidia. Provides OpenCL version 1.0 and is thus slightly outdated. It's behaviour with OpenCL 1.1 code has not been tested as of yet.
  • unsupported/Template:Package AUR by AMD. Provides up to date version 1.1 of OpenCL. It is currently distributed by AMD under a restrictive license and therefore could not have been pushed into official repo.

(There is also Intel's libCL, this one is currently not provided in a seperate package though.)

Note: ICD Loader's vendor is mentioned only to indetify each loader, it is otherwise completely irrelevant. ICD Loaders are vendor-agnostic and may be used interchangeably
(as long as they are implemented correctly)

For basic usage, extra/libcl is recommended as it's installation and updating is convenient. For advanced usage, libopencl is recommended. Both libcl and libopencl should still work with all the implementations.

Implementations

To see which OpenCL imeplentations are currently active on your system, use the following command: Template:Cli

AMD

OpenCL implementation from AMD is known as AMD APP SDK, formerly also known as AMD Stream SDK or ATi Stream.

For Arch Linux, AMD APP SDK is currently available in AUR as Template:Package AUR. This package is installed as Template:Filename and apart from SDK files it also contains a profiler (Template:Filename) and a number of code samples (Template:Filename). It also provides the Template:Filename utility which lists OpenCL platforms and devices present in the system and displays detailed information about them.

As AMD APP SDK itself contains CPU OpenCL driver, no extra driver is needed to use execute OpenCL on CPU devices (regardless of it's vendor). GPU OpenCL drivers are provided by the Template:Package AUR package (an optional dependency), the open-source driver (Template:Package Official) does not support OpenCL.

Code is compiled using Template:Package Official (dependency).

Nvidia

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:GPGPU#)

Intel

The Intel implementation, named simply Intel OpenCL SDK, provides optimized OpenCL performance on Intel CPUs (mainly Core and Xeon) and CPUs only. There is no GPU support as Intel GPUs don't support OpenCL/GPGPU. Package is available in AUR: Template:Package AUR.

Developement

For development of OpenCL-capable applications, full installation of the OpenCL framework including implementation, drivers and compiler plus the Template:Package Official package is needed. Link your code against libOpenCL.


CUDA

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:GPGPU#)


Links and references