CUDA Example にも乗っている重力系の計算だが、
の計算では二乗した時にオーバーフローが発生する可能性がある。CPU を使う計算では、
と場合分けして計算するのが常套だったらしいが、CUDA のようなベクトル演算では場合分けは著しくパフォーマンスを落としてしまう。
そこで、2次元限定ではあるが、以下のように式を変形してみた。
は 0 以上、1以下なので、二乗計算でも発散は回避できる。
CUDA Example にも乗っている重力系の計算だが、
の計算では二乗した時にオーバーフローが発生する可能性がある。CPU を使う計算では、
と場合分けして計算するのが常套だったらしいが、CUDA のようなベクトル演算では場合分けは著しくパフォーマンスを落としてしまう。
そこで、2次元限定ではあるが、以下のように式を変形してみた。
は 0 以上、1以下なので、二乗計算でも発散は回避できる。
コメントを残す