CUDA PTX 代码 %envreg<32> 特殊寄存器

2024-03-05

我尝试使用 CUDA 驱动程序 API 运行由 .cl 内核生成的 PTX 汇编代码。我采取的步骤是这些(标准 opencl 程序):

1)加载.cl内核

2)JIT编译

3)获取编译好的ptx代码并保存。

到目前为止,一切都很好。

我注意到 ptx 程序集中有一些特殊寄存器,%envreg3,%envreg6 等。问题是当我尝试使用以下命令执行代码时,这些寄存器未设置(根据 ptx_isa 这些寄存器是由驱动程序在内核启动之前设置的)驱动程序 API。所以代码陷入了无限循环,无法正确运行。但是,如果我手动设置这些值(也不完全用 ptx 内的块大小替换 %envreg6 ),则代码正在执行并且我得到正确的结果(与 cpu 结果相比是正确的)。

有谁知道如何我们可以设置值到这些寄存器,或者如果我遗漏了什么?即 cuLaunchKernel 上的标志,为这些寄存器设置值?


您正在尝试编译 OpenCL 内核并使用 CUDA 驱动程序 API 运行它。 OpenCL 和 CUDA 之间的 NVIDIA 驱动程序/编译器接口不同,因此不支持您想要做的事情,并且从根本上无法工作。

据推测,唯一的解决方法就是您找到的方法:修补 PTX 代码。但恐怕这在一般情况下可能行不通。

Edit:具体来说,OpenCL 支持比大多数 NVIDIA GPU 支持的更大的网格,因此网格大小需要通过划分多个实际网格启动来虚拟化,因此偏移是必要的。同样在 OpenCL 中,索引不一定从 (0, 0, 0) 开始,用户可以指定驱动程序必须传递给内核的偏移量。因此,为 OpenCL 和 CUDA C 启动初始化的寄存器是不同的。

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

