cudaHostAlloc问题

程序中想用到零拷贝内存,但是执行到这条代码的时候就有问题:

cutilSafeCall(cudaHostAlloc((void **)&a,33792,cudaHostAllocMapped));

错误提醒如下:
cudaSafeCall() Runtime API error 11: invalid argument.

求高手指点怎么回事。

float *a_h, *a_map;

cudaGetDeviceProperties(&prop, 0);
if (!prop.canMapHostMemory) exit(0);
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc(&a_h, nBytes, cudaHostAllocMapped);
cudaHostGetDevicePointer(&a_map, a_h, 0);
kernel<<<gridSize, blockSize>>>(a_map);