gpt4 book ai didi

cuda 6统一内存段错误

转载 作者:行者123 更新时间:2023-12-01 06:19:49 30 4
gpt4 key购买 nike

要在 CUDA 6 中使用统一内存功能,必须满足以下要求,

  • 具有 SM 架构 3.0 或更高版本(开普勒级或更高版本)的 GPU
  • 64 位主机应用程序和操作系统,Android 除外
  • Linux 或 Windows

我的设置是,

  1. 系统:ubuntu 13.10(64位)
  2. 显卡:GTX770
  3. CUDA:6.0
  4. 驱动程序版本:331.49

示例代码取自编程指南第 210 页。

 __device__ __managed__ int ret[1000];
__global__ void AplusB(int a, int b) {
ret[threadIdx.x] = a + b + threadIdx.x;
}
int main() {
AplusB<<< 1, 1000 >>>(10, 100);
cudaDeviceSynchronize();
for(int i=0; i<1000; i++)
printf("%d: A+B = %d\n", i, ret[i]);
return 0;
}

我使用的nvcc编译选项是,

nvcc -m64 -Xptxas=-Werror -arch=compute_30 -code=sm_30 -o UM UnifiedMem.cu

这段代码编译得很好。在执行期间,它在 printf() 处产生“段错误”。感觉统一内存功能没有生效。变量 ret 的地址仍然是 GPU 的,但 printf 是在 CPU 上调用的。 CPU 试图访问一段未在 CPU 上分配的数据,因此它会产生段错误。有谁能够帮我?这里有什么问题?

最佳答案

以为我不确定(我现在不能自己检查)我认为是因为 Ubuntu 13.10 在 4.8.1 版本中有 gcc,我认为它不受支持但即使在最新的 CUDA 工具包 6.0 中。尝试使用主机编译器 gcc 4.7.3 编译您的代码(即默认包含在官方支持的 Ubuntu 13.04 中的同一编译器)。为此,您可以安装 gcc-4.7打包并指向 /usr/bin/gcc-4.7 作为 nvcc 的主机编译器。对于 C++ 支持,我相信你需要 g++-4.7

如果您需要一些简单的分步指南,那么您可以继续 http://n00bsys0p.co.uk/blog/2014/01/23/nvidia-cuda-55ubuntu-1310-saucy-salamander .它适用于 CUDA Toolkit 5.5,但我认为它也应该与最新版本相关。

关于cuda 6统一内存段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22395678/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com