2
0
mirror of https://github.com/boostorg/compute.git synced 2026-01-24 05:42:14 +00:00
Files
compute/doc/tutorial.qbk
Kyle Lutz 178676df4f Refactor the system::default_device() method
This refactors the system::default_device() method. Now, the
default compute device for the system is only found once and
stored in a static variable. This eliminates many redundant
calls to clGetPlatformIDs() and clGetDeviceIDs().

Also, the default_cpu_device() and default_gpu_device() methods
have been removed and their usages replaced with default_device().
2013-05-10 22:49:05 -04:00

71 lines
2.4 KiB
Plaintext

[section:tutorial Tutorial]
[section Hello World]
The hello world example gives a simple application that prints the name of
the default compute device on the system.
Compute devices are represented with the
[classref boost::compute::device device] class.
[import ../example/hello_world.cpp]
[hello_world_example]
[endsect] [/ hello world]
[section Transferring Data]
Before any computation occurs, data must be transferred from the host to the
compute device. The generic [funcref boost::compute::copy copy()] function
provides a simple interface for transfering data and the generic
[classref boost::compute::vector vector<T>] class provides a container for
storing data on a compute device.
The following example shows how to transfer data from an array on the host to
a [classref boost::compute::vector vector<T>] on the device and then back to
a separate `std::vector<T>` on the host. At the end of the example both
`host_array` and `host_vector` contain the same values which were copied
through the memory on the compute device.
[import ../example/copy_data.cpp]
[copy_data_example]
[endsect] [/ transferring data]
[section Transforming Data]
The following example shows how to calculate the square-root of a vector of
`float`s on a compute device using the [funcref boost::compute::transform
transform()] function.
[import ../example/transform_sqrt.cpp]
[transform_sqrt_example]
[endsect] [/ transforming data]
[section Vector Data Types]
In addition to the built-in scalar types (e.g. `int` and `float`), OpenCL
also provides vector data types (e.g. `int2` and `vector4`). These can be
used with the Boost Compute library on both the host and device.
Boost.Compute provides typedefs for these types which take the form:
`boost::compute::scalarN_` where `scalar` is a scalar data type (e.g. `int`,
`float`, `char`) and `N` is the size of the vector. Supported vector sizes
are: 2, 4, 8, and 16.
The following example shows how to transfer a set of 3D points stored as an
array of `float`s on the host the device and then calculate the sum of the
point coordinates using the [funcref boost::compute::accumulate accumulate()]
function. The sum is transferred to the host and the centroid computed by
dividing by the total number of points.
Note that even though the points are in 3D, they are stored as `float4` due to
OpenCL's alignment requirements.
[import ../example/point_centroid.cpp]
[point_centroid_example]
[endsect] [/ vector data types]
[endsect] [/ tutorial ]