1

何度も呼び出されている CUDA を介していくつかの関数を並列化しようとしています。毎回同じ行列を扱います。この行列を GPU メモリに保存し、関数が呼び出されたときに、ベクトルを GPU にアップロードし、それを行列で乗算して結果を返したいと考えています。私は C++ テンプレート スタイルを好むので、推力の方が優先されます。

これを行うためのいくつかの機能と、可能であればいくつかの小さなサンプルをお勧めします。コードを提供していないのは、それが秘密だからではなく、その複雑さと巨大なサイズのためです。

4

1 に答える 1

1

スラストについては、device_vector、device_ptr などを探しています。

Thrust::device_vector から raw ポインターへ、そしてその逆?

ただし、GPU を効率的にプログラミングするために、CUDA メモリ タイプにも精通することをお勧めします。

http://www.cvg.ethz.ch/teaching/2011spring/gpgpu/cuda_memory.pdf (pdf 警告)

探しているメモリの種類は「グローバル メモリ」です。このメモリはすべて、CPU カードではなく GPU カードに保存されるため、カーネルとデバイス関数呼び出しでのみ使用できることに注意してください。

デバイス ポインターのすべてのファンクターは、デバイスタグを使用してコンパイルする必要があります(単項演算の例)。

template <typename T>
struct square
{   
__host__ __device__
    T operator()(const T& x) const {
        return x * x;
}
}; 
于 2013-03-18T15:02:07.293 に答える