gpt4 book ai didi

multithreading - Lua “just works”附带哪些多线程软件包?

转载 作者:行者123 更新时间:2023-12-01 06:11:27 25 4
gpt4 key购买 nike

在Lua中进行编码,我有一个经过6000次迭代的三重嵌套循环。所有6000次迭代都是独立的,可以轻松并行化。 Lua 的哪些线程程序包可直接从编译,从而在四个或更多内核上获得不错的并行加速

到目前为止,这是我所知道的:

  • luaproc 来自Lua核心团队,但是luaforge上的软件包很旧,并且邮件列表中包含有关该段错误的报告。另外,对我来说,如何使用标量消息传递模型最终将结果获取到父线程中并不是很明显。
  • Lua Lanes提出了一些有趣的主张,但似乎是一个重量级的复杂解决方案。邮件列表上的许多消息都报告说,Lua Lanes无法为其构建或工作。我本人很难让底层的“Lua摇滚”发行机制为我工作。
  • LuaThread需要显式锁定,并且要求线程之间的通信由受锁保护的全局变量来介导。我可以想象更糟,但是我对更高的抽象水平会更满意。
  • Concurrent Lua提供了一个类似于Erlang的有吸引力的消息传递模型,但是它说进程不共享内存。尚不清楚spawn是否实际上可与任何Lua函数一起使用,或者是否存在限制。
  • Russ Cox提出了仅适用于C线程的occasional threading模型。对我没有用。

  • 我将使用这些或任何其他多线程程序包或所有提供新信息的答案,对报告 实际经验的所有答案进行评分。

    作为引用,这是我要并行化的循环:
    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项目或与开发人员联系,以查看他们是否愿意提取我的添加内容。欢迎提出有关如何将其提供给他人的建议。

    关于multithreading - Lua “just works”附带哪些多线程软件包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5689548/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com