CUDA 中的全局内存与共享内存

2023-12-24

我有两个 CUDA 内核可以计算类似的东西。一种是使用全局内存(myfun是一个设备函数,它从全局内存中读取大量数据并进行计算)。第二个内核将该数据块从全局内存传输到共享内存,以便数据可以在块的不同线程之间共享。我使用全局内存的内核比使用共享内存的内核快得多。可能的原因有哪些?

loadArray只复制一小部分d_x to m.

__global__ void mykernel(float *d_x, float *d_y, int *d_z, float *d_u, int N, int K, int D)
{

  int tid = blockIdx.x*blockDim.x + threadIdx.x;
  int index = 0;
  float max_s = 1e+37F;


  if (tid < N)
    {

      for (int i = 0; i < K; i++)
        {

          float s = myfun(&d_x[i*D], d_y, tid);

          if (s > max_s)
            {
              max_s = s;
              index = i;
            }
        }

      d_z[tid] = index;
      d_u[tid] = max_s;
    }
}

使用共享内存:

__global__ void mykernel(float *d_x, float *d_y, int *d_z, float *d_u, int N, int K)
{
  int tid = blockIdx.x*blockDim.x + threadIdx.x;
  int index = 0;
  float max_s = 1e+37F;

  extern __shared__ float m[];
  if( threadIdx.x == 0 )
    loadArray( m, d_x );
  __syncthreads();

  if (tid < N)
    {

      for (int i = 0; i < K; i++)
        {

          float s = myfun(m, d_y, tid);

          if (s > max_s)
            {
              max_s = s;
              index = i;
            }
        }

      d_z[tid] = index;
      d_u[tid] = max_s;
    }
}

问题在于,只有每个块中的第一个线程从全局内存读取到共享内存,这比让所有线程同时从全局内存读取要慢得多。

当单个线程需要访问全局内存中的相邻元素时,使用共享内存是一个优势 - 但这里的情况似乎并非如此。

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

CUDA 中的全局内存与共享内存 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 有没有办法在单击 后重新加载页面?

    我想知道这一点 我有一个简单的 facebook 连接应用程序 只有在您登录并喜欢某个页面后才会显示某些内容 它有效 huzzah 但我想让它在您按下 喜欢 按钮后自动刷新 从而使其更加用户友好 这是一些代码
  • Wicket:如何处理长时间运行的任务

    我已经设置了一个 Wicket Hibernate Spring Web 应用程序 其中涉及收集一些数据 生成并返回一些文件 将其存储在数据库中 创建一些图像并将所有这些显示在网页上 这对于短期运行来说效果很好 但有时收集数据 涉及一些远程
  • 玩!框架 1.2.4 --- C3P0 设置以避免通信链路故障影响空闲时间

    我正在尝试自定义我的 C3P0 设置以避免本文底部显示的错误 这是在这个网址上建议的 http make it open blogspot com 2008 12 sql error 0 sqlstate 08s01 html http m
  • Vanilla Javascript 类中的“计算属性”

    The 计算属性该功能在流行的 JS 框架 React VueJS 中很常见 但是我们如何在普通 JS 中实现这个功能呢 假设给定一个User类 具有dateOfBirth属性 我们想计算它的age 有没有比下面的代码更好的方法来执行此任务
  • 在 View Pager 中的 Fragment 之间传递数据

    在视图分页器中的片段之间传递数据时需要帮助 我们尝试在片段内将数据作为包传递 在 Fragment getInstance 方法内部 尝试从其他 Fragment getArguments 获取数据 活动代码 package com nor
  • jQuery ajax 请求因跨源而被阻止

    如何通过ajax从远程url获取内容 jQuery ajax 请求因跨源而被阻止 控制台日志 跨源请求被阻止 同源策略不允许读取 远程资源位于http www dailymotion com embed video x28j5hv http
  • clang 构建 qt 的 mkspecs 是什么?

    如果我想在Windows下使用gcc构建qt 配置选项是 platform win32 g 但是当我想使用clang构建qt时 该选项是什么 clang windows 组合没有 我认为根据 linux g 和 linux clang 之间
  • Twitter Fabric - 无法解析符号

    我已经为 Android Studio 安装了 Twitter Fabric 插件 这很简单直接 但是当我从 Fabric 对话框复制并粘贴代码时 我的项目无法识别任何 Twitter 对象 例如以下行 private TwitterLog
  • Express 中间件、next 和 Promise

    有一个非常简单的带处理程序的 Express 路由器 router get users userId roles roleId function req res next const roleId req params roleId res
  • 如何知道客户端是否已在套接字中终止

    假设 写完这段代码后我有一个已连接的套接字 if sd accept socket d struct sockaddr client addr alen lt 0 perror accept failed n exit 1 我如何在服务器端
  • 使用 jsdom 加载 ajax 应用程序

    我正在寻找一种解决方案来在服务器上引导客户端应用程序 用 Backbone js 编写 以便我可以为爬虫和非 js 消费者提供正确的内容 我一直在尝试使用 jsdom 和 Node js 来引导应用程序 并且可以加载基本模板内容 但应用程序
  • Sonarqube 6.7x 的安全插件

    我们正在使用 sonarqube 我们喜欢它的工作方式 我们正在尝试扩展 sonarqube 以增强安全性 我尝试为sonarqube 6 x找到一些安全插件来检测Java语言的漏洞 但我找不到任何插件 我想知道是否有任何插件可以查找 so
  • 如何检查麦克风是否可用于录音

    我正在开发一个 WPF 应用程序 需要录制用户的音频消息 我按照代码here http channel9 msdn com coding4fun articles NET Voice Recorder并且它工作正常 现在的问题是 如果它是台
  • 如何比较两个 OrderedDict 字典?

    如何比较两个 OrderedDict 字典 我的结构如下 dict a OrderedDict 1 4 2 5 3 3 4 5 5 4 6 4 7 4 8 3 9 4 dict b OrderedDict 1 4 2 2 3 1 4 4 5
  • 在音频分析中绘制频谱图

    我正在研究使用神经网络的语音识别 为此 我需要获取这些训练音频文件 wav 的频谱图 如何在 python 中获取这些频谱图 有很多方法可以做到这一点 最简单的方法是查看中提出的方法关于 Kaggle 竞赛TensorFlow 语音识别挑战
  • 按值对多维哈希进行排序并打印最高的

    我有一个存储的多维哈希 info 具有以下结构 info os id length foreach os keys info foreach id keys info os print os id gt info os id n if ke
  • 常量截断为整数

    下面的GO程序会报错 fft go 13 constant 6 28319 truncated to integer fft go 13 cannot use 7 k N type int as type float64 in assign
  • 如何在 php 中创建我的网站的日志文件? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想知道如何用 php 创建我的网站
  • UICollectionView 对陈旧数据的断言错误

    在尝试从我的集合视图中卸载一批图像 然后用另一批图像替换它们的过程中 我遇到了一个错误 其中 根据原始图像组或后续图像组是大于还是小于预期的替换图像 发生断言错误 表示 Assertion failure in UICollectionVi
  • CUDA 中的全局内存与共享内存

    我有两个 CUDA 内核可以计算类似的东西 一种是使用全局内存 myfun是一个设备函数 它从全局内存中读取大量数据并进行计算 第二个内核将该数据块从全局内存传输到共享内存 以便数据可以在块的不同线程之间共享 我使用全局内存的内核比使用共享