multithreading之Lua “just works”附带哪些多线程软件包
mfryf
阅读:42
2024-02-23 17:27:14
评论:0
在Lua中进行编码,我有一个经过6000次迭代的三重嵌套循环。所有6000次迭代都是独立的,可以轻松并行化。 Lua 的哪些线程程序包可直接从和编译,从而在四个或更多内核上获得不错的并行加速?
到目前为止,这是我所知道的:
luaproc
来自Lua核心团队,但是luaforge上的软件包很旧,并且邮件列表中包含有关该段错误的报告。另外,对我来说,如何使用标量消息传递模型最终将结果获取到父线程中并不是很明显。 spawn
是否实际上可与任何Lua函数一起使用,或者是否存在限制。 我将使用这些或任何其他多线程程序包或所有提供新信息的答案,对报告 实际经验的所有答案进行评分。
作为引用,这是我要并行化的循环:
for tid, tests in pairs(tests) do
local results = { }
matrix[tid] = results
for i, test in pairs(tests) do
if test.valid then
results[i] = { }
local results = results[i]
for sid, bin in pairs(binaries) do
local outcome, witness = run_test(test, bin)
results[sid] = { outcome = outcome, witness = witness }
end
end
end
end
run_test
函数作为参数传递,因此,只有当程序包可以并行运行任意函数时,它对我才有用。我的目标是足够的并行度,以在6至8个内核上获得100%的CPU利用率。
请您参考如下方法:
诺曼(Norman)关于luaproc写道:
"it's not obvious to me how to use the scalar message-passing model to get results ultimately into a parent thread"
我在处理一个用例时遇到了同样的问题。我喜欢lua proc,因为它实现起来简单,轻便,但是我的用例中有调用lua的C代码,它触发了一个协同例程,该例程需要发送/接收消息才能与其他luaproc线程进行交互。
为了实现我想要的功能,我必须向luaproc添加功能,以允许从父线程或未从luaproc调度程序运行的任何其他线程发送和接收消息。另外,我的更改允许使用从luaproc.newproc()创建的lua状态创建的协程中使用luaproc发送/接收。
我向api添加了一个额外的luaproc.addproc()函数,该函数将从不受luaproc调度程序控制的上下文中运行的任何lua状态中调用,以便使用luaproc进行自身设置以发送/接收消息。
我正在考虑将源代码发布为新的github项目或与开发人员联系,以查看他们是否愿意提取我的添加内容。欢迎提出有关如何将其提供给他人的建议。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。