CUDA PTX 代码 %envreg<32> 特殊寄存器 的相关文章

  • 为什么会有 CL_DEVICE_MAX_WORK_GROUP_SIZE?

    我试图了解 OpenCL 设备 例如 GPU 的体系结构 但我不明白为什么本地工作组中的工作项数量有明确的限制 即常量 CL DEVICE MAX WORK GROUP SIZE 在我看来 这应该由编译器处理 即 如果 为简单起见 一维 内
  • 空的 openCL 程序抛出弃用警告

    我下载了 AMD APP 3 0 SDK 一旦包含 include
  • 如何在 gitlab-ci docker 执行器中使用 cuda

    我们正在使用 gitlab 持续集成来构建和测试我们的项目 最近 其中一个项目添加了 CUDA 的要求以启用 GPU 加速 我不想改变我们的管道 docker 和 gitlab ci 对我们来说运行良好 所以我想以某种方式让 docker
  • 是否可以在设备函数中调用cufft库调用?

    我在主机代码中使用 cuFFT 库调用 它们工作正常 但我想从内核调用 cuFFT 库 早期版本的 CUDA 没有这种支持 但是有了动态并行性 这可能吗 如果有任何关于如何实现这一目标的示例 那就太好了 尽管在 Kepler cc 3 5
  • 使用内置显卡,没有NVIDIA显卡,可以使用CUDA和Caffe库吗?

    使用内置显卡 没有 NVIDIA 显卡 可以使用 CUDA 和 Caffe 库吗 我的操作系统是 ubuntu 15 CPU为 Intel i5 4670 3 40GHz 4核 内存为12 0GB 我想开始学习深度学习 CUDA 适用于 N
  • 某些子网格未使用 CUDA 动态并行执行

    我正在尝试 CUDA 5 0 GTK 110 中的新动态并行功能 我遇到了一个奇怪的行为 即我的程序没有返回某些配置的预期结果 不仅是意外的 而且每次启动都会出现不同的结果 现在我想我找到了问题的根源 似乎当生成太多子网格时 某些子网格 由
  • cudaMemcpyToSymbol 的问题

    我正在尝试复制到恒定内存 但我不能 因为我对 cudaMemcpyToSymbol 函数的用法有误解 我正在努力追随this http developer download nvidia com compute cuda 4 1 rel t
  • CUDA 中的广义霍夫变换 - 如何加快分箱过程?

    正如标题所示 我正在对并行计算机视觉技术进行一些个人研究 使用 CUDA 我尝试实现 GPGPU 版本的霍夫变换 我遇到的唯一问题是在投票过程中 我调用atomicAdd 来防止多个同时写入操作 但我似乎没有获得太多的性能效率 我在网上搜索
  • 在linux上编译一个基本的OpenCV + Cuda程序

    我过去在linux上使用过opencv 但没有使用过cuda 几个月来我一直在与以下编译错误作斗争 在尝试了许多解决方案后 我放弃并使用 Windows 不过 我真的很想在 Linux 上工作 这是我用来编译 opencv gpu 网站上给
  • MPI+CUDA 与纯 MPI 相比有何优势?

    加速应用程序的常用方法是使用 MPI 或更高级别的库 例如在幕后使用 MPI 的 PETSc 并行化应用程序 然而 现在每个人似乎都对使用 CUDA 来并行化他们的应用程序或使用 MPI 和 CUDA 的混合来解决更雄心勃勃 更大的问题感兴
  • 如何优化这个 CUDA 内核

    我已经分析了我的模型 似乎该内核约占我总运行时间的 2 3 我一直在寻找优化它的建议 代码如下 global void calcFlux double concs double fluxes double dt int idx blockI
  • CUDA线程执行顺序

    我有一个 CUDA 程序的以下代码 include
  • CUDA 估计 2D 网格数据的每块线程数和块数

    首先我要说的是 我已经仔细阅读了所有类似的问题 确定每个块的线程和每个网格的块 https stackoverflow com questions 4391162 cuda determining threads per block blo
  • 无法在 CUDA 中执行设备内核

    我正在尝试在全局内核中调用设备内核 我的全局内核是矩阵乘法 我的设备内核正在查找乘积矩阵每列中的最大值和索引 以下是代码 device void MaxFunction float Pd float max int x threadIdx
  • 设置最大 CUDA 资源

    我想知道是否可以设置 CUDA 应用程序的最大 GPU 资源 例如 如果我有一个 4GB GPU 但希望给定的应用程序只能访问 2GB 如果它尝试分配更多 就会失败 理想情况下 这可以在进程级别或 CUDA 上下文级别上设置 不 目前没有允
  • 在 __device/global__ CUDA 内核中动态分配内存

    根据CUDA 编程指南 http developer download nvidia com compute cuda 3 2 prod toolkit docs CUDA C Programming Guide pdf 第 122 页 可
  • cuda中有模板化的数学函数吗? [复制]

    这个问题在这里已经有答案了 我一直在寻找 cuda 中的模板化数学函数 但似乎找不到 在普通的 C 中 如果我调用std sqrt它是模板化的 并且将根据参数是浮点数还是双精度数执行不同的版本 我想要这样的 CUDA 设备代码 我的内核将真
  • cudaSetDevice() 对 CUDA 设备的上下文堆栈有何作用?

    假设我有一个与设备关联的活动 CUDA 上下文i 我现在打电话cudaSetDevice i 会发生什么 Nothing 主上下文取代了堆栈顶部 主上下文被压入堆栈 事实上 这似乎是不一致的 我编写了这个程序 在具有单个设备的机器上运行 i
  • 有没有一种有效的方法来优化我的序列化代码?

    这个问题缺乏细节 因此 我决定创建另一个问题而不是编辑这个问题 新问题在这里 我可以并行化我的代码吗 还是不值得 https stackoverflow com questions 17937438 can i parallelize my
  • Linux 上的 OpenCL 编译

    我是 OpenCL 的新手 从昨天开始 我尝试使用 OpenCL 进行并行编程 而不是使用我更熟悉且以前体验过的 CUDA 现在我有 NVIDIA GTX 580 GPU Ubuntu Linux 12 04 操作系统和 CUDA SDK

