Skip to content
/ thrust Public
forked from NVIDIA/thrust

Thrust is a parallel algorithms library which resembles the C++ Standard Template Library (STL).

License

Notifications You must be signed in to change notification settings

malfet/thrust

This branch is 1 commit ahead of, 1530 commits behind NVIDIA/thrust:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f47a482 · Nov 7, 2014
Mar 7, 2013
Oct 13, 2014
Nov 16, 2012
Mar 27, 2012
Oct 16, 2014
Nov 7, 2014
Mar 23, 2012
Oct 8, 2014
Apr 6, 2009
Sep 10, 2010
Oct 21, 2014
Mar 27, 2012
Jul 15, 2014
Jun 7, 2011

Repository files navigation

Thrust: Code at the speed of light

Thrust is a parallel algorithms library which resembles the C++ Standard Template Library (STL). Thrust's high-level interface greatly enhances programmer productivity while enabling performance portability between GPUs and multicore CPUs. Interoperability with established technologies (such as CUDA, TBB, and OpenMP) facilitates integration with existing software. Develop high-performance applications rapidly with Thrust!

Examples

Thrust is best explained through examples. The following source code generates random numbers serially and then transfers them to a parallel device where they are sorted.

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/sort.h>
#include <thrust/copy.h>
#include <algorithm>
#include <cstdlib>

int main(void)
{
  // generate 32M random numbers serially
  thrust::host_vector<int> h_vec(32 << 20);
  std::generate(h_vec.begin(), h_vec.end(), rand);

  // transfer data to the device
  thrust::device_vector<int> d_vec = h_vec;

  // sort data on the device (846M keys per second on GeForce GTX 480)
  thrust::sort(d_vec.begin(), d_vec.end());

  // transfer data back to host
  thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());

  return 0;
}

This code sample computes the sum of 100 random numbers in parallel:

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/reduce.h>
#include <thrust/functional.h>
#include <algorithm>
#include <cstdlib>

int main(void)
{
  // generate random data serially
  thrust::host_vector<int> h_vec(100);
  std::generate(h_vec.begin(), h_vec.end(), rand);

  // transfer to device and compute sum
  thrust::device_vector<int> d_vec = h_vec;
  int x = thrust::reduce(d_vec.begin(), d_vec.end(), 0, thrust::plus<int>());
  return 0;
}

Refer to the Quick Start Guide page for further information and examples.

Contributors

The original creators of Thrust are Jared Hoberock and Nathan Bell.

About

Thrust is a parallel algorithms library which resembles the C++ Standard Template Library (STL).

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 44.7%
  • Cuda 41.9%
  • C 12.0%
  • Other 1.4%