GPU 上の float の大きな配列に対して基本的な数学演算 (加算、減算、除算、乗算) を実行したいのですが、これを実現できる C++ のライブラリはありますか?
たとえば、擬似コードでは次のようになります。
A = [1,2,3,...]
B = [2,3,9,...]
C = A+B //[3,5,12,...]
D = A-B //[-1,-1,-6,...]
E = A/B //[0.5,0.6,0.3,...]
F = A*B //[2,6,27,...]
Boost.Computeライブラリを見てください。これは、GPU (または任意の OpenCL 互換デバイス) で多くの操作を実行できる C++ STL ライクなライブラリです。Thrust とは異なり、NVIDIA GPU に限定されません。
ソースコードはこちら: https://github.com/boostorg/compute
スラスト。
この例は、彼らのサイトからのものです。
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/sort.h>
#include <thrust/copy.h>
#include <cstdlib>
int main(void)
{
// generate 32M random numbers on the host
thrust::host_vector<int> h_vec(32 << 20);
thrust::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;
}
そして、彼らのsaxpy
例はあなたが尋ねたものに近いです。フラグメントを見てください:
thrust::transform(X.begin(), X.end(), Y.begin(), Y.begin(), saxpy_functor(A));
OpenCL はそのような「ライブラリ」の 1 つです。技術的にはライブラリではなく、C99 に基づく独自の言語です。OpenCL ランタイム システムを使用すると、GPU (または CPU) 上で実行されるスレッドを複数のスレッドで作成し、それぞれが計算の小さな部分を処理することができ、実行するスレッドの数を構成できます。