この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
広告
posted by fanblog
2023年02月26日
win64のアライン16BYTE規制で思う事
64bitOSだから8byteアラインを強制されるなら仕方ないと思う
でも16byteアラインはどうなんだろう?
「SSEで128bit を高速に処理するには16byteアラインが必要」という主張は判るが
AVXで256bit AVX512で512bitだからそれらも処理するのだろうか?
画像処理とか専用のアプリ内だけで社内ルールでやればよい事のように思う。
そもそも現行のPCのRAMなどのバスは64bitだ。128bitアラインにして高速化するのはCPUのキャッシュ内にデータがある間だけ。キャッシュを超えるデーターを扱うとなれば、SSE命令使おうが無駄な話になる。
メモリを無駄に使えば、それだけキャッシュから外れるまでの余裕が短くなるだけではないか?
さらに内臓メモリの限界もある。それを超えれば仮想記憶でHDD/SSDとスワップするわけで、それが速度を決めてしまう。 だから速度を考えるのならメモリは少しでも節約すべきだろう。
昔 音声認識をするのに8bitの符号で対数的な重みを付け 加算や掛算をテーブル引きで行った事がある。
それでもそこそこの結果が得られた。 当時は掛け算さえ遅かった時代なので速度目的だった。
今ではむしろ遅くなる。
しかし今の人工知能のメモリ消費を考えると 案外8bitの対数的符号は速度面でも有利化もしれない。
メモリ消費が少なければそれだけキャッシュから外れる可能性も、そしてPCのメモリスワップが起きる可能性も小さく出来るのだから。
でも16byteアラインはどうなんだろう?
「SSEで128bit を高速に処理するには16byteアラインが必要」という主張は判るが
AVXで256bit AVX512で512bitだからそれらも処理するのだろうか?
画像処理とか専用のアプリ内だけで社内ルールでやればよい事のように思う。
そもそも現行のPCのRAMなどのバスは64bitだ。128bitアラインにして高速化するのはCPUのキャッシュ内にデータがある間だけ。キャッシュを超えるデーターを扱うとなれば、SSE命令使おうが無駄な話になる。
メモリを無駄に使えば、それだけキャッシュから外れるまでの余裕が短くなるだけではないか?
さらに内臓メモリの限界もある。それを超えれば仮想記憶でHDD/SSDとスワップするわけで、それが速度を決めてしまう。 だから速度を考えるのならメモリは少しでも節約すべきだろう。
昔 音声認識をするのに8bitの符号で対数的な重みを付け 加算や掛算をテーブル引きで行った事がある。
それでもそこそこの結果が得られた。 当時は掛け算さえ遅かった時代なので速度目的だった。
今ではむしろ遅くなる。
しかし今の人工知能のメモリ消費を考えると 案外8bitの対数的符号は速度面でも有利化もしれない。
メモリ消費が少なければそれだけキャッシュから外れる可能性も、そしてPCのメモリスワップが起きる可能性も小さく出来るのだから。
アセンブラを学ぶならLazarusが便利
ネイティブコンパイラで プログラムのデバッグをするとき、アセンブラが読めると便利です。
それが出来ないと、いわゆるPrintfデバッグ(Pascalだとwriteとか formatしてメモ帳に出力するとか)となります
アセンブラが読めるならブレークポイントを仕掛けてコンパイルがどうされたか見たり、レジスタの値を見たりと情報の幅が広がります。
アセンブラを学ぶのならLazarusは良い環境です。
asm文でアセンブラを埋め込め、そのアセンブラ文法もLinuxスタイルですが
Intelスタイルも{$ASMMODE intel} をasmの前に入れるだけで書けます。
アセンブラの文法は殆ど同じになりますが、コメントはPascal式 //より右か {この範囲} か (* この範囲 *)
アセンブラだけで何かプログラムするとなればPICとか1チップマイコンくらいになりますから、高級言語の中に埋め込むという方式で入るのがお勧めの理由です。
私もLazarusでWin64環境を始めたので四苦八苦です=> Lazarusでアセンブラを使う時の注意点
asm文を使わなければ出来ない事は色々あります。
・前回のようにCPUIDを読んで自分のPCのCPUの種類や機能を調べる
・パスカル言語にSAR 演算子が無い事の対策
・64bit以上の多倍長演算(アセンブラならフラグを使えるので)
・X*Y/X のように途中で桁溢れする計算の計算可能範囲を広げる
・コンパイラが使ってくれないSIMD命令の利用
もっとも、最近はスクリプト言語が隆盛なので意味がないのかもしれませんけどね。
それが出来ないと、いわゆるPrintfデバッグ(Pascalだとwriteとか formatしてメモ帳に出力するとか)となります
アセンブラが読めるならブレークポイントを仕掛けてコンパイルがどうされたか見たり、レジスタの値を見たりと情報の幅が広がります。
アセンブラを学ぶのならLazarusは良い環境です。
asm文でアセンブラを埋め込め、そのアセンブラ文法もLinuxスタイルですが
Intelスタイルも{$ASMMODE intel} をasmの前に入れるだけで書けます。
アセンブラの文法は殆ど同じになりますが、コメントはPascal式 //より右か {この範囲} か (* この範囲 *)
アセンブラだけで何かプログラムするとなればPICとか1チップマイコンくらいになりますから、高級言語の中に埋め込むという方式で入るのがお勧めの理由です。
私もLazarusでWin64環境を始めたので四苦八苦です=> Lazarusでアセンブラを使う時の注意点
asm文を使わなければ出来ない事は色々あります。
・前回のようにCPUIDを読んで自分のPCのCPUの種類や機能を調べる
・パスカル言語にSAR 演算子が無い事の対策
・64bit以上の多倍長演算(アセンブラならフラグを使えるので)
・X*Y/X のように途中で桁溢れする計算の計算可能範囲を広げる
・コンパイラが使ってくれないSIMD命令の利用
もっとも、最近はスクリプト言語が隆盛なので意味がないのかもしれませんけどね。