- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始了解 NVCC 如何为不同的计算架构编译 CUDA 设备代码。
根据我的理解,当使用 NVCC 的 -gencode 选项时,“arch”是程序员应用程序所需的最低计算架构,也是 NVCC 的 JIT 编译器将为其编译 PTX 代码的最低设备计算架构。
我也明白 -gencode 的“代码”参数是 NVCC 完全编译应用程序的计算架构,因此不需要 JIT 编译。
在检查了各种 CUDA 项目 Makefile 后,我注意到以下情况经常发生:
-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
-gencode arch=compute_21,code=sm_21
-arch compute_20
-code sm_20
-code sm_21
最佳答案
粗略地说,代码编译流程是这样的:
CUDA C/C++设备代码源--> PTX --> SASS
虚拟架构(例如 compute_20
,无论 -arch compute...
指定什么)决定将生成什么类型的 PTX 代码。附加开关(例如 -code sm_21
)确定将生成什么类型的 SASS 代码。 SASS 实际上是 GPU(机器语言)的可执行目标代码。一个可执行文件可以包含多个版本的 SASS 和/或 PTX,并且有一个运行时加载器机制可以根据实际使用的 GPU 选择合适的版本。
正如您所指出的,GPU 操作的一项便利功能是 JIT 编译。 JIT 编译将由 GPU 驱动程序完成(不需要安装 CUDA 工具包),只要有合适的 PTX 代码可用,但合适的 SASS 代码不可用。 “合适的 PTX”代码的定义是在数值上等于或低于运行代码的目标 GPU 架构的代码。选择一个例子,指定 arch=compute_30,code=compute_30
会告诉 nvcc 在可执行文件中嵌入 cc3.0 PTX 代码。此 PTX 代码可用于为 GPU 驱动程序支持的任何 future 架构生成 SASS 代码。目前,这将包括 Pascal、Volta、Turing 等架构,假设 GPU 驱动程序支持这些架构。
包含多个虚拟架构(即 PTX 的多个版本)的一个优点是,您可以与更多种类的目标 GPU 设备具有可执行兼容性(尽管某些设备可能会触发 JIT 编译以创建必要的 SASS)。
包含多个“真实 GPU 目标”(即多个 SASS 版本)的优势之一是,当存在这些目标设备之一时,您可以避免 JIT 编译步骤。
如果您指定了一组错误的选项,则可能会创建一个无法(正确)在特定 GPU 上运行的可执行文件。
指定大量这些选项的一个可能的缺点是代码大小膨胀。另一个可能的缺点是编译时间,当您指定更多选项时,编译时间通常会更长。
也可以创建不包含 PTX 的可执行文件,这可能对那些试图隐藏其 IP 的人感兴趣。
创建适用于 JIT 的 PTX 应该由 specifying a virtual architecture 完成为 code
转变。
关于cuda - 在 Nvidia 的 NVCC 编译器中使用多个 "arch"标志的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599189/
我在使用的教程中遇到了这个不寻常的代码。 #if !(arch(x86_64) || arch(arm64)) func sqrt(a: CGFloat) -> CGFloat { return CG
我的应用程序需要 double 计算。根据我在谷歌上找到的内容,我应该添加一个标志“-arch sm_13”或“-arch sm_20”。 Q1:“-arch sm_13”和“-arch sm_20”
在从不同的规范文件构建一些 RPM 时,我收到了上述警告 Binaries arch (1) not matching the package arch (2). 代码和一切都给了我,我对 RPM 很
似乎 Microsoft Visual C++ 提供了可在两种名称格式下重新分发的 VC++ 运行时的等效副本。 VS2017: @ /cygdrive/c/Program Files (x86)/M
在 Kotlin 文件中,我有一个“未解析的引用:arch”。 import android.arch.lifecycle.Lifecycle import android.arch.lifecycl
目前,我们正在项目中使用LiveData、ViewModel 和Room。 我们正在使用 Java 8。 我们在build.gradle中使用以下内容 // ViewModel and LiveDat
我在 Macbook Pro 上的 VirtualBox 上运行 Ubuntu 14.04 64 位 MAC。我在 hello_kernel.c 中有以下内容,我想运行它。 #include #in
我创建了一个 github 操作来在推送时部署代码。 安装软件包时会导致此错误。 Run npm i --no-optional && cd client && npm i --no-optional
当我尝试在 Ubuntu 机器中启用 PPP 时,在 menuconfig 之后发生以下错误并尝试制作内核: $ sudo make make[1]: *** No rule to make targ
测试二进制 二进制没问题 npm WARN rollback 回滚 node-pre-gyp@0.12.0 失败(这可能是无害的): EPERM: operation not permitted, l
当我尝试在 Ubuntu 机器中启用 PPP 时,在 menuconfig 和尝试制作内核之后发生了以下错误: $ sudo make make[1]: *** No rule to make tar
我正在尝试安装Webpack但它不断地给我同样的警告,而且 webpack 仍然没有安装在我的项目中。这是我正在处理的一个现有项目。我尝试了很多命令,例如 npm install --no-optio
我在我的raspberry pi上安装python密码软件包时遇到了一些问题,特别是python版本3.9.8(与pyenv一起安装)。密码包是使用pacman(python-cryptography
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章Arch Linux安装后的一些初始设置简介由作者收集整理,如果你对这篇
我尝试在 ubuntu 12.04(64 位)上构建 gcc 4.8 主干。 当我使用配置时 ../gcc-trunk/configure -v --with-pkgversion='ubuntu12
slock 与 xfce 一起安装。 当我点击右上角的“锁定屏幕”时,屏幕变黑。按任意键,屏幕会变红,但如何取消呢? slock中没有解锁的UI? 最佳答案 我发现它只是在等待密码。输入正确的密码,屏
我正在尝试在 Cygwin 中为 Android NDK 配置工具链。我用这个tutorial .当我运行以下命令时: ./make-standalone-toolchain.sh --platfor
我安装了 Arch Arm到 Rpi3 上,然后将 sysroot rsync 到安装在 Lenovo thinkpad 上的 x86_64 Arch Linux。 然后我安装了 arm-linux-
我正在研究 Linux 内核模块。它需要有一种方法可以将所有进程显示为分层树。我已经编写了一个递归方法来显示进程及其子进程。我还尝试通过检查每个进程与 init_task 的距离来将其格式化为树。但是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!