cudaDeviceScheduleBlockingSync 和 cudaDeviceScheduleYield 之间有什么区别?

2024-05-26

正如这里所说:如何减少 CUDA 同步延迟/延迟 https://stackoverflow.com/questions/11953722/how-to-reduce-cuda-synchronize-latency-delay

等待设备结果有两种方法:

  • “轮询” - 在旋转中消耗 CPU - 以减少等待结果时的延迟
  • “阻塞”——线程处于休眠状态,直到发生中断——以提高总体性能

For “轮询”需要使用CudaDeviceScheduleSpin.

But for “封锁”我需要用什么CudaDeviceScheduleYield or cudaDeviceScheduleBlockingSync?

之间有什么区别cudaDeviceScheduleBlockingSync and cudaDeviceScheduleYield?

cudaDeviceScheduleYield如所写:http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/group__CUDART__DEVICE_g18074e885b4d89f5a0fe1beab589e0c8.html http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/group__CUDART__DEVICE_g18074e885b4d89f5a0fe1beab589e0c8.html“指导 CUDA放弃它的线程等待设备结果时。这个可以增加延迟等待设备时,但可以提高性能与设备并行执行工作的 CPU 线程数。” - 即等待结果而不在旋转中烧毁 CPU - 即“阻塞”。 cudaDeviceScheduleBlockingSync 也是 - 等待结果而不在旋转中烧毁 CPU。但是有什么区别呢?


据我了解,这两种方法都使用轮询来同步。在伪代码中CudaDeviceScheduleSpin:

while (!IsCudaJobDone())
{
}

whereas CudaDeviceScheduleYield:

while (!IsCudaJobDone())
{
     Thread.Yield();
}

i.e. CudaDeviceScheduleYield告诉操作系统它可以中断轮询线程并激活另一个线程执行其他工作。这提高了 CPU 上其他线程的性能,但也会增加延迟,以防 CUDA 作业在轮询线程以外的另一个线程此时处于活动状态时完成。

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

