3

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,...]
4

4 に答える 4

7

Boost.Computeライブラリを見てください。これは、GPU (または任意の OpenCL 互換デバイス) で多くの操作を実行できる C++ STL ライクなライブラリです。Thrust とは異なり、NVIDIA GPU に限定されません。

ソースコードはこちら: https://github.com/boostorg/compute

于 2013-10-26T18:04:33.497 に答える
4

スラスト

この例は、彼らのサイトからのものです。

#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));
于 2013-10-26T17:31:33.447 に答える
1

OpenCL はそのような「ライブラリ」の 1 つです。技術的にはライブラリではなく、C99 に基づく独自の言語です。OpenCL ランタイム システムを使用すると、GPU (または CPU) 上で実行されるスレッドを複数のスレッドで作成し、それぞれが計算の小さな部分を処理することができ、実行するスレッドの数を構成できます。

于 2013-10-26T17:30:55.273 に答える