gcc 3.4.5が全社で使用されているので、rtreeのboost 1.59がコンパイルに問題があるため、rtreeを1.57にする必要があります。 私だけの方法以下でRTREEを使用します。私の使用例ではboost :: rtreeはgccコンパイラの影響を大きく受けます
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
typedef bg::model::point<double, 2, bg::cs::cartesian> point;
typedef bg::model::box<point> box;
typedef std::pair<box, size_t> value;
// create the rtree using default constructor
bgi::rtree<value, bgi::linear<500> > rtree;
// create some values
ifstream ifs(bbox_filename);
if (!ifs.is_open()) return;
std::vector<box> boxes;
boost::timer t;
// ... (read box from test file)
std::cout << "read bbox file: " << t.elapsed() << " sec." << std::endl;
t.restart();
for (size_t i = 0; i < boxes.size(); ++i)
{
// insert new value
rtree.insert(std::make_pair(boxes[i], i));
}
std::cout << "build rtree with " << boxes.size() << " boxes in total: " << t.elapsed() << " sec." << std::endl;
を、要素の数は数千万人となり、クエリの速度が速いと許容ですが、建物RTREEの速度が非常に遅い(O2がありますもちろん有効です)。
gcc 4.4.7で同じテストプログラムをコンパイルしてテスト結果を比較したところ、gccのバージョンが原因です。
テスト環境:GCC 3.4.5のための
read bbox file: 22.13 sec.
build rtree with 42517937 boxes in total: 163.28 sec.
テストログ:GCC 4.4.7のための
CentOS 6.6
Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz
テスト・ログは
read bbox file: 22.28 sec.
build rtree with 42517937 boxes in total: 468.73 sec.
それはによってコンパイルされたテストプログラムを思わgcc 3.4.5では、rtreeを構築するのに約4.4倍の時間がかかります。
以前にこの問題を抱えた人はいますか? gcc 3.4.5のパフォーマンスを改善するためのアドバイスはありますか?
おかげで、
あなたの最善の策は、3.4.5が間違っていることを理解し、それを避けるためにrtreeのコピーを修正しようとしていると思います。おそらく、ツリーをアセンブルしている間、ペアまたは 'linear <500>'のコピーを削除する最適化です。また、コンパイルエラーを処理する価値のある、内部的に参照の処理が明らかに改善されているかどうかを調べるために、1.57を最新の値と比較する価値があります。また、オブジェクトへのポインタについてrtreeのテンプレートを使って作業することもできますが、それはC++でなく、難しいかもしれません。 – Rup
GCC 3.4.5は[10歳以上]です(https://gcc.gnu.org/gcc-3.4/)。あなたの会社にいる権限を持ってアップデートする価値がありますし、新しいバージョンがC++より優れている理由の1つとして、これを例に挙げましょう。 (新しいバージョンがあなたのコードベースで「うまく動作している」と仮定して) – Rup
@Rup、あなたの返事をありがとう。私はまた、ブースト1.59とgcc 4.4.7でテストプログラムをコンパイルしました。性能はブースト1.57、gcc 4.4.7に匹敵します。劇的な改善はありません。 – wpc062