はえーーーー
いや、はやいwwwww
とりあえずいろんな補間は実装できたから、あとは高速化だと思っていろいろがんばった結果、textureメモリを使うという方法を思いついた。
ただ、textureReferenceが3要素のテクセルを受け付けないからx方向に3倍して当てたんだけど・・・。でも普通16384x32768のものなんかつくろうとか思わないはずだから大乗でしょう。
大体の速度の目安としてはRGB各要素を単精度浮動小数点を使って1024x768のビットマップを5120x3840に上げたときものです。
ちなみにスペックは
GPU:GeForce9600GT
GDDR3 512MB
Core Clock 650MHz
Mem Clock 1800MHz
です。時間は何回か測って大体の値をとっています。
補間法 | non-texture | use texture | Release build |
---|---|---|---|
最近傍点補間 | 110ms | 60ms | 60ms |
1次スプライン補間 | 1600ms | 50ms | 60ms |
3次スプライン補間 | 1600ms | 240ms | 230ms |
3次畳み込み補間 | 1650ms | 620ms | 267ms |
sinc関数 | 1620ms | 320ms | 250ms |
Lanczos-2補間 | 1620ms | 520ms | 260ms |
Lanczos-3補間 | 4300ms | 910ms | 570ms |
やっぱLanczos-3が参照画素数多い関係でテクスチャを使わないとかなり遅いですね。未だ実用的じゃないし。
驚きなのは最近傍点より1次スプラインのほうが速かったってことですね。多分メモリアクセスのタイミングによってこうなるんでしょう。
あとsincとLanczos-2,3は定数テーブル使えばもっと速くなるヨカーン
そういや今日、大学あさってたらGeFo8500GTのPCI接続できる玄人志向のボードが3,4枚でてきたので複数デバイス使った場合の実験ができるwwww。