LuaJIT和GCC:核心数量

背景: 我读了几篇有关LuaJIT和C语言性能基准的文章。 它们得出了不同的结论,所以我试图比较LuaJIT和C在我的用例中的速度。

我测试的函数使用了一个大量的数字值数组和几个数学公式。 这是我正在制作的CAD模块中计算密集部分的一部分。 只是循环和公式。

我发现(在我的测试中)LuaJIT确实可以超过GCC(大约10到15%)。 (我使用FFI数组和-o3优化的GCC)

这有点令人沮丧...... 我喜欢这个想法,即对于真正快速的程序,旧的C语言仍然是最好的。 LuaJIT使用带有FFI的C风格数组有点令人安慰:-)

但这也是惊人的...... 多年来,“常识”是动态脚本语言总是(远远)比C慢。 精彩的是,这种惊人的LuaJIT速度不是由一个大公司的力量所确定,而是由一个人的努力所确定的。

核心数量: 在这些基准测试中,我查看了任务管理器中的性能选项卡。 在测试期间,有两个核心显示高活动量,另外两个核心保持低活动量。 这是LuaJIT和GCC的情况(有和没有优化) (我在Win7机器上进行测试。)

问题: 工作真的分摊到了两个核心吗?

对于LuaJIT,我可以想象一个进程用于JIT编译部分,另一个进程用于实际计算。 或者也许'垃圾回收'在单独的进程中运行? (我没有垃圾收集的知识)

但是当C程序在运行时,我看到相同的活动概况... 即使没有gcc优化,也有两个核心处于活动状态。 (但程序运行3倍慢。)

可能是Windows将工作分摊到了两个核心?? 我不想寻找深入的技术解释。 我也对尝试从LuaJIT或C中获得更多速度没有兴趣。 程序已经足够快了。

我只是好奇是否确实有两个核心正在“工作”。 如果可能,我更喜欢用外行人的术语回答。

原文链接 https://stackoverflow.com/questions/70282457

点赞
stackoverflow用户1847592
stackoverflow用户1847592

这是一个惊人的事实:LuaJIT 的惊人速度不是靠一家大公司的力量建立的,而是靠一个人的努力。

“奇妙的程序员以及他们的位置” :-)

可能是 Windows 把工作分配给了两个核心吗?

是的,Windows 会交换核心以减少 CPU 内部的温差:一个单核心的作业平均分配给两个核心,但每次只有一个核心处于活动状态。

2021-12-08 23:49:51