cudaDeviceScheduleBlockingSync 和 cudaDeviceScheduleYield 之间有什么区别? 的相关文章

  • OpenCV 2.4.3rc 和 CUDA 4.2:“OpenCV 错误:没有 GPU 支持”

    我在这张专辑中上传了几张截图 https i stack imgur com TELST jpg https i stack imgur com TELST jpg 我正在尝试在 Visual Studio 2008 中的 OpenCV 中
  • NVCC 警告级别

    我希望 NVCC 将以下警告视为错误 warning calling a host function foo from a host device function bar NVCC 文档 NVIDIA CUDA 编译器驱动程序 NVCC
  • CUDA 模型 - 什么是扭曲尺寸?

    最大工作组大小和扭曲大小之间有什么关系 假设我的设备有 240 个 CUDA 流处理器 SP 并返回以下信息 CL DEVICE MAX COMPUTE UNITS 30 CL DEVICE MAX WORK ITEM SIZES 512
  • 使用 GPU 进行 Matlab 卷积

    我用gpuArray尝试了matlab的卷积函数conv2 convn 例如 convn gpuArray rand 100 100 10 single gpuArray rand 5 single 并将其与 cpu 版本 convn ra
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 异步/等待 - 是*并发*吗?

    我一直在考虑 C 5 中新的异步内容 并且出现了一个特殊问题 据我了解 await关键字是一个简洁的编译器技巧 语法糖来实现连续传递 http en wikipedia org wiki Continuation passing style
  • 在 eclipse pdt 中同步时 - 比较 php 文件的版本时出现空白灰色窗口

    我已经安装了适用于 64 位 Linux 的 Eclipse PDT Helios SR1 GTK Ubuntu Maverick 全新安装 我添加了用于使用 Subversion 的 Subversive 插件 并安装了 SVNKit 1
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • 使用 Cuda 并行读取多个文本文件

    我想使用 CUDA 在多个文件中并行搜索给定字符串 我计划使用 pfac 库来搜索给定的字符串 问题是如何并行访问多个文件 示例 我们有一个包含 1000 个文件的文件夹 需要搜索 这里的问题是我应该如何访问给定文件夹中的多个文件 应该动态
  • Java ReentrantReadWriteLocks - 如何在读锁中安全地获取写锁?

    我现在在我的代码中使用可重入读写锁 http java sun com javase 6 docs api java util concurrent locks ReentrantReadWriteLock html同步对树状结构的访问 这
  • 我应该在请求中创建 executorService 还是在 Web 应用程序中共享一个实例?

    我正在向基于 Jersey 的 Web 服务添加一个新端点 支持端点的逻辑需要对另一个服务进行 10 到 50 次调用 这些调用是独立的并且可以并行化 因此我正在考虑使用执行器服务将工作分配到多个线程 我想知道是否应该为每个请求实例化一个
  • 对 CUDA 操作进行计时

    我需要计算 CUDA 内核执行的时间 最佳实践指南说我们可以使用事件或标准计时函数 例如clock 在Windows中 我的问题是使用这两个函数给出了完全不同的结果 事实上 与实践中的实际速度相比 事件给出的结果似乎是巨大的 我实际上需要这
  • CUDA-Kernel 应该根据块大小动态崩溃

    我想做稀疏矩阵 密集向量乘法 假设用于压缩矩阵中条目的唯一存储格式是压缩行存储 CRS 我的内核如下所示 global void krnlSpMVmul1 float data mat int num nonzeroes unsigned
  • C++ 类内线程并发

    我试图在一个类中运行两个并发线程 它们都使用相同的函数打印数据 使用 std lock guard 进行作用域锁 问题是只有第一个线程被触发 第二个线程永远不会被调用 include
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • 如何降级cuda版本

    我目前使用的是 cuda 版本 4 2 但我需要将其更改为 3 1 是否可以卸载当前版本 4 2 版 然后安装以前的版本 3 1 版 编辑 请参阅我的操作系统是linux ubuntu 10 04 64位 编辑 我找到了如何获取 3 1 版
  • 并发集合和独特元素

    我有一个并发BlockingCollection具有重复的元素 如何修改它以添加或获取不同的元素 默认后备存储BlockingCollection is a ConcurrentQueue 正如其他人指出的那样 使用它来添加不同的项目相当困
  • 在文件复制/上传未完成时读取文件内容

    例如 每 5 秒 服务器检查文件是否已添加到特定目录 如果是 它会读取并处理它们 相关文件可能非常大 例如 100 Mo 因此将它们复制 上传到上述目录可能会很长 如果服务器尝试访问尚未完成复制 上传的文件怎么办 JAVA是如何管理这些并发
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin

