2014-05-12 10 views
9

Wypróbowanie zarządzanej pamięci w CUDA 6.0 daje mi operation not supported podczas wywoływania cudaMallocManaged().cudaMallocManaged() zwraca "operacja nieobsługiwana"

#include "cuda_runtime.h" 

#include <stdio.h> 

#define CHECK(r) {_check((r), __LINE__);} 

void _check(cudaError_t r, int line) { 
    if (r != cudaSuccess) { 
    printf("CUDA error on line %d: %s\n", line, cudaGetErrorString(r), line); 
    exit(0); 
    } 
} 

int main() 
{ 
    int *c; 
    CHECK(cudaMallocManaged(&c, sizeof(int))); 
    *c = 0; 
    return 0; 
} 

GeForce GTX 750 Ti (Maxwell), skompilowany z CUDA 6.0 za pomocą compute_50, sm_50. Windows 7 64-bitowy. Testowane przy użyciu sterowników 335.23 (whql) i 337.50 (beta). Visual Studio 2012. Wypróbowane 32-bitowe wersje debugowania i wydania.

C: \ rd \ Projects \ CPP \ test_cuda6 \ test_cuda6> "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v6.0 \ bin \ nvcc.exe" -gencode = arch = compute_50, code = \ "sm_50, compute_50 \" --use-local-env --cl-version 2012 -ccbin "C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ bin" -I \ C \ common \ inc -I "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v6.0 \ include" -I "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v6.0 \ include" --keep -dir Wydanie -maxrregcount = 0 - maszyna 32 - kompilacja -kartka statyczna -DWIN32 -DNDEBUG -D_CONSOLE -D_MBCS -Xcompiler "/ EHsc/W3 /nologo/O2/Zi/MD" -o Release \ kernel.cu. obj "C: \ rd \ projects \ cpp \ test_cuda6 \ test_cuda6 \ kernel.cu"

Program działa bez błędu, jeśli zmienię cudaMallocManaged() na cudaMalloc().

Wszelkie pomysły na to, jak uzyskać cudaMallocManaged() działa?

Odpowiedz

11

Wypróbowane 32-bitowe wersje debugowania i wydania.

Użyj 64-bitowej wersji debugowania lub wydania.

Od the documentation:

J.1.4. Wymagania systemowe

Unified Memory ma trzy podstawowe wymagania:

• GPU z SM architektury 3.0 lub wyższej (klasy Kepler lub nowszy)

• 64-bitowym systemie aplikacji hosta i operacyjnych, z wyjątkiem na Androida

• Linux lub Windows

64 bit aplikacja hosta oznacza, że ​​nie można skompilować do 32 bit debugowania lub uwolnienia kompilacji.

+0

Heh - zapoznaj się z wymaganiami systemowymi i całkowicie pomiń wymagania dotyczące aplikacji 64-bitowej. Po raz pierwszy napotkałem cokolwiek, gdzie wymagana jest 64-bitowa kompilacja. Czy znasz przyczynę techniczną? Jeszcze raz dziękuję za pomoc. Jest bardzo doceniany jak zawsze. –

+1

UM potrzebuje ujednoliconej przestrzeni adresowej dla wszystkich procesorów graficznych w systemie oraz procesora, [tak jak UVM/UA] (http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__UNIFIED.html#group__CUDART__UNIFIED) . Jest to prostsze do wykonania w przestrzeni 64-bitowej. –