我可以访问CUDA 6 RC作为注册开发人员,我想尝试使用CUDA 6的新功能:统一内存.所以,当我尝试使用这个功能时,我创建了一个简单的例子:这是我的例子:
#include <stdio.h>
#include <cuda_runtime.h>
int
main(void)
{
int numElements = 5000;
size_t size = numElements * sizeof(float);
float *a;
cudaMallocManaged(&a, numElements);
for (int i = 0; i < numElements; ++i)
{
a[i] = rand()/(float)RAND_MAX;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试过运行它的例子,但是我得到了分段错误错误:
分段错误:11
问题 - 我做错了什么?
Rob*_*lla 10
无论何时遇到cuda代码问题,都应该始终实施正确的cuda错误检查
如果您这样做,我很确定您会看到错误"操作不受支持"作为您cudaMallocManaged通话的返回代码.
统一内存支持仅在Kepler GPU 上可用(此时).请参阅CUDA_C_Programming_Guide.pdf文档中的附录J"统一内存编程",该文档将/usr/local/cuda/doc/pdf位于标准Linux安装目录中:
J.1.4.系统要求
统一内存有三个基本要求:
•具有SM架构3.0或更高版本的GPU(Kepler类或更高版本)
•64位主机应用程序和操作系统,Android上除外
•Linux或Windows
因此,如果您还没有使用过,请切换到Kepler GPU,使用64位Linux或Windows(即非MacOS),并确保使用指定的适当Kepler架构编译代码,例如 -arch=sm_30
由于您的cudaMallocManaged调用失败,a指针永远不会被设置,任何后续操作都会导致seg错误.
正如@talonmies指出的那样,将分配大小更改numElements为计算size变量.
| 归档时间: |
|
| 查看次数: |
2532 次 |
| 最近记录: |