大規模なネットワークの視覚化を高速化するためにOpenCLベースのパーティクルシステムを作成しています。本質的に、これはフェーズ1が各粒子(典型的なn体問題)に負の重力を適用するので、それらはすべて反発し、その後フェーズ2は粒子間のエッジ(またはバネ)に基づいて粒子を引き付ける2段階問題です。OpenCLパーティクルシステムでの浮動小数点精度の不足の扱い
重力アルゴリズムを繰り返し実行するたびに、フロートのペアとして表される各パーティクルの位置は、互いのパーティクル(古典物理モデル、ドラッグなし、単純なまま)までの距離に影響されます。一つは重力のアプリケーションはX及びY軸の両方を横切る対称性をもたらすはずである粒子の完全に間隔をあけ正方形アレイを有する状況では
。これは、重力アプリケーションの開始時に当てはまりますが、時間の経過とともに、多くの浮動小数点数を加算する際の精度の欠如は、不均一な偏差をもたらします。これは、順にn体系全体を伝播し、対称性の損失が生じる。これを回避する
1つの簡単な方法は、倍精度数をサポートしていない私のMacBook Proに倍精度数、しかし、のGeForce 9600M GTを使用することです。ですから、OpenCLのこのような問題に対処する良い方法はありますか?私は浮動小数点数を切り捨ててこの問題を回避するためにいくつかの小数点以下を追加することを考えましたが、それはちょっと混乱したようです。
合意された、混合精度のアプローチは間違いなく道のりです – talonmies
丁寧な言い回し! 「混合精度」は、私が探していた技術用語でした。私は、力の集約のために倍精度をエミュレートすることで、最初のスタブを取って混合精度モデルを実装し始めました。それはずっと遅く、私の486sxの時代を思い出させます。私の方法の最適化は多くの助けになります。しかし、おそらく、ネイティブの倍精度サポートでGPUを取得するのは、より良い時間/価値のトレードオフであり、力の集計には複数の精度が使用されると思います。素晴らしい答え!ありがとう! – Pridkett