-fPIC フラグによって、C プログラムのパフォーマンスが大きく異なることに気付きました。私がそれを使用すると、プログラムは使用しない場合よりも約 30% 遅くなります。C関数を呼び出すLuaプログラムと比較しています(すべての重い計算が行われます)。まず、C 関数で共有オブジェクトを作成したので、-fPIC フラグを使用する必要がありました。パフォーマンスは、-fPIC フラグを使用した 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;
}
ただし、ここでは、-fPIC フラグを使用するかどうかに関係なく、パフォーマンスは同じです (.so を使用したアプローチと同じです)。-fPIC フラグなしで何らかの改善を期待していました...さらに調査するにはどうすればよいかについてのアドバイスはありますか? とにかく位置に依存しないコードを作成する2番目のアプローチですか?それがパフォーマンスが似ている理由ですか?ありがとう!
コメントで示唆されている詳細情報: -O3 フラグ、gcc 4.7.2、Ubuntu 12.04.2、x86_64 を使用します。はい、私は非常に大きなオーバーヘッドに非常に驚きました...私のプログラムはマンデルブローフラクタルを計算しています。したがって、x と y を反復する 2 つのループがあり、C にある関数は isMandelbrot です。反復回数を取り、bool を返します。Mandelbrot セットに属するかどうか。「require」で共有オブジェクトを使用します。