cudaMemset 在 __device__ 变量上失败

2023-11-29

我使用时遇到问题cudaMemset在设备变量上。是否可以使用对设备变量的引用cudaMemset,或者只是缺少编译器标志或库的问题。我正在使用 cuda 4.1,并且

NVRM 版本:NVIDIA UNIX x86_64 内核模块 285.05.33 周四 1 月 19 日 2012 年太平洋标准时间 14:07:02

这是我的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>

// device variable and kernel
__device__ float d_test;

int main() {

  if (cudaMemset(&d_test,0,sizeof(float)) !=cudaSuccess)
        printf("Error!\n");
}

其输出:

Error!

你的问题是d_test(如主机符号表中所示)不是有效的设备地址,运行时无法直接访问它。解决方案是使用cudaGetSymbolAddressAPI函数用于在运行时从上下文中读取设备符号的地址。这是演示案例的稍微扩展版本,它应该可以正常工作:

#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>

// device variable and kernel
__device__ float d_test;

inline void gpuAssert(cudaError_t code, char * file, int line, bool Abort=true)
{
    if (code != cudaSuccess) {
        fprintf(stderr, "GPUassert: %s %s %d\n", cudaGetErrorString(code),file,line);
        if (Abort) exit(code);
    }       
}

#define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); }

int main()
{

    float * _d_test;

    gpuErrchk( cudaFree(0) );
    gpuErrchk( cudaGetSymbolAddress((void **)&_d_test, "d_test") );
    gpuErrchk( cudaMemset(_d_test,0,sizeof(float)) );

    gpuErrchk( cudaThreadExit() );

    return 0;
}

这里,我们读取设备符号的地址d_test从上下文到主机指针_d_test。然后可以将其传递给主机端 API 函数,例如cudaMemset, cudaMemcpy, etc.


编辑要注意的形式cudaGetSymbolAddress此答案中显示的内容已被弃用并从 CUDA 运行时 API 中删除。对于现代 CUDA,调用将是:

