Perl 6 中什么时候“race”是值得的?

2023-12-24

race https://docs.perl6.org/routine/race自动将可迭代对象上的操作划分为线程。例如,

(Bool.roll xx 2000).race.sum

会自动将 2000 长数组的总和分成 4 个线程。然而,基准测试显示 https://gist.github.com/Whateverable/50fbba42544f1472543aa997f91a4c1d这比 if 慢得多race没有就业。有时候是这样的即使你让数组更大 https://gist.github.com/Whateverable/57fd99f76f59e1af97db01544a7b8f2c。 即使当每个版本的非自动线程版本变得越来越快 https://gist.github.com/Whateverable/81191278502dc1a352a254b647e28308. (自动线程也变得更快 https://gist.github.com/Whateverable/28dc7965c035258f14585ec8c9cc5a21,但仍然比不使用它慢两倍。)

那么问题是:值得使用的原子操作的最小大小是多少?添加到顺序操作的开销是固定的还是可以以某种方式减少?

Update: 实际上,的表演hyper(类似于比赛,但有保证的有序结果)随着时间的推移似乎变得越来越糟 https://gist.github.com/Whateverable/e09069f58f4712bf2c4b32b3bbf8401b,至少对于小尺寸来说,它们仍然是默认批量大小(64)的整数倍。相同的发生在race https://gist.github.com/Whateverable/319587af276dddbeec2af7cefc2c5aa2


简短的回答:.sum不够聪明,无法批量计算总和。

所以你在这个基准测试中有效地做的是建立一个HyperSeq / RaceSeq但随后不进行任何并行处理:

dd (Bool.roll xx 2000).race;
# RaceSeq.new(configuration => HyperConfiguration.new(batch => 64, degree => 4))

所以你一直在测量.hyper / .race高架。你看,此刻,只有.map and .grep已实施于HyperSeq / RaceSeq。如果你给that要做一些事情,例如:

# find the 1000th prime number in a single thread
$ time perl6 -e 'say (^Inf).grep( *.is-prime ).skip(999).head'
real    0m1.731s
user    0m1.780s
sys     0m0.043s

# find the 1000th prime number concurrently
$ time perl6 -e 'say (^Inf).hyper.grep( *.is-prime ).skip(999).head'
real    0m0.809s
user    0m2.048s
sys     0m0.060s

正如您所看到的,在这个(小)示例中,并发版本的速度是非并发版本的 2 倍以上。但使用更多的CPU。

Since .hyper and .race可以正常工作,性能略有提高,如您所见在此图中 https://gist.github.com/Whateverable/ee98308dcca3561d46bff8128bc4de20.

其他功能,例如.sum可以实施为.hyper / .race。然而,我现在会推迟这一点,因为我们需要对我们的工作方式进行一些小的重构.hyper and .race:目前,批次无法向“主管”传达其完成工作的速度。如果我们想让主管进行调整,例如,主管需要这些信息。 batch-size,如果它发现默认的batch-size太小并且我们的开销太大。

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