随机推荐

  • 是否可以将内存地址保存到字符串中?

    说我有一个对象 MyObj stuff 为了获得东西的地址 我会打印 cout lt lt stuff lt lt endl 0x22ff68 我想将 0x22ff68 保存在字符串中 我知道你不能这样做 string cheeseburg
  • nuget 对文件名中的空格进行编码

    我使用 pack 命令创建了一个 nuget 包 http docs nuget org docs reference command line reference Pack Command http docs nuget org docs
  • Sass 部分导入

    我有 sass 编译的问题 当我有一个部分的项目时 partial scss并将其导入到多个部分文件中 因为它包含颜色变量 它将多次出现在编译的 css 中 这很丑陋 因为同一个规则会多次 推翻 自身 这使得调试信息 chromium 开发
  • 使用自动热键中的热键切换键

    So I tried to automate running in a game where the map is huge and I have to run miles I wanted to toggle on the hotkey
  • 如何在 R 中解析年份+周数?

    有没有一种好方法可以将年 周数转换为R中的日期 我已经尝试过以下方法 gt as POSIXct 2008 41 format Y U 1 2008 02 21 EST gt as POSIXct 2008 42 format Y U 1
  • android eclipse 中显示的是单独的屏幕而不是 tabhost

    我是android的自学者 我有两个屏幕 第一个屏幕包含一个编辑文本和一个按钮 编辑文本用于获取用户的输入 按钮用于调用第二个屏幕上的 tabhost 活动 在运行时 收到用户输入后 它应该显示适当的值 根据用户的输入 到第二个屏幕上的 t
  • Git 合并删除文件

    这是第二次发生这种情况 当我进行合并时 我后来意识到正在合并的分支中的一些文件不再位于正在合并的分支中 最新的例子是我们有一个功能分支 我一直在合并主开发分支中的更改 合并后我们丢失了很多文件 并且它们现在不存在于功能分支中 为什么会出现这
  • 测试 gRPC 服务

    我想测试用 Go 编写的 gRPC 服务 我使用的示例是 Hello World 服务器示例grpc go 仓库 https github com grpc grpc go blob master examples helloworld g
  • Fortran 中的共享库,最小示例不起作用

    我试图了解如何在 Linux 下的 Fortran 中动态创建和链接共享库 我有两个文件 第一个 liblol f90 看起来像这样 subroutine func print lol end subroutine func 我用它编译gf
  • 使用 librsvg / rsvg 通过 ImageMagick 转换 SVG 图像

    我知道这个问题在这里有几个答案版本 如下所示 ImageMagick 将 SVG 转换为 PNG 无法在启用 RSVG 的情况下工作 https stackoverflow com questions 11592085 imagemagic
  • 返回表中不存在的记录

    如何获取表中没有记录的ID 例如 select id name mail from users where id in 2 3 4 5 6 该查询返回记录 2 3 4 的输出 但不返回记录 5 和 6 因为表中不存在记录 现在我想知道表中没
  • 如何安装 leiningen 插件?

    如何安装 leiningen 插件 例如 leiningen run 我看到这个叫做 clojars org 的东西 以及如何 推 它 但我没有看到任何关于从中 拉 的东西 如果 Clojars 上有可用的插件 例如 lein run 只需
  • 在 PHP Codeigniter 中向 form_submit 添加一个类

    我正在尝试在 PHP Codeigniter 中向 form submit 添加一个类 我正在使用以下代码 attributes1 array class gt btn btn danger echo form submit loginSu
  • 从键值为空数组的 JS 对象中删除

    我正在尝试从值为 Array 0 的对象中删除键 这是对象 fruit Array 1 dairy Array 2 vegetables Array 0 这是期望的结果 fruit Array 1 dairy Array 2 到目前为止 我
  • 谷歌地图路线生成与航点

    我有一个现有的应用程序 可以跟踪车辆并在地图上渲染其折线 并且我希望能够使用路由服务将这些折线导入到另一个应用程序中 以便导入的折线捕捉到道路并可以拖动 ETC 我目前正在做的是编码 var encoded path google maps
  • 添加 UITabBarController 时出错

    我在用着单点触控C 编写具有多个不同屏幕的 iPhone 应用程序 为了简单起见 我将仅描述导致我遇到问题的控制器的几个屏幕 我遇到的问题是 当我创建一个继承自的类时 我收到此错误消息UITabBar控制器 应用程序窗口应该有一个根视图控制
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 如何在 MongoDB 中获取连接的客户端

    我正在编写一个使用 mongo 作为数据库的应用程序 我想打印连接到数据库的客户端 例如打印他们的ip 我怎样才能得到这些信息 我尝试使用 db serverStatus connections 但它给了我可以访问我的数据库的计算机数量 您
  • 从本地存储中删除数组项

    我在本地存储中存储了一个数组 将其解析为 json 我将它放回到一个对象中 从中删除了一些项目 我需要使用本地存储中的新值更新密钥 var counter 0 1 2 var count counter 0 var questions lo
  • cudaDeviceScheduleBlockingSync 和 cudaDeviceScheduleYield 之间有什么区别?

    正如这里所说 如何减少 CUDA 同步延迟 延迟 https stackoverflow com questions 11953722 how to reduce cuda synchronize latency delay 等待设备结果有