gpuErrchk( cudaGetSymbolAddress((void **)&_d_test, d_test) );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cudaMemset 在 __device__ 变量上失败 的相关文章

  • CUDA、NPP 滤波器

    CUDA NPP 库支持使用 nppiFilter 8u C1R 命令过滤图像 但不断出现错误 我可以毫无问题地启动并运行 boxFilterNPP 示例代码 eStatusNPP nppiFilterBox 8u C1R oDeviceS
  • 将 nvidia 运行时添加到 docker 运行时

    我正在运行虚拟机GCP配备特斯拉 GPU 并尝试部署一个PyTorch基于应用程序使用 GPU 加速 我想让 docker 使用这个 GPU 可以从容器访问它 我设法在主机上安装了所有驱动程序 并且该应用程序在那里运行良好 但是当我尝试在
  • 最小化 MC 模拟期间存储的 cuRAND 状态数量

    我目前正在 CUDA 中编写蒙特卡罗模拟 因此 我需要生成lots使用随机数cuRAND图书馆 每个线程处理一个巨大的元素floatarray 示例中省略 并在每次内核调用时生成 1 或 2 个随机数 通常的方法 参见下面的示例 似乎是为每
  • “gld/st_throughput”和“dram_read/write_throughput”指标之间有什么区别?

    在 CUDA 可视化分析器版本 5 中 我知道 gld st requested throughput 是应用程序请求的内存吞吐量 然而 当我试图找到硬件的实际吞吐量时 我很困惑 因为有两对似乎合格的指标 它们是 gld st throug
  • 具有 Cuda Thrust 的多个 GPU?

    如何将 Thrust 与多个 GPU 一起使用 这只是使用 cudaSetDevice deviceId 的问题吗 然后运行相关的 Thrust 代码 使用 CUDA 4 0 或更高版本 cudaSetDevice deviceId 接下来
  • cudaDeviceScheduleBlockingSync 和 cudaDeviceScheduleYield 之间有什么区别?

    正如这里所说 如何减少 CUDA 同步延迟 延迟 https stackoverflow com questions 11953722 how to reduce cuda synchronize latency delay 等待设备结果有
  • OpenCV 2.4.3rc 和 CUDA 4.2:“OpenCV 错误:没有 GPU 支持”

    我在这张专辑中上传了几张截图 https i stack imgur com TELST jpg https i stack imgur com TELST jpg 我正在尝试在 Visual Studio 2008 中的 OpenCV 中
  • CUDA 的嵌套循环

    我想将我的 C 代码移植到 CUDA 主要计算部分包含3个for嵌套循环 for int i 0 i lt Nx i for int j 0 j
  • GPU上动态分配内存

    是否可以在内核内的 GPU 全局内存上动态分配内存 我不知道我的答案有多大 因此我需要一种方法为答案的每个部分分配内存 CUDA 4 0 允许我们使用 RAM 这是一个好主意还是会降低速度 可以在内核中使用 malloc 检查以下内容 摘自
  • 直接在主机上访问设备向量元素的最快方法

    我请您参考以下页面http code google com p thrust wiki QuickStartGuide Vectors http code google com p thrust wiki QuickStartGuide V
  • CUDA 和 Eigen 的成员“已声明”错误

    我只是 CUDA 和 Nsight 的初学者 希望利用出色的 GPU 性能进行线性代数运算 例如 CUBLAS 我在以下人员的帮助下编写了很多自定义代码Eigen http eigen tuxfamily org index php tit
  • 一维纹理内存访问比一维全局内存访问更快吗?

    我正在测量标准纹理和 1Dtexture 内存访问之间的差异 为此 我创建了两个内核 global void texture1D float doarray int size int index calculate each thread
  • CUDA cutil.h 在哪里?

    有谁知道包含 cutil h 的 SDK 工具包在哪里 我尝试了 CUDA toolkits3 2 和 toolkits5 0 我知道这个版本已经不支持 cutil h 我还注意到一些提到的如何在 Linux 中包含 cutil h htt
  • 使用设备函数指针数组

    我需要以下设备版本 主机代码 double func double x double func1 double x return x 1 double func2 double x return x 2 double func3 doubl
  • 为什么 CUDA 内存复制速度会这样,有一些恒定的驱动程序开销?

    在我的旧 GeForce 8800GT 上使用 CUDA 内存时 我总是会遇到奇怪的 0 04 毫秒开销 我需要将 1 2K 传输到设备的常量内存中 处理其中的数据并从设备中仅获取一个浮点值 我有一个使用 GPU 计算的典型代码 alloc
  • 为什么在 CUDA 中启动 32 倍数的线程?

    我参加了 CUDA 并行编程课程 并且看到了许多 CUDA 线程配置的示例 其中通常将所需的线程数四舍五入到最接近的 32 倍数 我知道线程被分组为 warp 并且如果您启动 1000 个线程 GPU 无论如何都会将其四舍五入到 1024
  • fork后CUDA初始化错误

    调用 fork 后出现 初始化错误 如果我在没有 fork 的情况下运行相同的程序 则一切正常 if fork 0 cudaMalloc 什么会导致这种情况呢 下面是一个完整的示例 如果我注释掉 cudaGetDeviceCount 调用
  • 嵌套循环中数组的二维累积和——CUDA实现?

    我一直在考虑如何使用归约在 CUDA 上执行此操作 但我对如何完成它有点不知所措 C 代码如下 要记住的重要部分 变量预先计算的值依赖于取决于both循环迭代器 另外 变量ngo并不是每个值都是唯一的m 例如m 0 1 2 可能有ngo 1
  • CUDA 中的合作组

    自 CUDA 9 发布以来 显然可以将不同的线程和块分组到同一组中 以便您可以一起管理它们 这对我来说非常有用 因为我需要启动一个包含多个块的内核并等待所有块都同步 cudaThreadSynchronize 对我来说不值得 因为在线程同步
  • 如何知道应该使用哪个 cuDNN 版本?

    我计划在 Linux 上使用 cuDNN 如何知道我需要哪个 cuDNN 版本 我应该始终使用最新的吗 例如 选择正确的 CUDA 版本依赖于取决于 https stackoverflow com a 30820690 395857Nvid

随机推荐