Perl 6 中什么时候“race”是值得的? 的相关文章

  • 使用 Golang 通道处理 HTTP 请求

    我正在尝试构建一个简单的 Golang Appengine 应用程序 它使用通道来处理每个 http 请求 原因是我希望每个请求执行合理的大型内存计算 并且每个请求都以线程安全的方式执行 即来自并发请求的计算不会混合 这一点很重要 本质上
  • 如何从命令行提供非 slurpy 数组或命名数组?

    首先 raku perl6 非常棒 克罗也是如此 只花了一个周末就坠入爱河 然而现在我偶然发现了一些非常简单的事情 如果我在多重调度 MAIN 中使用 slurpy 参数 则会被识别并完美运行 multi MAIN config add h
  • 编写潜在并发问题的证明

    我正在阅读 Java 并发实践 并尝试编写一段代码来表明第 3 5 1 章中作为示例提供的类确实会引入问题 public class Holder public int n public Holder int n this n n publ
  • Perl 6:检查元素是否在列表中的最佳方法是什么?

    假设我有一个大数组 stuff and a thing 我想知道是否 thing is in stuff 在 Perl 6 中做到这一点的最佳方法是什么 我所说的 最好 是指 惯用的 可读的 高性能的 不一定按这个顺序 实际上有两个单独的案
  • 在 Swift async/await 中,我可以使用 Lock 还是 Semaphore

    这不是问题 这是一个想寻求帮助以及专业指导的问题 根据文档 Sendable 类型可以在 Swift Concurrency 中安全地传递 在旧项目中并非所有类型都是可发送的 并且可能使用Cocoa类型 但它们是线程安全的 例如 class
  • 哈希组合器无用,或者无法修改不可变哈希?

    这段代码 constant what doesn t gt change what will gt change 应该说一些类似于 无法修改不可变哈希 的内容 然而 它说 Potential difficulties Useless use
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • Laravel - 停止并发访问记录

    在 Laravel 中 有什么方法可以停止同时与同一条记录交互 例如 如果用户 A 正在编辑一条记录 那么我同时需要阻止用户 B 编辑同一条记录 注意 我在 Laravel 5 2 中使用 SESSION DRIVER file 目前大约有
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • Condition 接口中的 signalAll 与对象中的 notificationAll

    1 昨天我才问过这个问题条件与等待通知机制 https stackoverflow com questions 10395571 condition vs wait notify mechanism 2 我想编辑相同的内容并在我的问题中添加
  • 是否有一种更简单的方法可以并行运行命令,同时在 Windows PowerShell 中保持高效?

    此自我回答旨在为那些受困于 Windows PowerShell 并由于公司政策等原因而无法安装模块的用户提供一种简单且高效的并行替代方案 在 Windows PowerShell 中 built in可用的替代方案local并行调用是St
  • 乐观并发:IsConcurrencyToken 和 RowVersion

    我正在创建将在我的应用程序中使用的默认并发策略 我决定采取乐观的策略 我的所有实体都映射为Table per Type TPT 使用继承 我很快了解到 在实体框架上使用带有继承的 RowVersion 类型的列时存在问题 Product I
  • duckmap 到底有什么作用?

    From 文档 https docs perl6 org routine duckmap duckmap将会应用 block每个元素上并返回一个新列表 其中包含块的已定义返回值 对于未定义的返回值 duckmap如果该元素实现了 将尝试下降
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 什么是“非阻塞”并发?它与普通并发有何不同?

    什么是 非阻塞 并发 它与使用线程的普通并发有何不同 为什么不在所有需要并发的场景中都使用非阻塞并发呢 使用非阻塞并发有开销吗 我听说Java中可以实现非阻塞并发 我们是否应该在特定场景下使用此功能 将这些方法之一与集合一起使用是否有区别或
  • cudaDeviceScheduleBlockingSync 和 cudaDeviceScheduleYield 之间有什么区别?

    正如这里所说 如何减少 CUDA 同步延迟 延迟 https stackoverflow com questions 11953722 how to reduce cuda synchronize latency delay 等待设备结果有
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • ArrayDeque 和 LinkedBlockingDeque

    只是想知道为什么他们做了一个LinkedBlockingDeque而同一个非并发对应物是ArrayDeque它基于可调整大小的数组 LinkedBlockingQueue使用一组节点 例如LinkedList 尽管没有实施List 我知道可
  • 在Linux中修改子进程的全局变量

    我有 C 背景 在 C 并发方面遇到了一些困难 我不会对你撒谎 这是我必须为学校做的一个项目的一部分 虽然在专业上我曾使用过高级语言 但我的高级论文教授强迫全班同学使用 C 语言编写代码 我们大多数人几乎没有这方面的经验 从而让我们陷入了困
  • .NET 或 Windows 同步原语性能规范

    我目前正在写一篇科学文章 我需要非常准确地引用 有人可以向我指出 MSDN MSDN 文章 一些已发表的文章来源或一本书 我可以在其中找到 Windows 或 NET 同步原语的性能比较 我知道这些是按性能降序排列的 互锁 API 关键部分

