LuaJIT 和 GCC:核心数

LuaJIT and GCC: number of cores

背景: 我阅读了几篇关于 LuaJIT 和 C 语言之间性能基准的文章。 有不同的结论,所以我尝试针对我自己的用例比较 LuaJIT 和 C 的速度。

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

我发现(在我的测试中)LuaJIT 确实可以胜过 GCC(10% 到 15%)。 (我使用了 FFI 数组,以及 gcc 的 -o3 优化)

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

不过也很厉害... 多年来 'common knowledge' 动态脚本语言总是比 C 慢(很多)。令人惊讶的是,这种惊人的 LuaJIT 速度不是由大公司的力量建立的,而是由一个人的努力建立的男人.

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

问题: 真的要分两个核心工作吗?

使用 LuaJIT,我可以想象一个进程为 JITcompilation 部分工作,另一个进程为实际计算工作。 或者 'garbage collection' 在单独的进程中运行? (我对垃圾回收一无所知)

但是当 C 程序是 运行 时,我看到相同的 activity-profile... 同样没有 gcc-optimization 有两个核心处于活动状态。 (但是程序运行速度慢了3倍。)

难道是Windows把工作分给了两个核心?? 我不是在寻找深入的技术解释。 我也没有兴趣尝试从 LuaJIT 或 C 中获得更快的速度。 该程序已经足够快了。

我只是好奇是否真的有两个核心'at work'。 如果可能的话,我更喜欢通俗易懂的答案。

It is amazing that this astonishing LuaJIT-speed is not established by the power of a large corporation, but by the efforts of one man.

“出色的程序员以及在哪里找到他们”:-)

Could it be that Windows is dividing the work over two cores?

是的,Windows交换内核以减少内部温差CPU:单个内核的工作由两个内核平分,一次只有一个内核处于活动状态。