全局内核中的 CUDA 变量

2023-11-30

我的问题是:

1)我的理解是否正确,当您在全局内核中声明一个变量时,每个线程都会有该变量的不同副本。这允许您为每个线程在该变量中存储一些中间结果。示例:向量 c=a+b:

__global__ void addKernel(int *c, const int *a, const int *b)
{
   int i = threadIdx.x;
   int p;
   p = a[i] + b[i];
   c[i] = p;
} 

这里我们声明中间变量p。但实际上这个变量有 N 个副本,每个副本对应一个线程。

2)如果我声明数组,则会创建该数组的 N 个副本,每个副本对应每个线程,这是真的吗?只要全局内核中的所有内容都发生在 GPU 内存上,对于声明的任何变量,您都需要 N 倍的 GPU 内存,其中 N 是线程数。

3)在我当前的程序中,我有35 * 48 = 1680个块,每个块包括32 * 32 = 1024个线程。这是否意味着,在全局内核中声明的任何变量都会比在内核外声明的变量花费 N=1024*1680=1 720 320 倍?

4)要使用共享内存,每个变量需要比平常多M倍的内存。这里M是数量blocks。真的吗?


1)是的。每个线程都有一个在函数中声明的非共享变量的私有副本。这些通常进入 GPUregister内存,虽然可以溢出到local memory.

2), 3) and 4)虽然您确实需要该私有内存的许多副本,但这并不意味着您的 GPU 必须同时为每个线程提供足够的私有内存。这是因为在硬件中,并非所有线程都需要同时执行。例如,如果您启动 N 个线程,则可能有一半在给定时间处于活动状态,而另一半在有可用资源运行它们之前不会启动。

线程使用的资源越多,硬件可以同时运行的资源就越少,但这并不限制您可以要求运行的线程数量,因为一旦释放了一些资源,GPU 没有资源的任何线程都将运行。

这并不意味着您应该疯狂地声明大量本地资源。 GPU 速度很快,因为它能够并行运行线程。要并行运行这些线程,需要在任何给定时间容纳大量线程。从一般意义上讲,每个线程使用的资源越多,给定时刻处于活动状态的线程就越少,硬件可以利用的并行性就越少。

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

全局内核中的 CUDA 变量 的相关文章

