アカウント名:
パスワード:
何か理由があってアセンブリ言語にこだわっているのか? プロセッサの処理能力もメモリもジャブジャブ有り余っていて、昔と比べてコンパイラも飛躍的に性能が良くなったのに..........
電力とか容積をジャブジャブ使えない環境を想定してるから
いやそれ、さんざん言われている幻想だから…。今時の、pipeliningやout-of-orderバリバリのプロセッサのアセンブリ言語で、コンパイラより効率の良いコードを書くなんて無理よ。今でも、ごく小さいコードについて人間が最適化するケースはあるけど、OS全体を手書きのアセンブラで書いて、コンパイラに勝つなんてありえない。コードサイズについても、コンパイルの設定で、余分なランタイムを一切使わないバイナリを生成することだってできるし、その場合手書きコードと比べて劣る点は一切ない。コードサイズについては、LinuxがCで書かれていることからも明らかでしょ。
LinuxがCで書かれてるのはコードサイズが小さいからじゃない。生産性とかパフォーマンスとか学習効率とかその他もろもろのバランスが良いから。参加者全員の知識とスキルが十分に高くて、時間が無限にあるならフルアセンブラで書かれてる。
# 今時アセンブラでバリバリ最適化する人はコンパイラが吐く最適化済みのコードとか# コンパイラの最適化部分のソースとかも読んだ上で最適化を考えてるのでコンパイラに負ける事はない
これ。人間はコンパイラの吐いたコードを参考にするが、逆はない。
ああ、これ見てこの変な流れの理由が分かった気がする。元コメの人、とにかくアセンブラで書くだけで早くなるんだ!みたいな、汎用機上がりのおっさんにでも出会って、それがアセンブラ使いの全てと思い込んじゃってるんじゃないか?# 知識をアップデートしてないって時点で、自分が馬鹿にしてるアセンブラ使いと同じレベルなんだけど。
手書きアセンブラの方が速いとか言っている人は、絶対に今どきのアセンブラの最適化をやったことがないよね。今どきのCPUの最適化って、ループのμopの数を数えて命令キャッシュに入るか確かめるとか、ALUの表を作ってパイプラインストールがないかチェックするとか、「こんなことはコンピュータがやれよ」と思うような作業ばっかりなんだけど、こういう人たちは、優秀なハッカーなら、映画かアニメみたいにすらすら完璧なコードを書けると思ってるんだろう。
SSE/AVXのレジスタの割り当てとか、人間がやるほうが効率が良い場合もあるよ。SSE/AVXのロード・ストア命令もCPUによって最適な命令が違ったりするけどコンパイラはそんなこと考慮にしてくれないしね。
元コメとは違うACだけど、
元コメAC氏は「今でも、ごく小さいコードについて人間が最適化するケースはあるけど」とそういった事例は認めた上で、「OS全体を手書きのアセンブラで書いて、コンパイラに勝つなんてありえない。」と述べてるんですよ。
「コードサイズについても、コンパイルの設定で、余分なランタイムを一切使わないバイナリを生成することだってできるし、その場合手書きコードと比べて劣る点は一切ない。」とも言ってますね。
> 「OS全体を手書きのアセンブラで書いて、コンパイラに勝つなんてありえない。」人間のやる事ですから、なんでもあり。 その人のレベルによる。 アセンブラの方が早いって、Cからアセンブラしたけど、最適化がなくなった分、遅くなったとか。それをCに戻して、早くした事もあるし。 確かに、OS全体は今時、ありえないって思うが、世の中、化け物もいるって事。
高級言語の場合はだいたいABIが決まっているからアセンブラのほうが有利だな
irreducibleなグラフはコンパイラは最適化を諦めて保守的になるから、アセンブラのほうが有利だな
アセンブラの方が早いって、Cからアセンブラしたけど、最適化がなくなった分、遅くなったとか。それをCに戻して、早くした事もあるし。
「早くした」って、分かってなくてたまたまそうなっただけじゃね
それ以前の話で、C言語とかでうまく仕様をコンパイラに伝えることができないからじゃないの?例えば、ローテイト命令、エンディアンの変換なんて、それをC言語で書いちゃうとかなり無駄なコードになってしまう。それを書かれた言語の意味が変わらない範囲でいくら最適化したところで無駄なコードができてしまう。そういった一般的によくある問題は、すでにアセンブラなど最適化された関数が用意されてるからいいもののないものに関してうまく伝えることができない。
あなたは、C言語で書かれたものをコンパイラがアセンブリ言語にするか人がするかの比較しかしてない。仕様をC言語に直した時点で無駄が発生してるんです。
で、アンタはどんなすごい最適化ができるというの?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
なぜアセンブリ言語? (スコア:0)
何か理由があってアセンブリ言語にこだわっているのか? プロセッサの処理能力もメモリもジャブジャブ有り余っていて、昔と比べてコンパイラも飛躍的に性能が良くなったのに..........
Re: (スコア:1)
電力とか容積をジャブジャブ使えない環境を想定してるから
Re:なぜアセンブリ言語? (スコア:0)
いやそれ、さんざん言われている幻想だから…。
今時の、pipeliningやout-of-orderバリバリのプロセッサのアセンブリ言語で、コンパイラより効率の良いコードを書くなんて無理よ。
今でも、ごく小さいコードについて人間が最適化するケースはあるけど、OS全体を手書きのアセンブラで書いて、コンパイラに勝つなんてありえない。
コードサイズについても、コンパイルの設定で、余分なランタイムを一切使わないバイナリを生成することだってできるし、その場合手書きコードと比べて劣る点は一切ない。
コードサイズについては、LinuxがCで書かれていることからも明らかでしょ。
Re:なぜアセンブリ言語? (スコア:1)
LinuxがCで書かれてるのはコードサイズが小さいからじゃない。
生産性とかパフォーマンスとか学習効率とかその他もろもろのバランスが良いから。
参加者全員の知識とスキルが十分に高くて、時間が無限にあるならフルアセンブラで書かれてる。
# 今時アセンブラでバリバリ最適化する人はコンパイラが吐く最適化済みのコードとか
# コンパイラの最適化部分のソースとかも読んだ上で最適化を考えてるのでコンパイラに負ける事はない
Re: (スコア:0)
# 今時アセンブラでバリバリ最適化する人はコンパイラが吐く最適化済みのコードとか
# コンパイラの最適化部分のソースとかも読んだ上で最適化を考えてるのでコンパイラに負ける事はない
これ。人間はコンパイラの吐いたコードを参考にするが、逆はない。
Re: (スコア:0)
ああ、これ見てこの変な流れの理由が分かった気がする。
元コメの人、とにかくアセンブラで書くだけで早くなるんだ!
みたいな、汎用機上がりのおっさんにでも出会って、
それがアセンブラ使いの全てと思い込んじゃってるんじゃないか?
# 知識をアップデートしてないって時点で、自分が馬鹿にしてるアセンブラ使いと同じレベルなんだけど。
Re: (スコア:0)
手書きアセンブラの方が速いとか言っている人は、絶対に今どきのアセンブラの最適化をやったことがないよね。
今どきのCPUの最適化って、ループのμopの数を数えて命令キャッシュに入るか確かめるとか、
ALUの表を作ってパイプラインストールがないかチェックするとか、「こんなことはコンピュータがやれよ」と思うような作業ばっかりなんだけど、
こういう人たちは、優秀なハッカーなら、映画かアニメみたいにすらすら完璧なコードを書けると思ってるんだろう。
Re: (スコア:0)
SSE/AVXのレジスタの割り当てとか、人間がやるほうが効率が良い場合もあるよ。
SSE/AVXのロード・ストア命令もCPUによって最適な命令が違ったりするけどコンパイラはそんなこと考慮にしてくれないしね。
Re: (スコア:0)
元コメとは違うACだけど、
元コメAC氏は「今でも、ごく小さいコードについて人間が最適化するケースはあるけど」とそういった事例は認めた上で、
「OS全体を手書きのアセンブラで書いて、コンパイラに勝つなんてありえない。」と述べてるんですよ。
Re: (スコア:0)
「コードサイズについても、コンパイルの設定で、余分なランタイムを一切使わないバイナリを生成することだってできるし、その場合手書きコードと比べて劣る点は一切ない。」とも言ってますね。
Re: (スコア:0)
> 「OS全体を手書きのアセンブラで書いて、コンパイラに勝つなんてありえない。」
人間のやる事ですから、なんでもあり。 その人のレベルによる。
アセンブラの方が早いって、Cからアセンブラしたけど、最適化がなくなった分、遅くなったとか。
それをCに戻して、早くした事もあるし。
確かに、OS全体は今時、ありえないって思うが、世の中、化け物もいるって事。
Re: (スコア:0)
高級言語の場合はだいたいABIが決まっているからアセンブラのほうが有利だな
Re: (スコア:0)
irreducibleなグラフはコンパイラは最適化を諦めて保守的になるから、アセンブラのほうが有利だな
Re: (スコア:0)
アセンブラの方が早いって、Cからアセンブラしたけど、最適化がなくなった分、遅くなったとか。
それをCに戻して、早くした事もあるし。
「早くした」って、分かってなくてたまたまそうなっただけじゃね
Re: (スコア:0)
それ以前の話で、C言語とかでうまく仕様をコンパイラに伝えることができないからじゃないの?
例えば、ローテイト命令、エンディアンの変換なんて、それをC言語で書いちゃうとかなり無駄なコードになってしまう。
それを書かれた言語の意味が変わらない範囲でいくら最適化したところで無駄なコードができてしまう。
そういった一般的によくある問題は、すでにアセンブラなど最適化された関数が用意されてるからいいもののないものに関してうまく伝えることができない。
Re: (スコア:0)
あなたは、C言語で書かれたものをコンパイラがアセンブリ言語にするか人がするかの比較しかしてない。
仕様をC言語に直した時点で無駄が発生してるんです。
Re: (スコア:0)
で、アンタはどんなすごい最適化ができるというの?
Re: (スコア:0)