随机推荐

  • 有与 PadLeft/PadRight 等效的方法吗?

    只是想知道 VBA 中是否有与 VB NET 的 PadLeft 和 PadRight 方法等效的方法 截至目前 每当我想要获取一个字符串并使其具有前导空格的固定长度时 我都会根据字符串的长度执行 For Next 循环 例如 我将使用以下
  • 将向量的唯一值映射到连续整数的有效方法是什么?

    我在 R 中有一个数据框 其中包含非连续数字的向量 data SiteID 我想映射到一个连续数字的向量 data site 的独特价值data SiteID 在每个站点内 我想绘制地图data TrtID to 0 where data
  • 可以在 ASP.net MVC3 中使用嵌套视图模型吗?

    这是我正在做的事情的简化版本 我创建了一个包含公司数据的视图模型 公司有3个地址 因此 为了变得聪明 我创建了一个 AddressViewModel 和一个 address 部分 我遇到的问题是 虽然我可以将 AddressViewMode
  • 插件如何在 play 2.4 中使用注入和对象而不是类

    我需要迁移 play 2 4 的 play mailer 插件 我检查了 play 2 4 的一些示例 发现所有示例都使用插件类 我不想将其转换为类 有什么办法让它与对象一起工作吗 Sample class MyComponent Inje
  • 尝试将不正确的值读入变量会改变其值吗?

    If the iostat如果存在关键字 则如果发生 I O 错误 程序不会停止 然后 如果我尝试将不正确的值读入标量变量 i比如说 这个变量会保持不变吗 以下似乎有效 program test integer i stat i 1 do
  • 从文件而不是 URL 加载时 UIWebView 内存泄漏?

    我有一个包含 UIWebView 操作系统 3 0 的 UIViewController 如果我用文件数据加载它 一旦点击 后退按钮 并且视图被关闭 我就会看到EXEC BAD ACCESSWebCore 对象释放 SharedBuffer
  • 模板类中模板化成员函数的特化

    我有一个带有模板化成员函数的模板化类 template
  • Laravel Eloquent - 对多个关系列求和

    我不是一个Eloquent大师 我做了很多研究 但无法重现我所期望的 我有以下型号
  • MVC .NET 的 CanCan gem

    我正在寻找 NuGet 包 它提供与 Rails 中的 CanCan gem 类似的功能 https github com ryanb cancan https github com ryanb cancan 有谁知道提供类似功能的插件吗
  • MySQL数据库变更跟踪

    您使用什么工具来跟踪 MySQL 数据库中的更改 目前 我所在的项目使用纯文本文件 通过 SVN 控制版本 在更改数据库时手动添加 SQL 语句 许多更改时不时就会神奇地消失 我们现在正在寻找更好的方法来更改跟踪我们的数据库 EDIT 我忘
  • CSS 类似表格的样式

    I want to create the following table like element in my page 我曾经使用过 table table 标签 但现在我将所有网站切换为 CSS 并且使用 DIV 等 我想知道实现这种元
  • 嵌入式 powerbi 报告未显示移动视图

    我们创建了一个包含桌面版本和移动版本的 PowerBI 报告 当我们在输入正确的信息后在以下示例站点进行测试时 它会正确显示桌面和手机视图 https microsoft github io PowerBI JavaScript demo
  • appium 的此会话问题不支持定位器策略“css 选择器”

    由于我是移动自动化的新手 我一直在尝试使用 appium maven 和 eclipse 运行简单的活动 但是 当我尝试运行计算器应用程序时 它会打开 但元素无法访问 这是我用来运行一个简单计算器的代码 BeforeClass public
  • Makefile 匹配任何目标/任务

    我想编写一个可以与任何任务一起运行的 makefile 并且只需回显所有任务名称 有什么办法可以做到这一点吗 Like echo 假设您的 make 是 GNU make 或类似的 make 请使用以下 Makefile PHONY all
  • 检查表A中的条目是否存在于表B中

    我有一个定义表 我知道它维护得不是很好 我们称之为table A 我还有另一张桌子 称之为table B 要小得多 理想情况下应该是subset of table A但我知道table A有点陈旧并且不包含新条目Table B 请注意 表
  • 如何将Python中存储在变量中的两个整数相除?

    我有两个数字存储在变量 a 和 b 中 我想看看这两个数字的比率在 python 中是否是整数 然而当我尝试时 result a b 它给了我一个 SyntaxError invalid syntax 但是如果我说 result a b 它
  • 将上传的图像保存到 localStorage(chrome 扩展)

    我无法确定如何将用户在我的选项页面中输入的上传图像存储在 localStorage 中 没有太多关于如何做到这一点的文档 因为有一段时间它是一个已知错误 https bugs chromium org p chromium issues d
  • 在 Phoenix 应用程序中设置异常的自定义响应

    我正在使用 ecto 编写 phoenix 应用程序 并在测试中包含以下代码片段 ok data Poison encode email email protected cdn cgi l email protection password
  • 在精灵中使用徽标标签是好是坏?

    在构建网页时 我的一位同事使用 CSS 背景图像属性显示任何徽标 而不是使用 HTML 嵌入图像 img 标签 同事报告说这是为了减少 HTTP 请求的数量 他还向我展示了图像精灵 http www google co in images
  • Perl 6 中什么时候“race”是值得的?

    race https docs perl6 org routine race自动将可迭代对象上的操作划分为线程 例如 Bool roll xx 2000 race sum 会自动将 2000 长数组的总和分成 4 个线程 然而 基准测试显示