ルックアップと計算のコスト


12

距離基準が満たされているかどうかを確認する計算をセットアップすることに興味があります。つまり、ベクトルとanベクトルx jの間の距離は、ある値r m a xよりも小さくなければなりません。データは、座標の直交グリッドに従って分割されています。私のカットオフは最近接座標の端点間の距離よりも小さいため、「オクタント」変数を追加して、正しくセットアップされているかどうかを確認します。xixjrmax

if octant[j] in allowed_list continue

「短絡」として

if dist(x[i], x[j]) < r_max

私の質問は、浮動小数点演算に対するブール検索と比較の計算効率はどれくらいですか?これは現代のアーキテクチャで行う価値がありますか?


3
コードを分岐させてテストしてもらえますか?私はこれらのほとんどに対する標準的な答えのように感じます。「それを(一方向)または(他の方法)コーディングする方が良いですか?」質問の種類は「試してみて、ベンチマーク」です。
ジェフオックスベリー

1
ちょうど私の2セント。Geoffが書いたように、この種のアドバイスは、C ++コードに関してstackoverflowで同様の質問をしたときにいつも得たものです:最初にすべてをコーディングし、モジュールを再利用できるようにコードを整理し、その後リファクタリングを開始します。80-20のルールがあります。ソフトウェアはコードの20%に時間の80%を費やします。構造が立ち上がるまで待ってから、変更、テスト、変更、テストを行います
。– tmaric

@GeoffOxberry:私の質問はそれほど具体的ではありません:浮動小数点演算を行うことと比較してブールチェックを行うことのハードウェアまたはコンパイラの利点があるかどうかを知りたいだけです。
aeismail

3
しかし、あなたの質問は一般的すぎます。誰も具体的なコードを見ずに見分けることはできません。最高のプログラマーでさえ、プロファイリングなしではコードのボトルネックがどこにあるのかわからない、という経験則があります。私は過去25年のプログラミングを費やしてきましたが、それが私にとって真実であることを知っています。
ウォルフガングバンガース

回答:


15

私の経験則では、倍精度値ごとに50フロップ未満である程度の量(FPUの有効利用)を効率的に計算できる場合、保存するよりも再計算する方が良いということです。数十年にわたって安定してきたこの傾向は、浮動小数点機能がメモリのパフォーマンスよりも速く改善されることであり、高速メモリの物理的制約とエネルギー要件のために容認されそうにありません。50という値は、すべての一般的なコンピューティングプラットフォーム(Intel / AMD、Blue Gene、およびGPU)に適した大きさです。

コアあたりの概算コスト見積もり

[2011/2012 IntelベースおよびAMDベースのマシンのガイドライン]

  • 0.05
  • 0.2
  • 0.4
  • 0.40.8
  • 2
  • 35
  • 35
  • 5
  • 48
  • 12
  • 12
  • 3050
  • 100
  • 1031 μ
  • 10410 μ
  • 106
  • 2106MPI_Allreduce
  • 107
  • 5108
  • 1.81012

参考文献


この情報は本当に便利だと思いました。ところで、このデータはどこで入手しましたか?引用への参照を探しています。
エルディラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.