Я использую Cuda SDK 4.0 и столкнулся с проблемой, которая заняла у меня 2 дня, чтобы перейти к следующему коду.
#include <cuda.h>
#include <cuda_runtime.h>
void main (int argc, char ** argv) {
int* test;
cudaError_t err;
err = cudaSetDevice( 1 ); err = cudaMallocHost(&test, 1024*sizeof(int));
err = cudaSetDevice( 0 ); err = cudaFreeHost(test);
}
При вызове cudaFreeHost выдается следующая ошибка:
First-chance exception at 0x000007fefd96aa7d in Test.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0022f958..
Значение ошибки: cudaErrorInvalidValue
Та же ошибка возникает для этого варианта:
err = cudaSetDevice( 0 ); err = cudaMallocHost(&test, 1024*sizeof(int));
err = cudaSetDevice( 1 ); err = cudaFreeHost(test);
Следующие варианты не выдают ошибку:
err = cudaSetDevice( 0 ); err = cudaMallocHost(&test, 1024*sizeof(int));
err = cudaSetDevice( 0 ); err = cudaFreeHost(test);
и
err = cudaSetDevice( 1 ); err = cudaMallocHost(&test, 1024*sizeof(int));
err = cudaSetDevice( 1 ); err = cudaFreeHost(test);
У меня сложилось впечатление, что вам нужно вызывать cudaSetDevice только в том случае, если вы хотите выделить память для определенного графического процессора.В приведенном выше примере я только распределяю закрепленную память на ЦП.
Это ошибка или я что-то упустил в руководстве?