随机推荐

  • 谷歌日历 API。向某人日历添加事件在身份验证时会引发错误“错误 401:invalid_client”

    我有一个 C 类库 我试图通过使用他 她的电子邮件地址和密码作为凭据来将事件添加到某人的日历中 所以我对其进行调试 一旦启动 互联网浏览器中就会打开一个新页面 并显示以下错误 代码如下 It crashes when calling Goo
  • 内置身份验证机制-API网关

    API网关具有执行授权的内置功能 但是 awslabs 提供的示例将 lambda 连接到 API 网关 其中 lambda 根据此进行授权code https github com awslabs serverless applicati
  • 是否有理由对十六进制 CSS 颜色值使用大写字母? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我发现 CSS 属性值中的颜色通常以大写形式编写 foo bar background color A41B35 color FFF 但您也可以
  • 在 json 中传递函数并执行

    有什么方法可以将函数作为 json 字符串传递 使用 JSON stringify 进行转换 将其发送到另一个函数 解析 json 然后执行 json 中的函数 我正在使用 jquery 和 javascript 是的你可以 有很多方法可以
  • 位置参数与关键字参数

    基于this http infohost nmt edu tcc help pubs python web def html 位置参数是后面不跟等号的名称 和默认值 关键字参数后跟一个等号和一个表达式 给出它的默认值 def rectang
  • 如何停止位置管理器?

    不知道为什么 但有时 LocationManager 在关闭应用程序后仍然工作 我在一个 Activity 的 onCreate Methode 中调用 startGPS 只有一个 让我称之为 StartActivity protected
  • 有 AFHTTPClient 使用 AFNetworking 发布 json 的示例吗?

    寻找如何发布 json 的示例AFHTTPClient 我看到有一个 postPath 方法需要一个NSDictionaryAFJSONEncode 方法返回一个NSData 有没有一种简单的方法可以将对象序列化为NSDictionary
  • Apache Ignite.NET SQL 不搜索非英文字符

    使用 Apache Ignite NET 2 3 0 尝试使用 Linq 扩展 Apache Ignite Linq 进行搜索 配置 CacheConfiguration new new CacheConfiguration QueryEn
  • 仅用一个正则表达式进行多次替换

    为了简单起见 假设我们有以下字符串 约翰爱玛丽 玛丽爱杰克 而杰克不关心约翰和玛丽 假设我想使用正则表达式来更改该故事的角色 约翰 gt 约瑟夫 玛丽 gt 杰西卡 杰克 gt 基思 当然 我可以一次更改其中一项 但我想知道是否可以仅用一个
  • 如何更改单个显示器的伽玛斜坡(NVidia Config)?

    我尝试仅更改一个屏幕而不是所有屏幕的伽玛值 I use 这段代码 http devadd com 2010 10 too bright too early 帮我 但是这个SetDeviceGammaRamp GetDC IntPtr Zer
  • OpenBUGS - 变量未定义

    我在 OpenBUGS 中使用以下代码来执行分析 model for i in 1 467 probit p i lt gamma0 gamma1 drug i gamma2 CD41 i R i dbern p i junk i lt I
  • 在 Android 中向 AlertDialog 添加垂直滚动条?

    我想向 AlertDialog 添加一个垂直滚动条 因为我的文本太长 无法在一个屏幕上显示 我尝试过使用 android scrollbars vertical android scrollbarAlwaysDrawVerticalTrac
  • 顺序和并行版本给出不同的结果 - 为什么?

    我有一个嵌套循环 L 和 A 是完全定义的输入 pragma omp parallel for schedule guided shared L A reduction dummy for i k 1 i
  • 使用 compose 重新创建命名卷

    V renew anon volumes Recreate anonymous volumes instead of retrieving data from the previous containers Does docker comp
  • 如何在单击该图像的 onclick 事件时获取图像源路径

    当图像的 onclick 事件被触发时 我需要获取图像源 我尝试使用 document getElementById example src 但浏览器上的控制台显示 未捕获的类型错误 无法读取 null 的属性 src img src em
  • NamedPipeServerStream 接收 MAX=1024 字节,为什么?

    我正在使用 NamedPipeStream 客户端和服务器 我将数据从客户端发送到服务器 该数据是一个包含二进制数据的序列化对象 当服务器端接收数据时 它总是有最大1024大小 而客户端发送更多 因此 当尝试序列化数据时 这会导致以下异常
  • 可定制的字母替换器

    我一直在开发一个几乎可以替代字母的应用程序 所以你会有一封信和一个输入框 该字母代表将被替换的字母 您在输入框中写下您想要替换的内容 为此 我使用了正则表达式和对象 如果你像这样徘徊 匿名的 到底出了什么问题 julianavar 有什么不
  • 禁用 TabLayout 中的选项卡[重复]

    这个问题在这里已经有答案了 我用过TabLayout来自我的应用程序中最新的设计支持库 这些选项卡附加到一个视图分页器 该视图分页器加载每个选项卡的片段 我想禁用所有选项卡 直到视图页面加载用户选择的选项卡的片段 我无法禁用选项卡布局或使其
  • 使用 EPPlus 将 Excel 工作表格式化为表格

    我有一个 NET Core 应用程序 并且我不熟悉将 EPPlus 库与 C 一起使用 我有一个数据表 其中填充了我目前正在使用 EPPlus 将其插入到 Excel 工作表中的数据 我想知道是否有一种方法可以在将数据添加到工作表之后而不是
  • CUDA PTX 代码 %envreg<32> 特殊寄存器

    我尝试使用 CUDA 驱动程序 API 运行由 cl 内核生成的 PTX 汇编代码 我采取的步骤是这些 标准 opencl 程序 1 加载 cl内核 2 JIT编译 3 获取编译好的ptx代码并保存 到目前为止 一切都很好 我注意到 ptx