随机推荐

  • wpf - 验证 - 如何显示工具提示并禁用“运行”按钮

    你好 我需要验证应用程序中的一些文本框 我决定使用验证规则 数据错误验证规则 这就是为什么在我的类中我实现了 IDataErrorInfo 接口并编写了适当的函数 在我的 xaml 代码中 我向文本框添加了绑定和验证规则
  • 如何让 docker-compose 始终从新镜像重新创建容器?

    我的 Docker 镜像构建在 Jenkins CI 服务器上 并推送到我们的私有 Docker 注册表 我的目标是使用 docker compose 配置环境 该环境始终启动图像的原始构建状态 我目前在不同的机器上使用 docker co
  • 从文件夹中的所有工作簿中删除 VBA 代码

    我正在尝试构建代码来远程循环包含 xls 文件的文件夹并删除其中包含的宏 到目前为止 我已经使各个组件正常工作 但在激活各种工作簿 然后以编程方式确保每个文件中引用 Microsoft Visual Basic for Applicatio
  • 使用 read() 方法从 Amazon S3 读取大尺寸 JSON 文件时出现内存错误

    我正在尝试使用 Python 将大量 JSON 文件从 Amazon S3 导入到 AWS RDS PostgreSQL 中 但是 这些错误发生了 回溯 最近一次调用最后一次 文件 my code py 第 67 行 位于 file con
  • Eclipse SVN 同步工作区错误 - 更新 SVN 工作区的同步视图 - java/nio/file/Paths

    我今天更新了 Eclipse SVN 插件 之后我无法将我的工作区与 SVN 存储库同步 我使用的是java 1 6 我也尝试过使用java 1 7 我仍然在 Eclipse 中遇到以下错误 期间发生内部错误 更新 SVN 工作区的同步视图
  • 如何在 OS X 上将进程窗口置于前台?

    我有一个简单的 shell python 脚本 可以打开其他窗口 我想在脚本完成后将运行脚本的终端带到前台 我知道我的父窗口的进程ID 如何将给定窗口置于前台 我想我必须一路从 PID 中找出窗口名称 不确定是否有proper方式 但这对我
  • 嵌套 HTML 列表中的不同字体大小

    我创建了一个嵌套的ol li为我的网站列出 CSS 中的类 但由于每个li显示在不同的font size 虽然我已经定义了font size to it number list ol font normal 1 2em Arial Helv
  • 如何设置等高线标签的背景颜色

    我正在使用命令 axins clabel c levls fontsize 4 fmt 4 2f colors white 为了为我的轮廓生成标签 我希望它们是白色的 颜色 白色 有效 和红色背景 我不知道是否可以为它们指定背景颜色 我迟到
  • eclipse c++ 没有什么可构建错误

    所以我尝试构建一个 C 项目 但随后出现此错误 Build of configuration Release for project p Internal Builder is used for build Nothing to build
  • 类型实例化太深并且可能是无限的

    这里如何处理这个错误呢 我可以限制递归深度 或者只是告诉 TS 可以吗 export type StateUnion
  • 检查当前用户是否是活动目录组的成员

    我需要检查当前用户是否是活动目录组的成员 我首先获取当前用户 如下所示 现在我想知道如何检查此 CurrentUser 是否在活动目录组 CustomGroup 中 string CurrentUser WindowsIdentity Ge
  • Flutter/Dart语言的客户端证书认证

    我对证书世界相当陌生 我决定创建一个必须使用证书来访问 API 的应用程序 我创建了自签名 CA 证书 SSL 证书和客户端证书 我将它们导入 Windows Server 并正确配置 IIS 我可以使用 clientcertificate
  • 当字符串为十六进制且前缀为“0x”时,将字符串转换为整数时不一致

    使用 PHP 5 3 5 不确定这在其他版本上如何工作 我对使用包含数字的字符串感到困惑 例如 0x4B0 or 1 2e3 PHP 处理此类字符串的方式对我来说似乎不一致 只有我一个人吗 或者这是一个错误 或者未记录的功能 或者我只是错过
  • Android 嵌套列表视图

    是否可以 建议使用嵌套列表视图 即包含在另一个列表视图的一行中的列表视图 一个例子是我的主列表显示博客文章 然后在每一行中 您都会有另一个列表视图来显示每个帖子的评论 这将是可折叠的 我今天遇到了同样的问题 所以这就是我解决它的方法 我有一
  • 用于聚合/串联的 SQL 查询

    我有一个这样的表 ID Name 1 john 1 molly 2 greg 2 sean 1 holly 2 mill SQL 查询应该是什么来聚合结果 如下所示 ID Name 1 john molly holly 2 greg sea
  • SQL Server 静默截断存储过程中的 varchar

    根据本次论坛讨论 SQL Server 我使用的是 2005 但我收集这也适用于 2000 和 2008 默默地截断任何varchar您将 varchar 的长度指定为存储过程参数 即使直接使用INSERT实际上会导致错误 例如 如果我创建
  • 对具有输入和输出历史依赖性的操作进行矢量化的最佳方法?

    我的目标是在 numpy 中向量化以下操作 y n c1 x n c2 x n 1 c3 y n 1 If n是时间了 我基本上需要依赖于之前的输入以及之前的输出的输出 我被赋予的价值观x 1 and y 1 另外 这是我的实际问题的通用版
  • 如何在ListView中单击复选框时使按钮栏从底部滑入?

    我有一个带有自定义列表适配器的列表视图 它使用复选框和一些文本视图填充列表视图 当用户选择一个复选框时 我需要一个按钮栏从屏幕底部滑入视图并坐在那里 我已经制作了按钮栏 并且可以通过将其可见性更改为 消失 和 可见 来使其在屏幕上出现和消失
  • 如何用空格/空格替换连字符? php

    我对 PHP 不太了解 但这些天我正在修改现有的脚本 我想知道如何用空白或空白替换 例如 一个变量包含 爱你 我想用 爱你 这样的空格替换它们之间的连字符 我会感谢您的反馈 str str replace Love you now str是
  • 全局内核中的 CUDA 变量

    我的问题是 1 我的理解是否正确 当您在全局内核中声明一个变量时 每个线程都会有该变量的不同副本 这允许您为每个线程在该变量中存储一些中间结果 示例 向量 c a b global void addKernel int c const in