- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Cuda 编程新手。我可以访问设备“Tesla K10”。我正在处理一个复杂问题,每个问题实例需要大约 20 KB 的内存。现在,由于 cuda 提供并行化,我决定每个 block 使用 96 个线程(记住扭曲)来解决问题的一个实例。现在的问题是我有非常多的问题需要解决(比如说超过 1,600,000 个)。我知道即使在全局内存中也无法满足如此大的内存需求(在我的例子中是 3.5 GBytes,如下面的 DeviceQuery 输出所示)所以我必须一次解决几个问题。
此外,我已经将每个问题映射到每个 block 以解决问题的一个实例。
现在我可以解决大量全局内存中数据的问题。但是共享内存比全局内存更快,所以我计划使用 20 KB 的共享内存(每个问题)。
1) 现在我的困惑是这将只允许我一次将 2 个问题加载到共享内存中以解决(即 40KBytes < 48KBytes 共享内存)。 (基于我对cuda的理解,如有不妥请指正)。
2) 如果我在内核中用这 20 KBytes 声明数组是否意味着这 (20KBytes * number_of_blocks) 将被共享内存使用?number_of_blocks 是指要解决的问题 的数量。我的启动配置是 问题<>>(...)
非常感谢您在这方面的所有帮助。提前致谢。
***My partial Device Query***
Device : "Tesla K10.G1.8GB"
CUDA Driver Version / Runtime Version 6.5 / 5.0
CUDA Capability Major/Minor version number: 3.0
Total amount of global memory: 3584 MBytes (3757637632 bytes)
( 8) Multiprocessors, (192) CUDA Cores/MP: 1536 CUDA Cores
GPU Clock rate: 745 MHz (0.75 GHz)
Memory Clock rate: 524 Mhz
Memory Bus Width: 2048-bit
L2 Cache Size: 4204060 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 2046), 65536 layers
Total amount of constant memory: 65536 bytes
**Total amount of shared memory per block: 49152 bytes**
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 0
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
...
最佳答案
首先,快速总结一下以检查我是否理解正确:
解决这整个问题需要超过 30 GB 的内存,因此很明显您需要将问题集分成几批。使用您的 4 GB 卡(约 3.5 GB 可用于 ECC 等),您可以随时解决大约 150,000 个问题。如果您要对这些进行双缓冲,以允许下一批处理与当前批处理的计算同时传输,那么您将在一个批处理中查看 75K 个问题(如果您需要输出空间等,可能会更少)。
首先要考虑的重要事情是您是否可以并行处理每个问题,即是否可以将多个线程分配给单个问题?如果是这样,那么您应该考虑分配一个线程 block 来解决单个问题,使用共享内存可能值得考虑,尽管您会将每个 SM 的占用限制为两个 block ,这可能会损害性能。
如果您不能在一个问题中并行化,那么您不应该考虑共享内存,因为正如您所说,您会将自己限制为每个 SM 两个线程(从根本上消除了 GPU 计算的优势)。相反,您需要确保全局内存中的数据布局能够实现合并访问 - 这很可能意味着使用 SoA(数组结构)布局而不是 AoS(结构数组)。
您的第二个问题有点令人困惑,不清楚您指的是 GPU 上下文中的“ block ”还是问题上下文中的“ block ”。然而,如果您在内核代码中声明一个 20 KB 的 __shared__
数组,那么该数组将在每个 block 中分配一次,并且每个 block 都将具有相同的基地址。
根据 OP 的评论更新
GPU 包含许多 SM,每个 SM 都有一个小的物理内存,用于 L1 和共享内存。在您的情况下,K10,每个 SM 都有 48 KB 可用作共享内存,这意味着任何时候在 SM 上执行的所有 block 都可以在它们之间使用最多 48 KB。由于每个 block 需要 20 KB,因此您可以随时在 SM 上执行最多两个 block 。这不会影响您可以在启动配置中设置多少 block ,它只会影响它们的调度方式。 This answer更详细地讨论(尽管对于每个 SM 有 16 KB 的设备)和 this (very old) answer解释多一点,尽管最有用(和最新)的信息可能在 CUDA education pages 上.
关于c++ - 如果我使用共享内存,可以分配多少 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30209088/
只是想知道是否有可能找出谁从 Windows 共享中读取了文件(最好使用 .NET,但 win32 native 可以)? 我想做的是创建类似 awstats 的东西对于 Windows 共享,这样我
是否可以列出 Intent.ACTION_SEND ?我的意思是我需要知道是否有人通过 action_send 在 Facebook 上分享或在 Twitter 上发推文。 最佳答案 也许你想要一个更
我正在使用 Google Apps 应用程序。实际上,我想在不使用密码的情况下访问另一个 ID。我使用了 OAuth,它运行良好。但我无法分享特定人的日历。我尝试了以下代码。 GoogleOAuthP
我怎样才能只创建模拟器...可能吗?我知道,设备需要分发证书。 最佳答案 您只需将应用程序目录从 iPhone 模拟器复制到另一个实例/操作系统版本,它就应该可以工作。 因此,如果您想分发 3.1.3
我想使用多阶段构建来避免每次构建应用程序时都下载我的 Java 项目所需的所有 Maven 依赖项。 我正在考虑在第一阶段解决 Maven 依赖项,然后在第二阶段构建应用程序,这将需要访问在前一阶段下
我正在寻找保护用户下载内容的初步想法。用户下载充满有趣资源的 zip 文件,这些资源被提取到本地文件系统中以供应用程序使用。我的目标是防止用户通过互联网将下载的资源共享给其他用户(假设他们获得了对文件
我想知道在具有移动和桌面版本的网站上共享身份验证、 session 管理等的最佳方法是什么。我们正在运行 Tomcat,并且更愿意将移动站点和桌面站点的应用程序保持在不同的节点上。 我看过类似的帖子,
我发现了这个单例的实现。我怎样才能创建指向它的指针或共享指针?` 为什么这不起作用?自动测试 = Singleton::Instance(); class Singleton { public: st
我有一个 heroku 项目,我想与其他人分享。作为the instructions describe ,我使用 virtualenv 来管理环境和依赖项。有没有办法在新机器上从 requiremen
Maven 将所有 jar 存储在本地存储库 ~/.m2/repository/ 下。用户多时占用空间大。 那么,是否可以由多个用户共享这个本地存储库,或许在不同的目录结构下? 最佳答案 简单的回答
为什么共享 worker 在重新加载页面时死了?应该是复活了我该如何解决这个问题? 重装前 重新加载后(在example.com上按F5) parent worker var port = new S
我正在开发多个小型应用程序,这些应用程序将共享通用和共享模块和 Assets 。 关于如何创建项目结构的部分在这里回答:https://stackoverflow.com/a/61254557/135
我在 RHEL 上安装了 jenkins (localhost:8080),我能够成功地构建代码 现在,我想设置主/从代理。 我的笔记本电脑将充当“Master Jenkins”,而我同事的笔记本电脑
我有这种方法可以根据我使用的 EXTRA_STREAM 共享文本文件或图片。我有这两个我可以选择 i.putExtra(Intent.EXTRA_STREAM, uri); i.putExtra(In
我正在使用 R 中的一个数据分析项目,我正在使用 R 中的敏感私有(private)数据进行一些逻辑和多级建模。我爱上了 。预订 包,我已经创建了一本关于我们的工作流程和分析管道的相当广泛的书。问题是
我正在构建的应用程序需要在 UITabBarController 框架内为多个 View (及其 subview )显示共享的自定义 UIToolbar。自定义工具栏的内容在所有 View 中都是相同
我有多个应用程序,我想共享相同的 eslint 配置: - project_root/ - app1/ - node_modules/ - eslint.rc
我有多个 Electron 应用程序。一个是主应用程序,其他几个功能应用程序。主应用程序上的按钮很少,这将导致功能应用程序打开。这里的问题是每个应用程序都有一个主进程,该进程导致要利用更多的CPU。是
我正在开发一个 Node.js 后端,它通过 websocket 与一些桌面客户端进行通信,而服务器端的通信是从 Web 前端发起的。一切正常,因为我将 SockJS Connection 实例存储在
我对托管多个网站的服务器上的多个用户帐户使用私有(private) SSH key 和无密码条目。 我为每个用户帐户使用相同的私钥。 (因为我很懒?或者那是“正确”的方式)。 我现在想授权该国不同地区
我是一名优秀的程序员,十分优秀!