1

私が持っている2つのcudaデバイスを利用しようとしています(実際には2つの別々のデバイスであるGF 690GTXで実験しています)、プログラムは定数メモリを使用してデータをデバイスに転送します。

グローバル メモリを 2 つのデバイスで使用するには、どうすればよいかを明確に理解しています。

//working with device 0
cudaSetDevice(0);
void* mem_on_dev_0 = cudaMalloc(...);
cudaMemcpy(mem_on_dev_0, mem_on_host, ...);
kernel_call<<<...>>>(mem_on_dev_0);

//working with device 1
cudaSetDevice(1);
void* mem_on_dev_1 = cudaMalloc(...);
cudaMemcpy(mem_on_dev_1, mem_on_host, ...);
kernel_call<<<...>>>(mem_on_dev_1);

しかし、定数メモリを使用する場合、それを使用する通常の方法は、ファイル内のどこかで定数変数を宣言し、「シンボル」関数を使用してそれを操作することです。

// What device this memory is on?
__device__ __constant__ float g_const_memory[CONST_MEM_SIZE];

// dev_func can be told to be called on any device
__global__ void dev_func()
{
    //using const memory
    float f = g_const_memory[const_index];
}

void host_func()
{
    //cudaSetDevice(0);  //any sense?
    cudaMemcpyToSymbol(g_const_memory, host_mem, ...);
    dev_func<<<...>>>();
}

この質問をする前にグーグルで検索しましたが、答えが見つかりませんでした。本当に仕方がないのでしょうか?

4

0 に答える 0