画像をブロック単位で処理するときに最も効率的な方法は何か不思議です。ベクター画像ブロックの処理を効率的に処理しますか?
その瞬間、8x8ブロックから1行のピクセル(1行8ピクセル、各8ビット深度)を読み取るなど、ベクトル化技術を適用しました。しかし、現代のプロセッサが128/256ビットのベクトル演算をサポートしているので、イメージブロックから2行のピクセルをロードするとコードの速度が向上すると思います。
しかし、問題は、メモリ内の画像(たとえば16x16画像、4つの8x8ブロックを含む)が最初のピクセルから最後のピクセルに連続して格納されることです。 1つの8ピクセル行の読み込みは簡単ですが、2行を一緒に読み込むためにポインタを操作するかイメージデータを整列する必要がありますか?
私はこの数字は明らかに私の問題を説明することができると思う: pixels' address in a image
をので、私たちは一緒に8つのピクセル(行)をロードするとき、我々は単純に1つの命令で初期ポインタ位置から8バイトのデータをロードします。 2行目をロードするときは、ポインタに9を追加して2行目をロードするだけです。
最初のポインタの位置からこれら2つの行(16ピクセル)を一緒に読み込む方法はありますか?
ありがとうございます!
*「load」*と言うとき、ファイルからの読み込みを意味しますか?または、RAMからCPUレジスタに入れますか? –
私は、RAMからCPUレジスタにデータを書き込むことを意味します。 – drinking