gpt4 book ai didi

c - Lua调用C函数的性能

转载 作者:太空狗 更新时间:2023-10-29 17:04:20 27 4
gpt4 key购买 nike

我注意到我的 C 程序的性能因 -fPIcflags而异。当我使用它时,我的程序比没有它时慢大约 30%。我将它与调用 C 函数的 Lua 程序(所有繁重的计算都在其中完成)进行比较。首先,我使用 C 函数创建了一个共享对象,因此必须使用 -fPIcflags。性能与带有 -fPIcflags的 C 代码非常相似。所以现在我尝试在没有 .so 的情况下进行相同的操作:我从 C 调用了 Lua:

int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "my_c_function", my_c_function);
luaL_dofile(L, "my_lua_program.lua");
lua_close(L);
return 0;
}

但是无论我是否使用 -fPIcflags,这里的性能都是相同的(并且与使用 .so 的方法相同)。如果没有 -fPIcflags,我期待一些改进......关于如何进一步调查它的任何建议?第二种方法是否创建了与位置无关的代码,这就是性能相似的原因?谢谢!

更多信息,如评论所建议:我使用 -O3 标志、gcc 4.7.2、Ubuntu 12.04.2、x86_64。是的,我对如此大的开销感到非常惊讶......我的程序正在计算 Mandelbrot 分形。所以有两个循环遍历 x 和 y,我在 C 中的函数是 isMandelbrot:它需要迭代次数并返回 bool:是否属于 Mandelbrot 集。我将共享对象与“require”一起使用。

最佳答案

我认为您运行的代码是 x86。该平台在 -fPIC 方面存在性能问题,其中任何导入函数的位置都需要找到本地 eip。执行此操作的代码会为函数增加少量开销。不幸的是 lua 充满了非常小的函数,它会增加相对的开销。

在 x64 上 -fPIC 没有这种开销。

关于c - Lua调用C函数的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860816/

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