アカウント名:
パスワード:
マシン語じゃないの?作る速度は最低かもしれない
人間が書いたマシン語が一番速かったのはインオーダー実行の初期32ビットCPUの頃では?キャッシュとか分岐予測とかアウトオブオーダー実行とかをCPUが実装しだした時点で人間がついていけないもの。
いや、ついていけよ。ついていけないとか言わずに、ついていけよ。今でも性能出ない部分はアセンブリ手書きだよ。マルチコアが普通になったおかげで、今はコンパイラの最適化ではとても期待性能出せなくて、コンパイラの出力を人が最適化してるよ。
しかも今は当たり前のようにマルチコア環境なので、同時並行で動作する裏のタスクが変化する状況では、JITコンパイラの威力もバカにできないという・・
雑なアセンブラだとCの方が速いとかは確かにある。でも、本当に速度が必要な部分は今でもアセンブラ使ってるよ。x264とかx265なんかでも、コアの部分はアセンブラコードがある。
ライブラリやドライバを使う側の人は滅多に触らなくなったけど、作る側の人は今でもアセンブラが必要。
本当にコアな部分と云うと、プロセッサのマイクロプログラム(マイクロコードとも)。で、こいつはCの方が速いのか?
それは、高級言語で設計して、コンパイラの最適化と人間の最適化を競っている場合ですね。設計の段階から、そのCPU(マシン語)を意識してつくらないとだめだ。
例えば、C言語にないキャリーフラグのつかったアセンブリ言語で書かれたものを、C言語に置き換えて最適化してもアセンブリ言語を超えることは、まずない。超えようと思えば、C言語で再設計するだろう。
そりゃ高級言語も最終的にはマシン語になるのだからマシン語で最高の性能が出るように設計して最適な実装がされたものとコンパイラがマシン語に変換したものなら前者が勝つってのは自明でしょうね。問題はマシン語で最高の性能になるような設計(と実装)を人が出来るのか?なわけで。
例えば、C言語にないキャリーフラグのつかったアセンブリ言語で書かれたものを、C言語に置き換えて最適化してもアセンブリ言語を超えることは、まずない。
それも程度によると思う。Cのコードから適切にキャリーフラグを使う機械語を出力するなんてこと、今の最適化の技術で実現可能だとしても自分は驚かない。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
犯人はmoriwaka -- Anonymous Coward
一番実行が高速なのは (スコア:0)
マシン語じゃないの?
作る速度は最低かもしれない
Re:一番実行が高速なのは (スコア:1)
Re: (スコア:0)
人間が書いたマシン語が一番速かったのはインオーダー実行の初期32ビットCPUの頃では?
キャッシュとか分岐予測とかアウトオブオーダー実行とかをCPUが実装しだした時点で人間がついていけないもの。
Re:一番実行が高速なのは (スコア:1)
いや、ついていけよ。
ついていけないとか言わずに、ついていけよ。
今でも性能出ない部分はアセンブリ手書きだよ。
マルチコアが普通になったおかげで、今はコンパイラの最適化ではとても期待性能出せなくて、コンパイラの出力を人が最適化してるよ。
Re: (スコア:0)
しかも今は当たり前のようにマルチコア環境なので、同時並行で動作する裏のタスクが変化する状況では、
JITコンパイラの威力もバカにできないという・・
Re: (スコア:0)
雑なアセンブラだとCの方が速いとかは確かにある。
でも、本当に速度が必要な部分は今でもアセンブラ使ってるよ。
x264とかx265なんかでも、コアの部分はアセンブラコードがある。
ライブラリやドライバを使う側の人は滅多に触らなくなったけど、作る側の人は今でもアセンブラが必要。
Re:一番実行が高速なのは (スコア:1)
Re: (スコア:0)
本当にコアな部分と云うと、プロセッサのマイクロプログラム(マイクロコードとも)。
で、こいつはCの方が速いのか?
Re: (スコア:0)
それは、高級言語で設計して、コンパイラの最適化と人間の最適化を競っている場合ですね。
設計の段階から、そのCPU(マシン語)を意識してつくらないとだめだ。
例えば、C言語にないキャリーフラグのつかったアセンブリ言語で書かれたものを、C言語に置き換えて最適化しても
アセンブリ言語を超えることは、まずない。超えようと思えば、C言語で再設計するだろう。
Re: (スコア:0)
そりゃ高級言語も最終的にはマシン語になるのだから
マシン語で最高の性能が出るように設計して最適な実装がされたものと
コンパイラがマシン語に変換したものなら前者が勝つってのは自明でしょうね。
問題はマシン語で最高の性能になるような設計(と実装)を人が出来るのか?なわけで。
Re: (スコア:0)
例えば、C言語にないキャリーフラグのつかったアセンブリ言語で書かれたものを、C言語に置き換えて最適化しても
アセンブリ言語を超えることは、まずない。
それも程度によると思う。Cのコードから適切にキャリーフラグを使う機械語を出力するなんてこと、今の最適化の技術で実現可能だとしても自分は驚かない。