私はMinkowskiの高速計算が必要なC++ソフトウェアを作成しています。二重に基づく実装で十分です。スレッドセーフな三角形分割ライブラリ
私は、このような
- CGAL
- LEDA
- boost::geometry(ミンコフスキー和の実装を持っているが、それを実装する方法を説明するtutorialはありません)
しかし、私は以前のものと比べて非常に速い別のサードパーティのライブラリを使用してしまいました三角形分割のためにFISTライブラリを使用しています。
私のコードは次のように多かれ少なかれ作品:
- 私はミンコフスキーは私がしたポリゴンを決めるn回
- について
- を必要とする合計計算
- 私のポリゴンを読みます次の計算で使用
- 私はミンコフスキーの合計に基づいていくつかのものを行います
- 私はvalを与えますループ内の計算は四捨五入するラウンドから独立しているので、私は最終的な結果として、最高値で
を結果を取った結果
- 回
- :
そしてIは各並列ラウンドでミンコフスキー和計算を移動することを決めました計算の後に
- 私はこのラウンドで必要なミンコフスキーの合計を計算します
- 私はミンコフスキーの合計に基づいていくつかのことを行います
- は私が最終的な結果
しかし、サードパーティのライブラリがこれ以上働いたとして最高の値で結果を取る結果
- :
に値を与えます。
は私が
アサーションが失敗したと言って
number_of_threads - 1
エラーメッセージを取得します。
アサーションの失敗を引き起こすファイルは、実行時とスレッドからスレッドに変更されますが、すべてがFISTヘッダーと同じ名前のCファイルです(サードパーティ製ライブラリのソースコード
前述のように、私は並列化されたコードの外に必要なすべてのミンコフスキーの合計を計算し、その中の結果を使用しようとしました。これは大丈夫だった。だから、私はFISTの問題だとほとんど確信しています。
あなたはFISTライブラリは、スレッドセーフであれば知っていますか:
私は2つの質問がありますか?
もしそうでなければ、FIST(おそらく同等の性能を持つ)を置き換えるにはスレッドセーフ(Cまたはそれ以上)のC++三角形分割ライブラリをお勧めしますか?
編集:私は、同時に多くの独立した三角形分割を計算することができtringulationライブラリを必要とする:「スレッドセーフ」は、私がしたい正確に何である場合
実は、私は知りません。
私は、ライブラリはグローバル変数を持っていないし、それがstatic
変数
class triangulation
{
// no static variables
void execute_triangulation();
}
せずにクラスを持っていた場合、それは十分でできればと思います。 私はそのクラスの異なるインスタンスを使用し、それらのメソッドを並列に実行できます。
一般に、スレッドセーフであることが明示的に指定されていない場合は、すべてをスレッドセーフではないと考えることができます。 –
これはライブラリのスレッドの安全性やコードの誤りによるものかどうかは不明です。スレッドの安全性について心配する必要があるかどうかは不明です。 – Mikhail
@Mikhailあなたは正しいです、私は質問を編集します – 888