Siv3D / OpenSiv3D

C++20 framework for creative coding 🎮🎨🎹 / Cross-platform support (Windows, macOS, Linux, and the Web)
https://siv3d.github.io/
MIT License
994 stars 136 forks source link

Image::rotate90() と関連するメンバ関数の性能を改善 #1225

Closed Raclamusi closed 3 months ago

Raclamusi commented 4 months ago

1182 の実装の pull request です。

アクセス順の工夫(ブロック化)によるキャッシュの効率的な利用、および正方形画像に対する in-place 実装により、 Image::rotate90()Image::rotated90()Image::rotate270()Image::rotated270() の実行時性能を改善しました。

Raclamusi commented 4 months ago

ブロックサイズが最適かどうかは、しっかり調べていません。 手元の環境で 4, 8, 16 辺りを試したところ、 8 がよさそうでした。

Reputeless commented 4 months ago

v0.8 に組み込んでテストしたところ、Windows 版は 8, macOS (Apple Silicon) M2 は 16 が良さそうでした。 v0.6 へは 8 で導入しましょう。このまま進めて OK です!

v0.8 への移植時には、マクロで 8 / 16 切り替えるようにしておきます。

Raclamusi commented 4 months ago

調査ありがとうございます! よろしくお願いします。

Reputeless commented 3 months ago

Merged. Great work!