【IA64】64bitプログラミング総合スレ【x86-64】2
1 :
◆TimpoiKAMI :
2げと
>>前997
画像処理系か…確かにそうだね。データベースやエンコ以外
だとこの辺が筆頭か。
でもこれは論理アドレスより物理アドレスがほしいアプリじゃね?
前スレ>990
64ビットでLoadされたら上位Qは無視もしくは不定で回るような
メカニズムになっていればちょっとは違ったかもしれんが
そのうち128ビットXMMがもの凄いスループットで回る日を夢見ることにしよう。
前スレ>992
Storeの琴は意図的に伏せてみたww
>>3 物理アドレスに関しては、もう4GB超の主記憶が積める時代になっちゃって
きていたというのもあるとおもう。
漏れ的には、ファイルことごとくmmapのような富豪プログラミングができるのが楽しげ。
>富豪プログラミング
楽になるのはメリットのひとつだが、おれとしちゃ何か
ブレークスルーが欲しい。64bitマシンじゃなきゃ絶対
できなくて、尚且つ誰もが使いたくなるアプリや
プログラミングの新しい技法。
32bitマシンで絶対できないのはテラ級のメモリ搭載だから、
今後64bitマシンで果たしてそういうことをするときがくるのか。
それをして何か違う世界が開けないのか
普通に考えて自然言語処理とかのAI系だろうね
DB系の延長線上の技術が土台になるだろうけど
音声認識とかの精度もメモリの桁が上がれば使い物に
なるのだろうか?
>>10 音だけから分析するのには限界があるよ
人間はシチュエーションとか把握して意味から音を補完したりしてるから
コンピュータで真似しようとするとやっぱりAI系の技術に依存する
結局、意味まで把握する自然言語処理が進展しないと
音声認識やら機械翻訳やらのブレークスルーはない
自然言語の進展する余地はメモリ増大によってあるんかえ?
ときたまニュースで聞いたような専用のスーパーコンピュータ
使った主要7ヶ国語同時翻訳とかあった気がするけど、ああ
いうのが民生用に下りて来る土台になるのだろうか?
じっさいそのスパコンつかったのがどんくらいのレベルか
ぜんぜん知らんのだが。
>>12 最先端のスパコンがどれくらいのレベルかは知らないけど、
実装はぶっちゃけDBの延長線上だから
そういうのを実用的な速度で動かすには
物量作戦でオンメモリでさばける情報量が多いほど有利ではある。
まあ将棋とか囲碁とかも原理的には同じかな。
どうも巨大DBオンメモリが今後の鍵になりそうなヨカン
でも「7ヶ国語同時翻訳」みないなニュースになるレベルは、
アルゴリズムからしてパソコンソフトと違うことは無いのか?
単に情報量とマシン性能の違いなんだろうか
>>15 翻訳は知らないけどチェスの世界王者に勝ったやつは
専用のコプロみたいなのを大量に並列で動かしてたはず。
そういうのがないと実用的な演算速度が得られないとすれば
メモリだけでなくCPUの方も超並列にする必要がある。
CELLなんかはそういう技術を民生化しようとする方向性ではないかと。
前スレの
>>989へ
あの話は今64bit化で有効なアプリを作ると言う例のイベント前提の話だから
そんな空想の話してもしょうがないんですよ。
実装の話になると、物理メモリを無視できないでしょ?
>前スレ982
SSEは浮動小数点で遅いから当然ダメだけど
XMMXはMMXの1割引くらいの性能で普通に回るよ。速いこともあるし。
128bitが原理的に長すぎるというケースは除いて、
今後のCPUじゃXMMXが負けることはないと思うが、どうか。
そもそも、64bitに対応してないPenMで遅いのは構わないわけで。
物理計算、自然言語処理、巨大データベース
家庭用に普及させるロボットの頭脳になら無いだろうか?
そうなるとx64とかいう話にはならないかも知れないが、
頭脳はパソコンにあって胴体と無線通信しても面白いな
>>19 例えばブラウザ内で動く画像アプリをActiveXで実装したとする。
高速化のコードが32bitと64bitで共通に出来ないのは痛いんだ罠
>>21 命令が減る弊害か。同じコード書けばいいんだけど
実際やってみると面倒くさいんだ罠。
今日は人が多いな。
>>20 > 家庭用に普及させるロボットの頭脳になら無いだろうか?
最終的にはそういう方向が出てくるとは思う。
ASIMOに代表されるように日本人はロボット大好きだし。
でもあまりに先のこと過ぎて、
ここ数年のパソコンの動向とは直接関係ないかもしれない。
ただ徐々にそういう類の技術が民生に降りて来るだろうし、
それを受け入れる土台にはなると思う。
現状のGUIは10年前と比べても装飾が派手になっただけで
本質的な部分では何も変わってないけど、
性能の底上げで音楽や動画を扱うのが当たり前にはなった。
でもこれはマルチメディアのために性能が向上したというより、
性能が向上したからマルチメディアが使い物になったって感じ。
自然言語処理とかの分野もそんな感じで浸透するんじゃないかと。
64bit環境になるとやっぱり32bit演算の方が遅くなったりするの?
というより、MMXが無いとか、_asmが出来ないとか、別の意味で
当面64bitアプリの方が遅いヨカン。32bitの演算自体は気にする
ほどの差は無いか、むしろ速いんじゃない? 特に掛け算割り算
あ、タコプログラムなら64bitにした方が速いってw
つーか、最近のコンパイラ優秀だから
普通の人が下手にアセンブリで書くよりずっとレベル高いコード吐くぞ?
可読性は確かに人手で書いたほうが上がるけど。
お前らいつの時代のコンパイラ使ってんだよ
ゴメン普通の人じゃないんだよw
使ってるのは最新コンパイラ by 最適化厨より
そこまでいかずとも、マトモな普通の人なら
使いどころをわきまえて高速化できると思う。
特にSIMDなら人間が直に書く表現力は強い。
でも普通の人じゃないオレでも最初に書いたSIMDは
Cの通常コード内の最適化に負けるよ。勝負はそこからだ!
そういえば俺も最初は負けたな。何でだろう。
コードを保存しておけばよかったよ。
>>得ろ屋クン
スレ立て乙
で、まさかAltiVecみたいにユニットを全128ビットにでもしろと言うかね?(苦笑
どうせ現状整数も64ビット(×2)までの精度しか使わないんだからMMXニコイチ+μOPs-fusionで当分は十分使える気もするけどね。
いっそ64ビット汎用ALUと兼用化してコア単体の縮小化を進め、マルチコアで性能稼ぐ手もアリじゃん?
いや、SSEを作った張本人のIntelがそんな路線の気がしてね。
>何でだろう
コンパイラの最適化もCPUの通常コードの実行速度も
馬鹿じゃないってことだ罠。普通の人が素直に組んだ
くらいじゃまず勝てねーよ(変なストールありまくなの
も一因)
33 :
デフォルトの名無しさん:2005/07/21(木) 19:26:45
VecCやICCなら自動SIMD化使えるし組み込み関数が使えるじゃん。
SSEが使えない訳じゃあるまいし。
おプやアスロン64でSSEフュージョンがサポートされるだけでも状況は変わるハズ
アスロン系のMMXはあの少ないレジスタで依存関係の引き延ばしをやらなきゃ
ならないから、ある意味使いにくい
SSEだとパイプラインの内部効率悪いしね
>SSEが使えない訳じゃあるまいし。
>SSEだとパイプラインの内部効率悪いしね
SSEを押してるのか逆なのかワカンネ
36 :
デフォルトの名無しさん:2005/07/22(金) 10:16:56
バードショップ
遅レスだが、スパコンの並列処理とCELLはまったく
思想が違う。
CELLは文字通り「ソフトウェアセル」という形で専用
の処理をさせるコードとデータをセルにして、7つの
SPEのいずれかを使って「専用に処理させる」もの。
SPEはオンダイのSRAMでコードとデータを処理する
から速度は速いしバスも占有しない。専用処理だから
コンテキストスイッチングもほとんど発生しない(という
より、そういう使い方は想定していない)のでレジスタ
を大量に持てる。単一目的のために効率を追求した
設計。
スパコンなんかの並列処理はバスを共有して汎用的
な処理を並列で動かすものでしょ。
>>37 スパコン汎用ではなくDeep Blueのカスタムチップを引き合いに出したものかと。
>>37 「スパコン」と一括りにするのはいかがなものか。いろんなタイプがあるべ。
>>37 おまえの御託よりもたるさんのHPのほうが使える。
直列でちょっぱやがベスト
並列を活かすのはそう組まんといけないからなあ…
速度目的と、どうしてもそうしないといけない場合は
仕方なしにやってるが
ILPよりはTLPのが幾分か楽なのも確かだ。
>>43 CPUはそうだろうけど、プログラマからは直列に組む方が楽だろ?
ILPが直列なわけないし
演算の畳み込みとか余分なこと考えなくちゃならないよりは、ループの中身を分割して並列処理させたほうが楽ぽ
本当に直列で組んでて性能が出てくれるのはPentium 4かな。
整数演算のレイテンシ0.5だし。
(もちろん落とし穴もあるが)
いやそうじゃなくて、直列に組んで速い方が嬉しいでしょ?
>>45 スーパースケーラとはとても言えないアーキ
もともと並列に計算可能な分野(分散処理向きなもの)を除けば、
アルゴリズムレベルでは直列に組んで
動作としては可能な限り並列になってくれる
とうれしい。
で、
アルゴリズム=直列、インストラクション=直列、実行=並列、という思想がスーパースケーラで
アルゴリズム=直列、インストラクション=並列、実行=並列、という思想がVLIW
なわけだが、現実はなかなか。
昔はスパコン=ベクトルプロセッサだったんだけどなぁ。
50 :
デフォルトの名無しさん:2005/07/22(金) 19:10:50
やはりご家庭用に64bitは需要が無いらしいな。
OSが3D-GUIになって立体テクスチャを山のように
使い始めるとかしなければ、消えちゃうんじゃないの?
52 :
デフォルトの名無しさん:2005/07/22(金) 19:46:43
まあ、それこそSIMDでやるべき領域なんだけどな。
うまくシフトやビット演算駆使してもSSEのがまだ速いという落ちになりそう。
でも近々アドレス空間は必要になるでしょ。もうPCでメインメモリ1GB、2GBとか普通なんだから。
それ以上の物理メモリ使うのにPAEだけは使いたくない。
もっと速い段階で64ビット化されてればなぁ。
メモリよりもファイルやファイルフォーマットの2GBや4GBの制限のほうが先にネックになったよね。
そういうプログラムやフォーマットが作られた時点で64ビットが普及していればなぁ・・・。
54 :
デフォルトの名無しさん:2005/07/22(金) 20:15:23
テスト環境として、qemuかbochsを用いて、ホストがWin2000かXPでゲストにXP x64 Editionを用意したいのですが、
初めて向けに一から設定を説明してあるサイトって在りますか?
あったら教えて。
情報は何ももってないんだが、
QEMUもbochsも、x64エミュレーションに対応してるんだね。今調べてはじめて知った。
>>53 ファイルサイズの限界はCPUのビット数とは関係ないけどな。
16ビットCPUだからといってファイルサイズが
64Kに制限されていたわけじゃないし。
>でも近々アドレス空間は必要になるでしょ。
ほんとにそう思う?
グラフィックツール以外でこれだ、と思う用途がなさそうだし
それだって普通の人には32bit環境で十分だ。
おれにはSVHSの臭いがしてたまらないのよ。
メーカー製PCって256MB程度つんでるだけのが
まだまだ多い。
それじゃ使えないと騒ぐのはPC詳しい人間だけで、
WinXPも起動しないということは無い
まあPC供給元が64bitマシンしか作らなくなったら
徐々に変わっていくだろうけど。
関係あるよ。
CPUが32ビットだから、32ビットのAPIやフォーマットになってる。
もし64ビットだったら、64ビットのAPIやフォーマットになってたと思うな。
当時は
32ビットのCPUで、64ビットのAPIやフォーマットにすると、
オーバーヘッドが無視できなかったから。
現状64bitマシンで32bitマシンと物理メモリ量が違わないのが
問題だという人がいたけど、俺はもっと別の問題があると思う
それは、今のメモリ搭載量とバスの速度のバランスがそれなり
に取れているんじゃないかということ。
バスやCPUの動作速度が今のままメモリが数百倍積めるように
なっても、その分量全体にCPUがアクセスするのにそのまま
数百倍の時間がかかる。
これだとプログラムはしやすくなっても実質は遅い大容量デバイス
と変わらないんじゃないか
1GB走査するのに0.1秒だったら100GB走査するのに10秒だ。
リソースを豪華にしようとデータを搭載メモリに見合って豪華に
しても、プログラムの動作速度を決定する部分が一緒に100倍
にならないと活かしきれないと思う。
16bit->32bit
640KB->4GB
10MHz->3GHz
bus:?->800MHz
バランスよく進化したと思う
64bit、数百倍の搭載メモリが実現したとして、周囲の速度が
見合って上がるかな?
量子コンピュータ??
61 :
デフォルトの名無しさん:2005/07/22(金) 22:01:54
>>58 APIはともかく、ファイルシステムが扱える最大ファイルサイズは、
歴史的にはCPUのアーキテクチャよりも、そのファイルシステムが
開発された頃の一般的なストレージデバイスのサイズとの関連の
方が大きいように見える。
16bit PC で使われてた FAT ファイルシステムは31ビット分くらいの
ファイルサイズに対応しているし、32bit PCで主に使われていた(いる)
NTFSは41ビット分くらいのファイルサイズにまで対応している。
64bit PCになったから、これを51ビット位まで拡張しようという動きも
無い様だし・・
64bitはでかいファイルを簡単にmmapして扱えるだけでもメリットあると思うけどな。
OSがタコでなければだけど。
mmapして何やりたいのか例をキボン
>>59 現在の Intel式に FSB を通すと確かにそうなるけど、
AMD が SMP マシンでやってるみたいにプロセッサ
ごとにメモリバスが出てる方式なら、クロックを
変えずにメモリ帯域も増やせるのでは?
(SMP じゃなくて ccNUMA になるって話ね)
Rambus みたいにメモリバス幅を狭くして、チップ内の
マルチコアそれぞれからメモリバスを引き出すように
なるんじゃない?
メモリモジュール64個ってわけにはいかないから、
一つのモジュールから、複数のメモリバスを出すと。
>>64 もっとイメージ的な話で考えてます。あえて例を出すなら
現在のマシン:2Dテクスチャをリアルタイムでモーフィング:速度容量ともつりあってる
じゃあ64bitになった。テクスチャ3Dにしても容量的に現実の運用が可能に。
でもそれをCPUでグニグニしようとしたら上の例のようにリアルタイムで出来るのか?
速度もつりあって上がらないと駄目じゃないのってことです。
演算能力という意味では、今後はクロックの上昇率よりもコア数
の上昇率の方が比重が高いんじゃないの? メモリが64倍あっても、
コアが64個あって分割して処理すれば、O(N) 以下のアルゴリズム
は問題ない。
>>63 データベース以外では画像処理関係でレイアウトスキャナーとか美味しそうだな。
同じような理由で高解像度のマッピングを多用するCGにもいいだろう。
個人的にイイと思うことは上のどれでもないが、そっちは教えない。
>>66 ますます並列プログラミングの時代かねえ
クロック100倍は非現実的だけど、コア64個はどうなんだろ?
民生機として考えると、ぴんとこないのは五十歩百歩…
っていうかマジでMMXフッカツ希望
WOW64は完璧100%32bit互換モードと考えていいの?
32bitマシン上でのWOWはかなり動かなくなる16bitアプリ
あったけど。
今後WOW64が完璧に永久に32bitアプリを未来永劫保障
してくれるなら、32bitで十分なアプリを64bitにする気は
起きないんだが
ガソリンエンジンで十分な乗り物にジェットエンジン積もう
とは思わないのと同じ(今の64bitがジェットかは微妙だが)
Win32なドライバをインストールするようなものは駄目。
>>68 将来的にはコア64個なら現実的だと思う(だいぶ先だが)。
ただ、そうなったときに、原理的に並列化できない(しにくい)タイプの
プログラムの性能が置いていかれる。
ちょっと悲しい。
>原理的に並列化できない(しにくい)タイプ
そういうアプリって言い換えると32bitで十分じゃないか?
>>74 そうかも知れないけど、コア数の話だから関係ないだろ。
・・・ってスレ違いってことか。スマソ
>>74 スレッドによる並列化と64bit化の恩恵とはあまり関係が無いんじゃないか?
>>77 まあそれ言っちゃうと、x64でレジスタ倍増とかのうたい文句も
別の話になっちゃうしねえ。
スレッドというよりマルチコアとかでの並列プログラミングが
本格的に普及するのも64bitへの変更が皮切りになるんじゃ
ないか?
>>77 クロックが頭打ちだからこれからはコア数を増やすしかない状況を言ってると思う。
どうせ数年すればエントリーモデルですらデュアルコア64bitになってるだろうし。
64bit化ってだんだんに進むよね。
すでにデスクトップはほとんど64bitだけど、来年のYonahでも32bitだし。
32bitを切り捨てられる日は遠いなあ。
メモリアクセスって、2GB/secくらい?
したら、16GBメモリを積んだら、ゼロクリアするだけで8秒かかるのか・・・。
movntqとか使うと理論帯域に近いストアが出るべ。
DDR2なら3〜4GB/secいけるだろう。
ただ、スピードより容量の進歩が速いので、
ゼロクリアの時間はだんだん長くなってきたねえ。
>DDR2なら3〜4GB/sec
このくらいのメモリの幅を使うアプリの起動時間だと、
どのくらいかかるんだろうね? 今でもアプリの起動時間って
めちゃくちゃ長いものもあるけど、64bitをフル活用するアプリ
だと起動時間数分とかにならね?w
要は搭載メモリ幅に見合った速度がバス、CPUともに足りないだろ?
ノ イ マ ン 型 終 わ っ た な
>>85 ん?DSPみたいなデータ指向型プロセッサが台頭するとでも?
おれ、DSPのプログラムいくつかやった経験あるけど、
ちょっと使いにくいだけで基本はふつうのCPUと変わる
ところはなかったが…何が違うんだ?
>>72 16ビットアプリを内部的に使っているものも当然ダメ
(いまどきインストーラ以外には存在しないと思うけど)。
Ntナンタラカンタラみたいな非公開APIを使っているものは
仕様の違いで動作しない可能性がある。
Win16との互換性を捨てたためUSER/GDIハンドルが
65536個以上割り当てられる可能性ができた
パッと思いつくのはこんなところ
>>87 ノイマン型プロセッサは、命令を与えて動作するが、データ指向型プロセッサは
データそのものが命令になるというブツじゃなかったっけ?あまり詳しくないのでスマソ。
>データそのものが命令になる
よくわからんです
アセンブラの表記は各社各チップで独特だったけど、基本は
命令+オペランド、命令+オペランド、命令+オペランド…
でx86や68kなどと概念は同じだったと思う。
並列動作が見やすいように表記したりとかはあるけど、
些細なこと
>>88 さすがに16bitはもういいよなw
いろいろ参考になるthx
バッファオーバフロー型のワームがこれだけ世の中にあふれてるんだから
むしろデータとコードは厳密に分けようとするのがトレンドだと思ってたけど。
AMD64も全モデルNXビットサポートだったよね
>>80 はあ?
>すでにデスクトップはほとんど64bit
いつの間に!?
データ指向型プロセッサってのは
DSPの一種で存在したってだけで
DSPのことではないんでは?
>>93 あなたがここで時代遅れの薀蓄披露して識者気取りになってる間に
確実に時代は移り変わってるんですよ。おじいちゃん
>>95 こんど量販店行って64bitマシンがいっぱい並んでるところを確かめてきまつ
EM64Tをサポートしてるかどうかなんて傍目の表示で分かるの?
インラインアセンブラのスレはどこですか?
店員に聞く
OSが64bitじゃないマシンを64bitマシンとして数えるのは
ちとなあ
>>81 バスが遅杉の初代Itanium使ったらワロタよ。
CPUが増えても速度上がらないし、
メモリが4枚束ねられてるのに、そこらのDDRと同じ速度。
386が98に搭載されはじめた頃も
「32bitマシンだよ」として売られていましたが。
ええ、バンドルされていたOSはN88BASICだけですよ。
>>102 いやそういう煽りがくるとは思ったけど。じゃなくて実質というか実感。
メーカー製のマシンでWin64積んでるのってNECとかにあったっけ?
win64アプリがどこのご家庭でも動くとかならんと、ほとんどという
実感にはならないっす
ナニいってんだこいつ
だったら最初からそう書け
自分の言葉足らずに対する他人の突っ込みを
煽りとかいってごまかしてんじゃねーよボケ
だいたい一体何様のつもりだ?
「俺様が64bitマシンだと感じるものが64bitマシンだ」ってか?
バカじゃねーの?
こういうのを煽りって言うんだよ。
だいたい80は(明記してないけどおそらく)CPUについて言ってるのに
いつの間にかWin64の話にすりかえられてるし
単に周りが見えない人なだけでしょ。そうでなきゃ軽々しく煽りとか言わないし。
怒らせてしまったらしい…スマヌ
前スレはいいスレだったのに
110 :
デフォルトの名無しさん:2005/07/24(日) 08:22:35
愚露屋が絡むスレは荒れるな
そこでMMXネタですよ。
MMXが復活しない限り、64bit以降はありえないね。
俺が以降しないってことは・・・影響力も甚大だよ(w
アッソ
>>113 何か勘違いしてないか。移行しないのは112だけじゃなくて
このスレの113以外全員だぞ?
メモリのチップの大きさって今よりぜんぜん小さく出来るのか?
何十GB積もうと思ったらその辺も解決しないとだめだろ
え、CPUとかの微細化とは違った問題がある?
出来るんなら無問題。マザボとかは総とっかえだろうが。
そういう規格でてるの?
118 :
116:2005/07/24(日) 15:07:06
ああ、小さいメモリを作ってたくさん載せて何十GBを実現するのね。
それだと難しいだろ。
今はあれが限界なわけで。MicroDIMMとかやたら高いし。
大きさ覚悟で大量に載せるしかないかと。
それでも値段は高いだろうし、いきなりメモリの量増やすのは不自然ぽ。
やっぱ限界なのか
ムーアの法則もどうやら終焉を迎えたようだし
>>120 いや、それはリーク電流でCPUのクロックが上がらなくなってることだろ?
元々の法則はトランジスタの集積度が18〜24ヶ月で倍とかだから
一応今でも増え続けてるよ。
物理搭載も限界で速度も頭打ちか
頭だけ64bitを使えるようになってもなあ
x64はレジスタ倍増技術で、64bit化はオマケと思えばいいんじゃね。
レジスタ増えても大半のエンドユーザーには関係ないもんなあ…
16→32bit化を否定していた奴らを思い出す。
16→32のときはMMX禁止に相当するようなパフォーマンス低下の要因なんて
なかったし
16→32bitのときは速度も容量もまだまだ頭打ちではなかった
AMD64では32bitアプリもMMX、3DNow!を使わずにSSEの使用を
推奨しているけど、そこら辺はどうよ。
Intel知らんけど。
半導体の集積度は限界が見えてるんじゃなかったっけ?
130 :
デフォルトの名無しさん:2005/07/24(日) 16:51:44
淫テル、オワットル
i386も初期の奴はi286より遅かったんじゃなかったっけ?
AMDのXMMXはMMXと同等か速いの? インテルのしか使ってないので知らんのだが
>>132 んなこたない。あからさまに遅くなる。レジスタ倍増したメリットもかたなし。
AMDのもMMXとXMMでユニット共用だ。
MMX→SSE2で遅くなるって言う人、どういうコードで遅くなるの?
よろしければそのコードの例を見せてよ。
135 :
デフォルトの名無しさん:2005/07/24(日) 17:16:34
淫テルがボロいからだろ。
x64コード走らせると遅くなりことが多いらしいぞw
136 :
デフォルトの名無しさん:2005/07/24(日) 17:17:26
×遅くなり
○遅くなる
MMX最強杉
AMDの除算最強杉
>>134 コードじゃないけど、「SSE2 遅い」でググったらすぐにヒットする。
遅くなるって香具師の方がこのスレでも多い。
もちろんSSE2を活かせる場面も否定しないよ。速くなる状況に関しては使ってるから。
>遅くなるって香具師の方がこのスレでも多い。
IDがでないこの板で、そんなこと言っても仕方がないですね。
実例を出す方が説得力ありますよ。
プログラムしたことあるやつかどうか疑ってしまう
> 遅くなるって香具師の方がこのスレでも多い。
笑った
「スラドでこういう意見が多い」より酷い
出来たら速くなるコードを見せて欲しいもんだ
MMXとSSE2を比較してSSE2のほうが速かったよ。
コードはRSAのMD5を、MMXやSSE2を使うように書き換えただけのもの。
で、互いに具体的なコードは一切晒さず神学論争ですか
>>146 どんなケース?
1・mm0->xmm0 ほぼこれだけ
2・mm64bit幅からxmmの128bit全て使うようにした
3・SSE以降のMMX補完命令を使った。pmulhwとか
4・計算途中を浮動小数に変えてでも適用した
150 :
146:2005/07/25(月) 00:16:19
>>148 2番です
MD5の計算は前後の依存が強いのでSIMD向きではないです。
本来ならマルチスレッドでやる複数のMD5の計算を、
まとめて1つのスレッドでやることで、SIMD化しています。
MD5の計算は32ビットなので、SSE2を使うと4本同時処理なわけですが、
すぐ前の計算結果を使った計算が多くてパイプラインがストールしまくるので、
4本を4組分、命令単位で交互に織り交ぜてやることでスループットを稼いでます。
それでもまだ若干パイプラインに隙間があるのだけど、
SSE2のレジスタの数が足りなくなってしまうので、
通常の整数レジスタを使った計算を4組分織り交ぜることで、
さらにスループットを稼ぎます。
こうして20本分を同時に計算することで、
MMXによって2本1組分に対して4倍の速度が稼げます。
151 :
146:2005/07/25(月) 00:22:11
あ、ごめん。
最後のところ、MMXだけ2本1組と比較したらダメだよね。
SSE2を使わない場合のピークは、
MMXを2本1組、通常の整数レジスタを1本7組の場合で、
SSE2を使えば、その約1.5倍くらいのスループットが出ました。
>>151 1.5倍か素晴らしい
md5のソース見てみたけど、ビット操作の鬼だな。SIMD化するの
大変だったでしょう。十分な手動パイプライニングの手間を惜しま
なければxmmxも効いてくるってことですね。
こっちはケース1・2では全滅。(画像変換処理)
P4の命令レイテンシ/スループット表をみると、MMX→SSE2化で効果ありそうだけど
逆にAthlon64だと効果ないっぽい。
2x2の行列の掛け算を148の(2)(3)でSSE2化しても、Opteronでは
まったく速くならないし遅くもならなかった。
まぁ、精度の関係でもうMMXは使っていないけどねー
>>153 SSE以降は、MMXでは精度が足りないようなところを補完する形で
使うとプログラムの全体的なアップにつながるね
>>155 大量のメモリが使える。つまり馬鹿でかい配列が使える。
マセマチ子さんは超巨大データを扱う需要はありそうだね。
>>156 64bitじゃないと確保できないサイズの配列って、どんな演算に使うの?
>>158 シミュレーション等ではいくらでも用途はある。
天気予報とか?
32bitでの、XMMがMMXより速い点。
・XMMはレジスタが広いので、同じ8個でもアンロールした効果が得られる。
・Pentium4ではL1からのLoadがMMXの倍の帯域。
・Pentium4ではMMXが弱い(レイテンシがXMMと同じ)ため、相対的に速い。
遅い点。
・使ってみるとわかるが、movdquがなぜかmovq*2より遅い。
・単純にレジスタが大きいから小回りが効かない。
・特定ユニットを使う命令が連続すると、命令が大きいため逆に並列実行を妨げる。
・Pen4以外では、内部でMMX*2に分解するのでデコーダの負担が少しある。
・psadbwは命令自体がMMX*2仕様なのでXMMで使うと余計な演算が必要になる。
>>151 1.5倍ということはPentium4だね(違ったら教えて)。
依存チェーンがきつい場合にSSE2は強いかも。
>>155 64bit*64bit=128bitの整数乗算ができるのが大きいと思う。
汎用の64bitレジスタより、mmの方が速い様な希ガス。
@Athlon64 cgコア
AthlonってMMXは汎用レジスタと違う実行ユニットなの?
>>163 それより古いC0コアのOpteronでは、mm(64bit)も汎用も変わんないよ。
x64のmasmってmmx命令にも対応しているのねw
>>165 うちのml64.exeは使えないぞ
↓というエラーが出る。
ml64.test.asm(5) : error A2222: x87 and MMX instructions disallowed; legacy FP state
not saved in Win64
psdkの人は残念。
vs2005 beta2のml64ならMMX対応。
169 :
デフォルトの名無しさん:2005/07/25(月) 21:06:51
MMレジスタを32本にしてF32vec2型とF64vec1型サポート汁
IA64なら汎用レジスタは128本だぞ
過去の資産をおろそかにするCPUは市場では歓迎されない
172 :
146:2005/07/25(月) 21:42:48
>>152 SIMD化は簡単でした。
分岐がなく、パックしてるデータ間は独立しているし、似たような演算ばかりなので。
MD5くらいだと、コンパイラのスケジューリングでも十分です。
他の人がアセンブラで実装したのと比べても遜色ないどころか、速いと思います。
アセンブラで書いてたらやってられないようなコードも楽勝なんで。
※ただし、コンパイルに異様に時間がかかりますが・・・。
>>162 Pentium4です。
ソースコードは非公開ですが、
http://www.geocities.jp/ny2scan/nyTripper.html のnyTripperMD5bench10.zipで比較できます。
SSE2とMMXと整数レジスタの混合比を変えて総当たりして、
そのCPUでもっとも速い組み合わせを見つけ出します。
これの出力の
X-X-X
というが、
左から、SSE2、MMX、整数レジスタ(EAX等)の並列数です。
たとえば2-0-2の場合、SSE2で32bitx4 x2、整数レジスタで32bit x1で、9並列での計算になります。
>>170 128本を好き勝手に使えるわけじゃないから。
ってより…
メモリモデルのタイニー、スモール、コンパクト、ラージの話に近いんじゃないのかね。
あの時よりも、メモリの増大量が全く追いつかない訳だから、64bit化って意味だと時間は当然掛かるでしょ。
レジスタ数が増える分の向上はそれなりに大きいからx64化自体は急速に進むだろうけれども。
アドレス空間が広いのでファイルをマップするような場合はとても楽。
今の64bitを往時の32bitに例えると、今の32bitが往時はバンクメモリやらEMSやら。
データベースや全文検索など今後は個人や小規模オフィスでも需要が確実にある
応用に格段に有利だし、移行を進めるマーケットのパワーも往時より遥かに
強いので今更32bitにこだわるのはただのバカ。
>>173 レジスタ数なんて瑣末なことはほとんどx64の普及の要因とはなっていないよ。
そんなのは64bit化のついでに変わる様々なことのごく一端でしかない。
いくらメモリ空間が膨大にあっても、
ファイルを丸ごとメモリマップした場合、
プログラムからOSへヒントをちゃんと与える仕組みがあって、
適切にヒントを与えないと、かなりパフォーマンス的に厳しいものがある。
というのではわからない人もいるか。
実メモリの数倍のサイズのファイルを丸ごとメモリマップして、
先頭→末尾→先頭と、メモリを舐めた時に、何が起こるのか、
よく観察してみると、何が言いたいのかわかると思う。
>先頭→末尾→先頭と、メモリを舐めた時に
ライトするならヘッドが結構動くだろうけど、そもそもそういった使い方はしないんじゃないかな?
ディスクのいじめ方を知るにはいいと思うけど。
OS的には先読みするかと、どのページを残すかというアルゴリズムの問題だから
64bitだからといって大きく変わるわけではない。どうせ残せるページの数は実メモリ
のほうで決まるからね。OS的にはむしろ自由度が上がるという感じ。
いくらメモリが使えても、MMXが使えないんでは無意味。
>179
なるほど、んじゃ何使うね?
広い空間が不要でMMXが使いたいのなら32bitコード使ってりゃいいじゃん。
仕事で64bitに対応させざるを得ないこともあるんだろう。
仕事で金貰えるんならMMXが使えないくらい我慢しろ。
64ビットにしたら速くなるんでしょ?
というアホな客のために対応せざるをえないこともある。
んで、速くならなくて怒られる。
速くならないですよって最初に言ったじゃないですか、
とかいっても、それを信じないような客は覚えてないし、
責任も取らない。
ところで、64ビットではx87が一切使えないって話だけど、
超越関数はどうやって実現してるんだろ?
SSEにfsincosみたいのあったっけ?
おれはほんとに64bitが必要になるまで32bitで行く。
64bit演算が必要なくらいじゃロングモード使う必要ない。
32bit以上の計算がいるなら浮動小数で十分な場合が
ほとんどだし、__int64もある。
malloc(2GB)が必要にならない限り…
>>186 じゃ、このスレには用はないね。さようなら。
……あーすまん、それはウソだ。
>>172 オレももういちどXMMのコード見直してみるか。
とはいえロングモードでインラインアセンブラは欲しい
>>161 >単純にレジスタが大きいから小回りが効かない。
これ、ネックになってる気がする。
>>191 64bitではプログラムで超越関数を実現してるのか。恐れ入った。
もうさ、それでは絶対にx87より速くなりっこないから。
RISC的な考え方なのかもしれない。
どうせ複雑な処理はマイクロコードで展開するわけで、
だったらコンパイラにやらせりゃいいじゃん、という。
32bitな某コンパイラも、超越関数はソフトウェアだな
なんで妙な勘違いするんだろうね。
一昔前のマイクロコードだと超越関数は反復(CORDICとかSTLとか)だったけど
精度保証がいらないなら級数展開が断然速いんじゃないかな。
64Bitの話題から脱線しまくっております。
>>196 詳しく。
MSCは直接x87を呼んでいるようだけど。
プログラミングって、インラインアセンブラがあるからこそ
高尚なものになりえてると思うんだ。
>>198 反復ってNewton法みたく収束反復のことでは?
203 :
デフォルトの名無しさん:2005/07/27(水) 00:24:23
>>171 思うにハードが十分普及して枯れてきてからが、ハードの演算ユニット実装数に依存しない
APICアーキテクチャの本領発揮かと。
>>172 やっぱりnyTripperの人が来てたのか。MD5を並列とか言ってたからそんな気がしてた。
# てか俺もトリップ関連のソフト作ってるんだけどさ(ぼそ
そのうちPentium M最適化もおながいしますね。命令のレイテンシ短めだから、依存関係の
引き伸ばしはあんま必要なく、むしろレジスタを節約してL/S頻度を落としたほうがよさげでs。
で、そのPenM、たぶんクロックあたりのMMX性能は最強の部類に入るのにSSE2はサッパリ駄目ですな。
XMM μOPsフュージョン実装待ちかな。
>>196 たしかPowerPC 970向けの最適化がそんな感じ。
ATL/WTLをWin64向けにビルドしても結構バグで落ちるらしいけど
大丈夫かいのう
淫乱アセンブラ使いたいならgccでいいじゃん
205 :
デフォルトの名無しさん:2005/07/27(水) 00:26:36
>>171 思うにハードが十分普及して枯れてきてからが、ハードの演算ユニット実装数に依存しない
APICアーキテクチャの本領発揮かと。
>>172 やっぱりnyTripperの人が来てたのか。MD5を並列とか言ってたからそんな気がしてた。
# てか俺もトリップ関連のソフト作ってるんだけどさ(ぼそ
そのうちPentium M最適化もおながいしますね。命令のレイテンシ短めだから、依存関係の
引き伸ばしはあんま必要なく、むしろレジスタを節約してL/S頻度を落としたほうがよさげでs。
で、そのPenM、たぶんクロックあたりのMMX性能は最強の部類に入るのにSSE2はサッパリ駄目ですな。
XMM μOPsフュージョン実装待ちかな。
>>196 たしかPowerPC 970向けの最適化がそんな感じ。
ATL/WTLをWin64向けにビルドしても結構バグで落ちるらしいけど
大丈夫かいのう
206 :
デフォルトの名無しさん:2005/07/27(水) 00:29:54
>>171 思うにハードが十分普及して枯れてきてからが、ハードの演算ユニット実装数に依存しない
APICアーキテクチャの本領発揮かと。
>>172 やっぱりnyTripperの人が来てたのか。MD5を並列とか言ってたからそんな気がしてた。
# てか俺もトリップ関連のソフト作ってるんだけどさ(ぼそ
そのうちPentium M最適化もおながいしますね。命令のレイテンシ短めだから、依存関係の
引き伸ばしはあんま必要なく、むしろレジスタを節約してL/S頻度を落としたほうがよさげでs。
で、そのPenM、たぶんクロックあたりのMMX性能は最強の部類に入るのにSSE2はサッパリ駄目ですな。
XMM μOPsフュージョン実装待ちかな。
>>196 たしかPowerPC 970向けの最適化がそんな感じ。
ATL/WTLをWin64向けにビルドしても結構バグで落ちるらしいけど
大丈夫かいのう
落ち着けよ
ごめん、なんかサーバの調子が悪くて連投になってもうた
>>199 ICCのP4向け最適化がそんな感じだったかと。
std::swap(p1, p2); で xchgに展開してくれるのが真の最適化コンパイラかと思う。
Intelコンパイラは酷すぎ。C++ライブラリクラスのメソッドのインライン化が全く利いてくれない。
SIMDだけなら最強だけど・・・
xchgってかなり遅いんじゃなかったっけ?普通のロード/ストアに比べて。
そもそもバスロックかかるし。
バスロックはかからないよ。
たいていはlock prefix付けてバスをロックして使うけどさ。
レジスタ値の交換には有効でしょ。
Pen4はメモリ−レジスタが半端なく時間かかる
というか、インラインアセンブラだの最適化だのほざいてるのって
結局この程度の連中が殆どなんだよね。
>>215 そういうお前は「この程度」以下なわけだな。
つーか210は突っ込み所満載だからネタだろ?
結局インラインアセンブラなんて使わずに、コンパイラに任せた方が大抵早くなるってこったなw
つーか、最近のコンパイラの最適化を侮っちゃいけない。
あれに勝てるアセンブリコード書ける人間なんてそういないんだし・・・
高速化のためにインラインアセンブラ使わせてくれってやつは、自分の実力把握してないんじゃね?
いや、別に馬鹿にしてるんじゃないよ。ただ何度も言うが最近のコンパイラに勝てる人間なんてそういないんだから…
219 :
デフォルトの名無しさん:2005/07/27(水) 12:01:33
xchg
デスティネーション・オペランド(第1 オペランド)の内容をソース・オペランド(第
2 オペランド)の内容と交換する。オペランドには、2 個の汎用レジスタまたは1 つの
レジスタと1 つのメモリ・ロケーションを使用できる。メモリ・オペランドが参照さ
れていると、LOCKプリフィックスの有無、あるいはIOPL の値に関係なく、プロセッ
サのロッキング・プロトコルが交換操作が持続している間自動的にインプリメントさ
れる
夏だな
うぜー
Athlon64だと、XCHGは16クロックもかかる。(L1ヒットで)
mov rax, a
mov rbx, b
mov b, rax
mov a, rbx
の方がずっと速いと思う。
>>218 コンパイラが吐かない命令を埋め込むときに使ったな。
ビットスキャン(場合によっては速い)とか
スピンロックとか。
あ。MMXモナー
MMX使ってる原始人はもうこのスレ来るなよ
Win64限定じゃあるまいし
>>210 レジスタが空いてないときに交換するなら便利かもしれんが、
そもそも自分でアセンブラ書くときにxchg使ったことないな。
>>213 Pen4ってLoadは普通に速いし、Storeはライトスルーだけど
その対策として384byteのストアバッファがあるから、交換目的には問題ないと思う。
>>221 レジスタ同士の値交換したい場合は?
まあ別に値さえ同じじゃなければ
xor *ax, *bx
xor *bx, *bx
xor *bx, *ax
でもいいんだけどさ。
こうや・・・間違えたorz
xor *ax, *bx
xor *bx, *ax
xor *ax, *bx
いまさら奥山教祖かよ、、、
少なくとも現代のCPUならテンポラリレジスタ使って普通に書いたほうが
ずっと速いぞ。64bitならレジスタも増えるし。
x86やx64のxchg命令は速度よりアトミックな交換ができるという点が重要なわけで
/O3や/Oxでコンパイルしてもstd::swapをわざわざ関数コールするICCのアホさ加減こそ突っ込みどころじゃなかろうかと
>>232 関数なんてコールしていないじゃないか。
嘘つき野郎
嘘も方便
、 l ‖_ >:=‐  ̄ ̄「 l| l } 、 ヽ んっ んんっ…
ヽ 、i`─ '´ ___ | ll ⌒; j 、 ヽ
\ヽ r,ニ、‐‐'‐' u .l ll '_ノ 、 ヽ
` \"\):、 | l| `、 ヽ 、 ヽ
ヽ ゞ'^ ! ll `、 ヽ 、 ヽ
丿 .:::. | l| \ ヽ、 、 ヽ
丶、_ | l|/lヽ `>=‐- ミヽ `、
`⌒ヽ_ | l| | ハ /´ `ヽ 、
チュパ / /. `´| l| | l / 〃 `、 、
チュパ / / | l| | l' 〃
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です
32ビット実行形式から64ビットモジュールを呼び出す方法は存在しないのか?
ShellExecuteかsystemあたりでパラメータ渡して起動するだけなら原理上できそうだけど
それに何のメリットがあるのか
ないわきゃない。API呼び出しは結局すべて64bitのntdllに転送されてるんだから。
でも公開されてない。
out-of-process COMって手もあるね。結局はプロセス間通信だが。
まあ32bit/64bitの区切り単位がプロセスなんだからプロセス間通信になるのは
仕方ないよね。COMでも自前で適当なstubを書いてもいい。
そのあたりを自動生成するツールなんてもう誰か書いてそうな気もするけど、ないの?
で、その橋渡しをするのが怒涛熱湯ですよ
本屋を当たる限りWin64の情報が全く無いんだけど、全部CLRに移行させる気なのかね。
基本命令セットすら知らない。
mmintrin.hで書いたMMX向けコードをx64向けにコンパイルしたらx64汎用レジスタベースに展開されてしまった。
パックド演算特有の処理をどう展開するのかはまだ試してないが。
基本的には*mmintrin.hで書いておけばx86でもx64にもIA64にも対応する並列化コードが書けることだけはわかった。
それにしてもItaniumのコード素晴らしすぎる。惚れた!ここまでレジスタがリッチだとなんでもできんのね。
一般向けには売らないのかしら。。。
Intelは一般向けもIA64に移行させる夢を描いていましたが
市場にそっぽを向かれてAMD64で止めを刺されますた
唯一Powerに対抗できるプロセッサだし方向性が間違ってたわけじゃないとおもうけど
ダイナミックトランスレーションで「同クロックのNetBurst並みの性能」じゃちょっとどうしようもないかもね。
同クロックのPentium M並みならかなりイイが
やっぱLinuxしかないのか。
単にOSなしってだけで、WindowsはMSDNでダウンロードすればいいんですよ。
64bitアプリ開発の参考になるサイトない?
OSは?
64bit版WinXP
251 :
249:2005/09/03(土) 20:59:01
>>250 ならば、マイクロソフトのサイトやMSDNを見たほうが早いよ。
簡単に設定したければ VisualStudio 2005 の発売を待つ。かな。
254 :
デフォルトの名無しさん:2005/09/05(月) 03:00:08
「はじめて読む486」みたいな良い本で、
最近の pent3〜pent4・amd64 までサポート
しているような書籍ってないですかね?
255 :
デフォルトの名無しさん:2005/09/05(月) 13:18:09
>>254 そんな都合の良い本は売ってない。
書籍メーカーも儲けないといけないので、全部別冊で出してるよ。
256 :
デフォルトの名無しさん:2005/09/05(月) 14:01:50
ttp://www.tkool.org/punge/sinsa/No2.zip ここにひとつのゲームがある。
このゲームは既存に存在するゲームへのアンチテーゼ。
何から何まで説明され、ユーザーが考える余地のないゲームが
多く存在する昨今、今回は「逆にまったく説明しない」または
「教えようとしない」コンセプトで作ってある。
なんだコレ?で終わる人間も居るだろうし
意味を探る人間も居る。
何かを感じないのも、何かを感じるのもどっちも間違いではなく、正解でもない。
枷を嵌め、尚もその枷を越える「チカラ」を手に入れるべき人類。
それは創作のみならず。
人類の飛翔は今の腐った思考で今を生きている、漠然と生きている
そんな人間達に一喝を入れるべきがあたしの作る「ゲーム」だ。
上記に何も感じなければ間違いではないと言ってるが
個人的には「この意味」を理解できない奴は何を作っても無駄だ。
あたしが目指す「ゲームの最終地点」は
「プログラム上のみならず現実世界ですらそのゲームを髣髴させる事」にあり。
世界を超えるデバイスとなるゲームを作る。
それがあたしの希望であり、全ての人類への警鐘となる。
目覚めよ、人間たち
258 :
デフォルトの名無しさん:2005/09/15(木) 14:33:35
32bitの演算も高速化されるのでしょうか?
されないのがふつー
32bitの演算は技術的には通常のまま
ただし、64bitと32bitの変換が入るので、オーバーヘッドは微々たる物だが、あるといえばある。
基本的に32bitの処理は32bitOSにやらせるのが一番。
ま、カーネルチューニングもされてるので、多少高速化されてるんだけどね。
ただ、ドライバのチューニングは逆に遅れてるので、結局総合的に見て、同じか判らない程度劣ってるんじゃないかな。
>>261 32ビットの演算で、64ビットと32ビットの変換のオーバーヘッドがかかる
32ビットの演算が、32ビットOSと64ビットOSで速度が違う
この2つのことについて、もう少し詳しく教えてください。
私はてっきり、オーバーヘッドなし、速度の違いなし、だと思っていたのですが・・・。
>>262 オーバーヘッドってのはOS呼ぶときにの話でしょ。
そんなの微々たるものだし、そもそも計算ネックのアプリケーションでは
無視できる程度だよ。
amd64/EM64Tで、64ビットOS上で64ビットアプリで32ビット計算をする
話なら、レジスタ数や関数コールの違いで速くなるんじゃないかね。
266 :
262:2005/09/15(木) 21:25:20
>>264 OSを呼ぶと変換が生じるのでオーバーヘッドがあるのはわかるのですが・・
>>261には、32ビットの演算に変換が生じてオーバーヘッドがかかり、
32ビットの演算なら32ビットのOSのほうが速いと書いてあるので、
なんか自分の知っているのと違うなぁ、と思いまして。
268 :
262:2005/09/16(金) 00:02:31
>>261は釣りか、さもなくば真性の馬鹿だったんですね。
今夜は安心して眠れそうです。
真性のバカに一票
プレス子の実装だと、多少はあるんじゃねーのか。
あと、アーキそのものが違うからなんとも言えないがIA32>IA64上のIA32EL
かつてのAlphaみたいにクロックの差で補うつもりだったんだろう
でもどうしても一番金の掛けられるIA32の進化には勝てない
>>258 「32bitの演算」に限定すれば同じ
「32bitのデータの処理」辺りまで広げれば違いがある可能性がある
けど一般論は無理だろう 具体的かつ定量的に検討しないと
16bit32bitになったときに、とても高速になった気がしたのですが、
今回はあまりそんな気がしないのが何故?
>>273 どうせ32bitの初めて買ったCPUが486とかPentiumとか、そういうオチなんだろ。
アドレス空間も整数の幅も 32bit で十分なアプリが殆どだから
64bit 幅のデータ転送が結構大変だったから
>>273 が Pentium を使ってるから
どれ?
16ビットの時にhugeポインタを使いまくってたから、に一票。
>>275 64ビット幅のデータバスなんて初代Pentiumでも実装してたぞ。
Pen4はコア内では最大256ビットじゃなかったかな。上り下り計で。
>>273 16ビットCPUは286で20MHzくらいまででキャッシュメモリなし
32ビットCPUは386以降で33MHzくらいからで命令もキャッシュメモリも追加された
ビット幅に関係なく32ビットが早い。
486 100MHzでメモリも80Mバイト載ってると仮定する。
Windows3.1 DOSの16ビットファイルアクセス、DOSのディスクキャッシュ
そしてシングルタスクなので遅く感じる
Windows95 大量のディスクキャッシュを使い32ビットファイルアクセス
マルチタスクになり 3.1アプリがエラー出しまくり
そしてOSの32ビット化が進み、ボトルネック解消で高速化
(メモリアクセスは32ビット必要だから)
さらにマルチタスクで早く感じる。実際レスポンス、描画がめちゃはやになった。
メモリは20MBくらい以上でWindows95の方がはやくなるが、それ以下では3.1が早い。
当時16MB〜32MBが普通だったし。
適当すぎ。
286は5〜12MHz
386は16〜33MHz
ちなみに、486は20〜100MHzな。
386でL1キャッシュが載ったのは、サードパーティ発売分だけだろ。
Intel(c)謹製にはなかったのでは?
あ、サードパーティ≠セカンドソースな。
で、386、486と模造品を作られるのに業を煮やしたIntelは、586として
発売予定だったCPUをPentium(c)として登録商標化し、他のメーカーが
使えなくした。
全角英数ウソ書きすぎ
>>278 2chデビューしたてで、何でも書いてみたかったのか。
どの板でもそうだが、嘘を書くと、激しくバッシングされるぞ。特にIDの出る板は気をつけな。
>>279 あれ、386のクロック下限 > 286のクロック上限だっけ? 逆じゃない?
少なくとも80286の16MHzはあったと思う。
PC-9801で80386載せたやつが出始めのとき、EPSONはそれより速い80286搭載の
互換機を出して「大差ないから速い方がいいでしょ」みたいな広告打ってた
記憶があるんだけど。
Intel製でなくても良いのなら、286相当で20MHzというのもあったな。
確かAMD製だったか?
俺のおぼろげな記憶だと、
386は16MHzから、286は16MHzまでだったんじゃないかな。
もしかしたら、286は12MHzまで(
>>279の通り)かも。
で、エプソンに使われていた286の20MHzとかは
Intel製じゃなくて、AMDとかのセカンドソース。
これは、「命令互換」じゃなくて、中身の回路もIntelと同じもの。
287 :
286:2005/09/17(土) 09:21:40
つーか糞かぶりやん。
やっぱ286は中途半端で使い物にならんな。
16bit→32bit の時は速度よりも忌まわしい「セグメント:オフセット」の壁から解放されて
メモリがフラットに使えることが一番嬉しかった。
32bit→64bit では特殊な用途でもない限り、1つのアプリでそこまで大量のメモリを
必要とすることは当分ないだろうからなぁ・・・
290 :
278:2005/09/17(土) 13:03:27
>>290 ちょっと待て。
>確か286と486で周波数あたりの処理速度を測ってみると3倍だか10倍だかあったんだよ。
>動かすものによるけどね。
俺はこの意見に一度でも反対したか?L1を載せて、486がそれまでのCPUよりも
馬鹿っ速くなったのは、当然知っている。というか、EPSONの486-25MHzを載せた
98互換マシンを持ってたわけだが。後から486DX2が発売され、それも買って差し
換えたよ。
それを、俺がまるで知らなかったような書き方をされるのは、頭にくるな。
お前もうちょっと人の書き込みをよく読むようにした方がいいよ。自分に都合のいい
部分しか目に入らないとは、やっぱり馬鹿だと言われかねないぞ。
昔話もちょっとは面白いけど、続けるならそういうスレ行ってやってくれない?
Windows3.1をシングルタスクとか言ってる時点でバカ確定ですが
>>293 ノンプリエンティブマルチタスクはマルチタスクなんかじゃない
漏れは職場でUNIXはMM(マルチユーザーマルチタスク)、
WindowsはSS(シングルユーザーシングルタスク)と習った。
状況が変わったのはWindowsNTと95の登場でだ。
http://www.intera.ne.jp/~friends/toku/pcwin95.html 一世代前のWindows3.1はマルチタスクといってもウィンドウが
有効(アクティブ)になっているソフトだけが動作していて、
他のウィンドウは停止状態になっていましたので疑似マルチタスクと呼ばれています。
切り替えだけならDOSだって特殊なソフトで複数切り替えられた。
ただ裏のやつを保存しそこなうから結局使うのやめたが。
ちなみにWindowsは2.0から使ってる。
>>294 一つのアプリがハングしたら、全部のアプリがアウトだったからなぁ。
とても仕事には使えなかった。
>>296 ぶっちゃけお前には言っていない。失せろ。
>>296 はいはい。
レベルが低いとは言え、200人ものプログラマを抱える部署で言われてたのを
馬鹿の一言で済ませるわけですか。
ばかっちゃあ馬鹿ですが、あんたに言われたくないってこった。
>>298 >馬鹿の一言で済ませるわけですか。
もちろん済ませる。
>ばかっちゃあ馬鹿ですが、あんたに言われたくないってこった。
言わなくたって事実だしな。自覚があるのはいいことだ。
ここは16bitスレですか? いいかげんにしましょうよ。
>>300 8ビット脳が16ビットを語るとこうなると言う見本。
マ板逝け!!
でもまあ2.0はさらっと触って華麗にスルーが基本だったよね。
「2.0から使ってる。 」ってのは当時の判断能力を疑われても
仕方がない。
>>303 日立のシステムで日立の人が入れたんですよ。
判断したのは日立です。
つーか2.0しか動かないような古い端末だし。
基本ホスト端末だし。
いや最初オペレーターだったから使うだけだったんだよね。
あのころはオペレーターっていう採用枠があって良かったよ。
>>304 だからここは昔話をする板じゃありませんから。うぜーんだよジジイ。
>>298と
>>304を見比べると面白いな
「200人ものプログラマ」と「オペレーターっていう採用枠」とやらの接点が分からんw
要は昔話してるじじいは当時下っ端の下っ端だったってことでOK?
307 :
デフォルトの名無しさん:2005/09/17(土) 14:37:56
>>305 そんなこと言ってるとここゴミばっかりにするけど?
Windows2.0みたいに華麗にスルーすればいいのに、
君の判断能力を疑うよ。
つーか君には64ビットなんて無駄だから他のスレに行けよ。
>>306 新卒から下っ端じゃないなんてたいそうなエリートさんですね。
事件現場に居合わせた警察官僚はホントにじゃまばっかしくさって役にたたなかったよ。
事件が見えてないんだから。
308 :
デフォルトの名無しさん:2005/09/17(土) 14:39:18
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < ま〜たはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
>>307 これだから脳の硬直化したロートルプログラマは困るねえ。
>>309 が柔軟な解決を見せてくれるそうですね。
・・・・無理だと思うけどね。
>>310 悪いけど昔のPCには興味ないよ
Pen4よりPen3がいいとは思うけど、Pen3よりPenMがいいからね。
>>313 詭弁じいさんは会社の中でも浮いた存在だろ。リストラはまだなの?
これからはインテルよりAMDの時代かな。
ほんとのマルチコアが普及したらどうか分からないけど、
IA64とかいらね。
IA64が必要になるのってどんな?
2チャンネルの良心、モララーデビュー! 2000/04/10 モララー誕生スレ
1 名前: 名無しさん 投稿日: 2000/04/10(月) 00:35
Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ・∀・)< やめてやれよ!
( ) \____________
| | |
(__)_)
でもそれ以前に使ってたけどな。
> 確か286と486で周波数あたりの処理速度を測ってみると3倍だか10倍だかあったんだよ。
> 動かすものによるけどね。
くわしく。
286が2クロックで実行する命令を、
486は1クロックで実行しているので
概ね2倍になるはず。
ZOBのcpubenchでは、
286の10MHzのスコアは5.69。1MHzあたり0.569ポイント
486DX2の66MHzのスコアは84.26。1MHzあたり1.277ポイント
その差は2.24倍。
323 :
デフォルトの名無しさん:2005/09/17(土) 19:37:02
プログラムサイズがキャッシュに収まる場合に10倍差が出た。
まんでるぶろなんとかだったかも。
286ではじわじわ描画されるのに、キャッシュ搭載だと一瞬でなんども描画したと思う。
周波数も違ったけどね。
あ、小数演算とか割り算多用したかも。
確かキャッシュを有効にするドライバが必要で、OnとOffで全然違ったような気も。
ライトキャッシュのOnOffだったかな?
でもBIOSでライトキャッシュ切り替えても体感速度変わらないよね?
>286が2クロックで実行する命令を、
>486は1クロックで実行しているので
>概ね2倍になるはず。
とはいえ、メモリアクセスが遅いので、286は待ち時間が多いんですよ。
>286の10MHzのスコアは5.69。1MHzあたり0.569ポイント
>486DX2の66MHzのスコアは84.26。1MHzあたり1.277ポイント
これ参考にするとクロックあたりでの計算しなかったかも。
でもいろいろ条件変えて実験したんだけどな。
全角厨は馬鹿。
てかさ、いいかげん過去の記憶だけで物言うのやめてくんないかな。
>>323 CPUBENCHはキャッシュに収まるくらい小さいよ。
浮動小数点演算は286はソフトウェアでゴリゴリやるけど、486はハードウェアで計算するよ。
キャッシュをドライバで云々するのは偽486だよ。
286の10MHzはメモリアクセスノーウェイトだよ。
286でも486でも、メインメモリは同じ80nsのDRAMだよ。
そろそろ64bitの話もしよーや。
186→286の高速化はクロック上昇
286→386の高速化はパイプライン採用
386→486の高速化はマイクロコードのハードワイヤード化
だったような希ガス。いい加減な記憶で書いてるから
はずれてるかもしれん。
16bitCPUスレ立ててそこでやれ!
330 :
デフォルトの名無しさん:2005/09/17(土) 20:43:38
やれやれだぜ
>>329 関連あるからいいだろ。
多ビット化は高速化に寄与するかって命題なんだよ。
>>326 >キャッシュをドライバで云々するのは偽486だよ。
そうそう。偽486だよ。
いや、インテルだったとは思うけどO/Cだったような。
いや、486SXとは書いてあったけどIntelだったかな??・・
>>325 286とか486のパソコンなんてもう持ってないし。
>>330 まったくだ。
いい加減すれ違いの懐古厨はカエレ
333 :
デフォルトの名無しさん:2005/09/17(土) 21:51:51
>>332 オマエも無駄な発言してないで64ビットについて語れ
おいおい相手してもらえちゃってるから、喜んでるじゃねぇか。
全角厨はそっとしといてやれ。かわいそうな人なんだから。
どうせ昔話をするならWindows 2000 for Alphaの話でもしようぜ。
>>335 ああ、いいな。
いい感じだ。
WindowsNTなのにAlphaサーバーでツールが動かないんだよ。
パソコンで作ったソフトも動かないんだ。
エンディアン違うからそのままコンパイルじゃうまくいかないんだ。
でもあれが激早だったんだよな。
いっその事Windows2000RC2の話しようぜ!
うちじゃ現役で動いてるよ!
>>336 > エンディアン違うからそのままコンパイルじゃうまくいかないんだ。
alphaはlittle endianだから、x86と同じだよ。
っていうか、Windows NTが移植されたプラットフォームは全て
little endian。
で、結局64ビットになっても処理速度の点での恩恵は64ビットの演算を行わない限りあまり恩恵はないということでいいの
>>342 それと64bitの(リニア)アドレス空間が要るかどうか。
64ビットのアドレス空間があればさ、全部のファイルをメモリマップしてもいいね。
悲惨なことになりそうだが。
ファイルシステムキャッシュの事じゃなくて?
残念ながら64ビットのアドレス空間丸々使えるわけじゃないから
全部マッピングは無理っぽい
2G程度の搭載メモリでは64ビットにしてもほとんど意味ない
またその話かよ
ロートルは黙ってろって言ったのに。
64ビットのアドレス空間、今のところ一番ニーズがあるのはデータベース分野か。
他に単一java VMでいくつもサブシステムが動くとか、.
NETでAppDomainを大量に使うとかいった分野の需要はありそう。
>>350 くそ野郎が発言するなボケ
てめーは親父狩りでもやってろ
>>352 ファビョッた(^ω^)なにこいつ・・・・
>>353 しかもブサイクな鼻つけやがって
貴様はブタか
ロートルは黙れ。
>>347 物理メモリへのアクセスが正味64bit分出ていないって話だろ?
マッピングには影響ない。
変な馴れ合い喧嘩やめれ
実際4GB以上のメモリをつみたくなる様な状況ってどんな?
DB丸ごとオンメモリ
>>362 4Gで十分なDBもどうかと。
更新も不安だし。
意味不明
>>361 数値計算などで倍精度実数の3次元配列を確保しようとする場合
4GBのメモリで確保できる配列の数は
100*100*100 で 536個
200*200*200 で 67個
500*500*500 で 4個
800*800*800 で 1個
四倍精度や複素数にすると更に半分になる。
OSのGUIが3D化して、3次元テクスチャ使いまくりになれば意味も出てくるな。
実搭載メモリが何十GBとかにならんと駄目だろうが。
昨今のコンピュータはメモリアクセスより
計算の方が圧倒的に速いんだし
ベタな3Dテクスチャを使うなんて今後とも無さそうだが。
>>359 物理アドレスが64ビットよりもずっと少ないだけでなく、
論理アドレスも64ビットよりも少ないというのを、
どこかで見かけたんだけどなぁ。
仮に64ビットフルに使えたとして、
今みたいに1ページ4KBのままでは、2^52ページにもなって、
1ページに1ビットのフラグ持たせたら、フラグだけで512TBですよ。
>>369 2Mbyteの どでかページ も使えるので心配するな。w
あと論理アドレスを制限するのは基本的にはOSだと思う。
3次元テクスチャの話だけど、
電子地図帳Zの3Dのリアルモードみたいのを
建物の細かい構造、看板、電柱などたくさんのオブジェクト配置して
超リアルな街並みが再現できるかも。
BoomTownみたいなのって、こんなにメモリ食う構造だったんだな。
メモリーが増えても出入り口の幅はほとんど変わらないから
有り難味が少ないなぁ...
早くメモリ安くなんないかね
フラッシュメモリなんて16Gbitチップ登場だよね。
DRAMもそのくらいに集積度上がって欲しいなぁ。
真面目な話、x86の64bit化のメリットは、以下の3点だよ。
・1プロセスが32bitを超えるアドレス空間を扱える
・全プロセス合計で4Gを超える物理メモリを扱える
・レジスタ増加
理屈ではわかっていても、意外に(普通の)開発者から軽視されるのが真ん中の項目。
ちょっと考えると、サーバー用途以外ではあまり意味がなさそうにも思えるかもしれないけど
デスクトップで複数のタスクを動作させる、という事を抜きにしても
(これ自体も、マルチコア等でもっと一般的に行われるようになるかもしれないけど)
例えばRAMディスクにたっぷりと割り当てても他のプロセスへの影響が無くなるわけだし
単純にディスクキャッシュで扱えるメモリが増える、という意味でも
効果が期待できる場合もあるよ。
真ん中はPAE使えやボケ
PAEを有効利用できるデスクトップ版Windowsがあれば、ね。
サーバでも 1 と 3 のが重要度高いな
379 :
デフォルトの名無しさん:2005/09/19(月) 04:58:01
まあ、個人向けのパソコンではマザーボードの仕様上2Gから4G程度しか詰めないから、アプリも出てこないと言うことなのか。
それとも、データベースや科学計算のような特殊な分野以外に64ビットマシンは必要とされていないということなのか?
>>375 4GB以上のディスクキャッシュはありがたいかもしれない。
電気は無駄に使うことになるし、リフレッシュのためにメモリが遅くなりそうだけど、
読み込みが減らせるからディスクアクセスが更新とか書き込みを
効率よくできるかもしれない。
断片化の発生を抑えた書き込みもできるかもしれない。
でもUPSが必須だな。
あ、でも、DBとかはセキュリティの関係で読み込みのみってこたないな。
ノーツのDBも、開いただけでログ残ってたし。
「やべー。覗き見したらばればれやん」て思った。
覗き見するときはちゃんとその人のPCでその人のID使ってやらないとな。
>>370 1ページ2MBでも1TBになるので、泣けてくる。ビットマップはやばい。
本当はAMDの資料を見ないといけないのだけど、
とりあえず
http://hp.vector.co.jp/authors/VA003988/asm2.htm を見ると、1プロセスで使えるのは48ビット分の空間のようです。
>>372 メモリアクセスのコストが無視できなくなってきてるよね。
PC3200のメモリがデュアルチャネルであっても、
64GBのメモリを舐めるのに10秒以上かかると思う。
メモリのどこにあるかわかっていても、
キャッシュにヒットしなければ、とても長い長い時間がかかる。
もしQWORD単位で64GB分をランダムに読むと、15分くらいかかると思う。
>>378 32ビットの1プロセス2GB以内という制限は、けっこうキツいよね。
たとえば、1000クライアントを捌くサーバプロセスは、1クライアントあたり2MBしかメモリを使えない。
プロセスを分割したところで、プロセス間でメモリ共有を使って情報を交換するので、結局は同じことになる。
だから、とっとと64ビットになってほしいが、既存のDLLが32ビット・・・orz
>>379 AlphaやItanium2が、PCサーバ分野で鳴かず飛ばずだったのが、物語ってると思う。
32ビットではできないことをやろうとしたら、x86とバイナリ互換がないことは、
大した問題ではないと思う。不可能なのと、やればできるの違いは大きいから。
それなのに・・・ということは、32ビットではできないことをやる必要があんまりなかったんだね。
>>379 メモリが積めないからアプリが出ないというより
一般向けに64bit環境が普及していないから需要が少ないという事でしょう。
ワープロと表計算くらいの用途なら64bitマシンどころか
16bit CPUと数MBのRAMしかないPCの時代でも出来たんだし
やってることの本質はたいして変わってない。
でも64bit CPUと64bit対応のOSを積んだマシンが普通に出回り始めれば
アプリの方もそれに合わせてくるだろうし
いずれはみんな、64bitな環境に移行するんだろうけど。
>>384 64モードで今までのソフトは動くの?
リブートが必要ならデスクトップで使われることはないよね
OSも二ついるだろうし。
64ビット空間というのは広大な空間だな。
32ビット空間は4GBで、PAEを使っても36GBなので、意外に早く
限界が来たけど。
387 :
デフォルトの名無しさん:2005/09/19(月) 06:11:44
>>385 その昔 Windows はリアルモードとプロテクトモードの切り替えを
I/O 経由で CPU にリセット信号を送ることによって実現してた。
ありえないと思うが、必要とあればそれも選択肢かと。`
>>386 そんなに使うのにワークステーション利用しないの?
>>385 WinXP x64 Editionの場合は16bitコードを含むものや一部の特殊なソフトを除けば
32bitアプリもそのまま動く。
>>387 それは286の話だね。386は自由にリアルモードとプロテクトモードの間を
行き来できるようになったので、関係ない。
>>385 64bit モードで 32bit プログラムを動かす手続きも x86-64 の仕様に含まれてた気がする
thunk layer だっけ?
当然、ライブラリやらドライバーやらはデータモデルを合わせてあげなきゃダメだけど。
とっくに64bit化してるSPARCだって64bit Solarisの元で32bit用バイナリを実行
できるんで、それより後にやっとこさ64bit化したx86-64でできなきゃ嘘でしょう。
>>391 リンク先記事だけど、PAE は Solaris や Linux, FreeBSD でも使えるのに、
と思ったら元麻布か。
>>385 その話は、あまりにレベルが低すぎないか?
プログラマの発言とは思えない。
>>395 そうかい?
使ってみないと分からないと思うけど。
>>395 確か16→32のときは16ビットアプリでも
コンパイラも32対応製品に付属のでコンパイルしないとバグが出たと思う。
MSに問い合わせてもそういわれたし。
ということはベンダー提供のアップデートが必要になるってことだと思う。
>>397 push sp した時のpushされる値の違いとかか?
>>399 0DIVエラートラップ時に積む値まで違っていたのか。初めて知った。
俺がx86使い始めたのは386が一番最初だったから知らなかった。
まあでも俺の言い訳は言い訳にならないよな。Intel発行のデベロッパー
マニュアルを見れば、ちゃんと互換性の注意点とか書いてあるからな。
>>396-397 ちょっとWindows板とか自作PC板とかの64ビットスレを見てきなよ。
え〜っと、、、
Windowsの最大の利点の1つは過去の資産との互換性でありまして
昔のプログラムを動かすのに一々リコンパイルが必要ならここまでの
シェアはっていうかぐぐればすぐに・・・
push spとか0divの動作が変わったのは286が出た時だろ
PAEって16ビット時代で言うところのFARみたいなものかと
思ってたけど違うの?
409 :
mokorikomo KHP222009212068.ppp-bb.dion.ne.jp:2005/09/23(金) 18:12:10
webprog
410 :
デフォルトの名無しさん:2005/09/25(日) 14:05:33
64bitプログラミングしてみたいんですが、
VC++ 2005 express edition beta 2 で出来ますか?
Expressは64bitコードを生成できない
マジで?どのコンパイラなら64bitコード吐いてくれますか?
gcc
PathScale
>>412 Plartform SDKにコンパイラが入ってる
gccかぁ。Cygwinでやる場合Cygwinも64bit版じゃなきゃだめでしょうか。
>>416 Cygwin64/mingw64はまだじゃないかな。gccは当面はLinux等だね。
>>341 亀レスですまんが、たまにはPPC版NTのことも思い出してあげてください
PPCゎbi-endianじゃないっけ?
>>418-419 PPCはリトルエンディアンとビッグエンディアンを初期化時に選択できて
Windows NTが使っているのはリトルエンディアンモード
>>418 PowerPCにはWindows CEがあるじゃないか。
まだサポートされてたよな?
>>418 でもって、WinCE でもやっぱり little endian しかサポートされてないん
じゃなかったっけ。違った?
あぁendianの差が移植の最大の障害になってたのかWindowsは。
てことはx86系のUnixとかLinuxはendianの関係で余計なオーバーヘッド
背負ってるのかな。使ったことないからわからないけど。
>>423 そんなことはない。Microsoftの技術が稚拙なだけ。
そうだよなぁ。LHAなんてbig endianのだけど
別にパフォーマンスで特に問題なんてないよなぁ。
まあWindowsはクライアント以外には用のないOSだから
需要の点で移植が進まなかったんだろうけど。
需要があるんなら金の力でなんとかしただろうし。
あぁゴメソ勘違いだ。LHAはlittle endianだ。
TCP/IPのヘッダなんかはbigだよね。
効率悪いからlittleに変えようなんて話、出てこないよな。w
ヘッダとかアクセス頻度が低いものならほとんど何の影響もないよね。
えらい昔68000でZ80のエミュレータを書いた時はエンディアンの違いがウザくて
閉口したもんだったけど。
アレがなけりゃ三割ぐらい性能アップしてたかも。
そこでBSWAP命令ですよ。
>>423 Linuxはもともと386用のカーネルだったわけですが。
つか、まともなコードなら両方対応できるようにマクロ切ってあるはず。
それはそうとPPCのVPERMユニットってあまりにリッチなんだが
あれはエンディアンの変換用にあるんじゃないかって思った。
やっぱりインラインアセンブラがないとダメですね
単純にMMX/SSE使うだけなら昔ならともかく今は組み込み関数が使えるから必要ないといえば必要ない。
PC用のソフトではがんばってインラインアセンブラで最適化しても
CPUが変わるとかえって遅くなったりしちゃうし。
インラインアセンブラで書くよりも、
組み込み関数を使って書いたほうが、
・書くのが楽。書いたものを変更するのも楽。
・コンパイラの最適化は、そんなに悪くない
性能的には
SIMD使わない << インラインアセンブラで下手に書く < 組み込み関数でSIMDを使う < インラインアセンブラで上手に書く
だと思う。
自分の技量と使える時間に相談して、選べばいいと思うよ。
今のコンパイラはサポートしてなかったりするけど、
CPU別の最適化や、CPUのアーキテクチャが変ってMMXがなくなっても、SSE2を使うコードに変えてくれる
とかの将来性がある。
MMX→SSE2はほとんど負担ねーと思うぞ。一度に2倍のデータを使うように改造するだけで殆ど事足りる。
>>434 インラインアセンブラで下手に書く < SIMD使わない
まあ、SIMD使えば同時に扱うデータ量が倍になるし、下手なスケジューリングしても
アウトオブオーダ実行もあるから、SIMD不使用のコードより多少は速いってことはあるんじゃねーの?
整数の場合はAMD64で汎用ALU使ったほうが速そうだけど。
どのみちインラインアセンブラは使えなくなるんだし、*mmintrinで書いておけば、
各CPU向けに特化したスケジューリングはコンパイラがやってくれるから手間が省けるし、
来るマルチコア・メニィコアにうまくタスクを割り当てることに時間を割くほうが有意義だと俺は思ふ。
> どのみちインラインアセンブラは使えなくなるんだし
Intel コンパイラや mingw の EM64T/AMD64 版がでたら、まず間違いなく
インラインサポートするでしょ? 使えなくなるっていうのは言い過ぎだと
思う。
.NET を普及させたいからネイティブコンパイラの方で手を抜いてたなんて
いった政治的理由だったりすると嫌だな。
>インラインアセンブラは使えなくなるんだし
マイケルソフトの糞コンパイラだけの話だろ。
ICCのEM64T対応版はもう出てたと思うがなww
まあ最近インラインアセンブラなんて使ってない俺にとってはどうでもいい話だがな。
>>438 gcc-x86_64-linux-elf ならすでに asm ふつうに使えてる
EM64T版ICCもインラインアセンブラは使えないよ。
UNIX版iccの方はgcc互換にするって建前があるので、
使えるようにするんじゃねえ?
>>443 インラインASM禁止はIntelが言い出したことじゃねーのかと思っている。
>>444 AMD独自拡張のニーモニックが含まれてるとエラー吐くのもIntelクォリティ
まあそりゃインテルのコンパイラだし
AMD64のCPUは高速なかわりにアセンブラプログラムを直接実行できない
無理にアセンブラを使おうとすると「互換モード」で実行されるので実行速度が非情に遅くなる
もう時代遅れのアセンブラは必要ないのですよ
アセンブラプログラムってなんだそれww
いやー、AMD64に限らず、CPUが直接実行できるのは機械語だけだし。
・・・・ということを言っているわけではなさそうだな。
「互換モード」でアセンブラプログラムを実行できるAMD64最強w
>>447 >>アセンブラプログラム
きっとアセンブラ自体のことだなww
きっとアセンブルする時に動作劇重になるんだろうと、
ウルトラ良心的解釈でもしてみる。
んなわけねーだろ。電波。
アセンブラで書いたコードをアセンブラでアセンブルして
アセンブればアセンブるときアセンブろう
455 :
デフォルトの名無しさん:2005/10/16(日) 18:17:30
∧_∧ トンファーキ〜ック!
_( ´Д`)
/ ) ドゴォォォ _ /
∩ / ,イ 、 ノ/ ∧ ∧―= ̄ `ヽ, _
| | / / | ( 〈 ∵. ・( 〈__ > ゛ 、_
| | | | ヽ ー=- ̄ ̄=_、 (/ , ´ノ \
| | | | `iー__=―_ ;, / / /←
>>454 | |ニ(!、) =_二__ ̄_=;, / / ,'
∪ / / / /| |
/ / !、_/ / 〉
/ _/ |_/
ヽ、_ヽ
456 :
デフォルトの名無しさん:2005/10/21(金) 11:47:48
64bit期待age
つくったよ
なにを?
よくわからないけど、たぶん中村さんの発明じゃないの?
メモリorメモリ空間をむっちゃ使う類以外ので何かあるかなあ・・・
諦めてる。
レジスタをむっちゃ使う用途とか。
PowerPCでいいだろそんなの。
32ビットのDLLを64ビットのEXEから使うための何か。
32ビットのドライバを64ビットのWindowsで使うための何か。
そういうものを作ったら、ものすごく喜ばれるのではないかと。
既にあるんだけど・・・
ただの感違いでしょ
out-of-process COM とかかな。
64bit版のIEで32bit版のplug-inというかActiveXコントロールが使えるとかでないと
意味がない。
out-of-processサーバーでできるとか言われても
新規にプログラムを書く必要があるなら最初から64bit版書けば済むわけで
なんだかんだ言いながら、32bitに依存しまくったプログラムばかりだったということだ。
ソースがなくて、既存バイナリをそのまま使わないといけない、という話だよ。
そーっす。
Windowsで遊びに使えて、4GB超のメモリを使えるLispインタプリタみたいなのを
作りたいんだが、intとポインタが64bitなコードを吐くコンパイラはもうありますか?
もうあります。
>>474 いざとなれば#define int boost::int64_tという手もあるw。
4GB超のメモリを贅沢に使い潰して、マルチプロセッサでGCと本来の処理を並行させたり
したいわけだが。intだけ64bitになってもなぁ・・・。情報thx.
>>477 Win64用のコンパイラなら、ポインタ64bitは当然。
>>476はその上でintも64bitに
する方法を書いてくださっているのだ。
ありがとうございます。精進いたします。
4GB分のGCにかかる時間を想像してみたよ
GCって出番があるのかな。
確保したいメモリ容量分の、連続した空き領域が存在しない確率は、かなり低くなると思う。
4GBのメモリに対して、数百MBのメモリを連続して確保したりするなら、別だけど・・・。
マークするだけで5分とかかかりそう
GCが新しいボトルネックということですね
GBオーダー時代のGC手法
というのでペーパーかけそうだ
4GB超のメモリ空間で動作するOSを考えると、GCからは決して逃げられないと思うのだが。
各アプリがメモリを食い散らかして、freeせずにexit、という事象に対する耐久性は、メモリ量
向上ゆえに上がるかもしれないが、いずれ、ごみ集めが必要になる事態は避けられまい。
まして、連続稼動するアプリケーションサーバならなおさらである。
486 :
デフォルトの名無しさん:2005/11/05(土) 20:39:10
その「4GB超のメモリ空間で動作するOS」とやらは
メモリ管理もろくに出来ない代物なのか?
>>485 大体のOSはメモリがどのプロセスに属しているかという情報を管理していて、
プロセスが終了するときにはそのプロセスに属するメモリを丸ごと解放するようになっている。
>>489 ブッブー。
メモリへの参照を外す、ですね。
もう少し勉強しましょう。
491 :
デフォルトの名無しさん:2005/11/06(日) 00:48:22
そうそう。他のプロセスに悪さしないように、プロセスって概念があるのだからね。
OSがそこんところうまくやってくれてるんだよ。普通は。普通でないことが
しばしば起こる場合もあるが。
492 :
デフォルトの名無しさん:2005/11/06(日) 00:50:07
>>490 だからそれはOSや処理系依存なんだって。もう少し勉強しましょう。
同じUNIX系でもAIXとLinuxは驚くほど仕組みが違う。
>>492 で、で、でた、後だしジャンケン。
一部の実装を持ち出して云々されても・・・
これだからJava厨は・・・
よーわからんが
とりあえずだ。
頭の悪い俺にわかるように教えて欲しい。
環境はWindowsXPとLinuxとする。
アプリでmalloc()した領域をアプリ終了時にfree()しなかったら、まずいのか?
全然まずくない。
サーバープログラムでメモリのフラグメントが気になるケースはあるが
よほど無駄な使われ方(4K内に1byteだけ頻繁にアクセスする等)でない限り
ページングによりある程度カバーできる。
というより、64bitだと「アドレス空間が足りない」という事態がまず起こらないので
ほぼページングによる「あまり使われていない領域のスワップアウト」で事足りる。
497 :
デフォルトの名無しさん:2005/11/06(日) 04:31:27
AMD廚ウザイな。氏ねよ。
実際のプログラミング話が出て来ない所を見るとOpteron持ってないのか?
64bitプログラミングできるOSと言語ってどれが最強?
malloc(4GB)できるのある?
>>497 Win64ならできるみたい。
#define _HEAP_MAXREQ 0xFFFFFFFFFFFFFFE0
500 :
デフォルトの名無しさん:2005/11/06(日) 13:51:13
このスレは重複しているので削除依頼だしておきます。
> malloc(4GB)できるのある?
64 bit OSでそれができなかったら意味ないだろ。
>>497の前半の無意味な煽りと後半の救いようのない教えてクンぶりから
推定(精神)年齢は12〜14歳。
>>485 それはプロセス内でGCするのではなく、
OSがプロセスに貸し出した物理ページをGCするということ?
物理ページが連続していなくてもいいと思うのだけど。
unix系の人の書いたコードは酷いのが時々あるね。
mallocしたのをfreeしないとか、
複数のスレッドから呼ばれることを考えてないライブラリとか。
マルチスレッドにせずに、シングルスレッドのプロセスをポコポコとforkしまくって、
1つずつのプロセスが短時間で終了することで、
リソースの管理をOSがやっているのだからアプリはやるのは二重管理で無駄
というスタイルは、ちょっとねぇ。
パタヘネ?ヘネパタ?どっちだか忘れたけど簡単な方に、
ページングの仕組みとその利用方法が載ってるから、厨房は一度読むべきだな。
>>503 > マルチスレッドにせずに、シングルスレッドのプロセスをポコポコとforkしまくって
そのせいで、Apache2はめっちゃ苦労してたな
>>503 > unix系の人の書いたコードは酷いのが時々あるね。
よく理解もせずに、適当なこといいなさんな。
507 :
デフォルトの名無しさん:2005/11/06(日) 17:40:57
ページング使っているのに何でGCが必要なんだよ。
アホじゃん。
508 :
デフォルトの名無しさん:2005/11/06(日) 18:15:26
ページングとGCは別物で同居可能だと思うが?
階層の違う話をいっしょくたに混同してないか?
どの技術も(場合によっては)必要だと思うが。
共有メモリって参照カウント方式でGCされるやん。
511 :
デフォルトの名無しさん:2005/11/06(日) 19:24:34
>>510 ここは理解不足を誇らしげに発表するスレですか?
>>511 残念だがお前の理解が不足しているんだな
OSメモリ管理ではページングがあるから、ガベージコレクションは
必要ないでしょ。
ユーザプログラム上での話ならGCの必要不必要はプログラマ次第。
514 :
デフォルトの名無しさん:2005/11/06(日) 19:39:49
GCってプロセスが死ぬまでの話ね。了解?
>477が話の始まり。
>485でOSのメモリ管理の話が出てきた。
で、今に至る。
Java厨とは、分かってないのに分かったつもりになって
ぐだぐだと知ってる単語を並べるものだから。
517 :
デフォルトの名無しさん:2005/11/06(日) 20:28:11
そこで初めて読む486ですよw
>>506 freeせずにexitは、unix文化ですよ。
GCするのなんて、
8ビットのパソコンのBASIC
組み込みを考えていたJava
ヒープの速度がネックになるほどメモリ確保・解放をしまくるJava
くらいでしょ。
実際、Javaはすごかったよ。
プロファイラで見ると、信じられないくらいの回数、オブジェクトの生成・解放をやってる。
よくもまぁ、そんなにやっても、速度が出るなぁと感心したよ。
.NET CLR も仲間に入れてやれよ。
UNIX使ってる人はメモリ確保するまでは慎重にやって
その後はぞんざいに扱う人が多い気がする。
DOSや組み込みでプログラミングしてた人の方が
メモリは慎重に扱うかもしれない?
UNIXはカーネルハッカーとアプリケーションプログラマで
メモリに対する意識はかなり違いそう。
>>519 >freeせずにexitは、unix文化ですよ。
そうそう。で、どこが酷いのだろうね?
ユーザレベルでの、ママゴトみたいな解放処理を省いただけで。
まさか
GC:言語処理系のための不要なメモリ回収の仕組み
としか考えられないのかな?
さすがにそこまで頭悪いとは思わんが
はいはいわろすわろす
>>525 は?こいつ何言ってんの?
頭おかしいんじゃね?
バーカバーカ
もうちょっと気の利いた煽りを入れてくれよ。
そんなんじゃ見てる方が恥ずかしくなってくるわ。
はいはいわろすわろす
>>524 短時間で終了するプロセスをポコポコとforkするunix文化なら、問題にはならないかもしれない。
長時間動き続けるプロセスの場合、
もう使っていないメモリを掴んだままになるので、
リソースがもったいない。
たとえば、関数が100個あり、
それぞれの関数が内部ワーク用として、それぞれ1MBのメモリをローカルに使うとする。
関数100個を順番に呼び出していく場合、
ちゃんとfreeするようになっていれば、全体で1MBのメモリで済む。
freeしない場合、全体で100MBのメモリが必要になる。
メモリを1GB搭載したPCで、上記プログラムを20個走らせた場合、どうなるか考えてみてよ。
相変わらず話の噛み合わないスレだな
で、おまいら結局何GBまでメモリ積んで走らせたことあるんですか?
構成込みで情報キボンヌ
>>532 順番に呼び出していくのなら仮想記憶があれば大丈夫じゃないか?
>>535 いちいちスワップアウトしちゃうじゃんという話では?
malloc/free のナイーブな管理で安心しちゃ駄目だよ。
俺なら、長時間の稼働が求められるときは、
最初にガバっと確保したメモリを自前で管理する。
皆はどうしてるの?
こまめに確保
こまめに自前でHDDに入れたり、メモリに出したりしてる。
OSなんて信用しねぇ!
ときどき虫が湧くな
>>541 いちいちされるように作ることはないのでは?
>>518 その前にはじめての8086。な,いいからオレの言うこと聞いとけ。
eaxとかの32ビットレジスタ載ってないじゃん
>>543 釣りか?
セグメント関連とか今では忘れたほうがいい話が多すぎるだろ。
>>545 オマエはプログラミング言語は得意みたいだが
自然言語はかなり不得意みたいだなw
はいはいわろすわろす
>>537 そういう人がいるのだけど、
やっていることがCランタイムライブラリのヒープ以下だったりする。
>>541 そこで
>>532の例ですよ。
もし物理メモリが1GB余っている場合、
スワップされるのは、
ちゃんとfreeしていた場合1000個以上同時。
ちゃんとfreeしない場合10個以上同時。
されるときはされるが、
されるまでの処理能力が違う。
つまり、あなたはfreeを呼ぶ度にメモリをOSに返す、
つまりfreeの度にカーネルモードに移行するという非常にコストのかかる処理を行う、
そんな糞ライブラリを常用していると言うことですか?
ちなみに、普通のメモリ管理の実装では
freeを呼んでもOSにメモリブロックを返したりはしないよ。
少なくとも、毎回必ず返すなどというバカな実装はあり得ない。
で、OSから見たら、メモリは「プロセスに割り当てたか否か」でしか区別しないから
「ライブラリが管理している(free済み)」「アプリケーションが管理している(未free)」の違いはない。
アプリケーションが管理していても、使っていれば(アクセスがあれば)別だけど
そんな領域は、そもそもfree出来ないわけだし。
553 :
デフォルトの名無しさん:2005/11/10(木) 01:07:17
Windows の DLL って扱い違わなかったっけ
普通のプログラマが、
>>532みたいな「バカみたいな無駄」を平気で残していると考えるのは、Java厨だけ。
もちろん、普通の「Javaプログラマ」も、
>>532みたいなやり方が異常だということはよく分かっている。
分からないから、「Java厨」と呼ばれる。
>>551-552 void* p ;
for(int i=0; i<100; i++) {
p = malloc(1MB) ;
free(p) ;
}
と
void* p ;
for(int i=0; i<100; i++) {
p = malloc(1MB) ;
}
の違いの話をしているのですが。
Windowsの方が仮想メモリシステムをアプリケーション側から細かく制御できるんだっけ
Windowsの方が仮想メモリシステムをアプリケーション側から細かく制御しなくてはなりません
>>556 その、メモリリークのバグ入り糞プログラムと
64bitに何の関係があるのですか?
まさかとは思うけど、64bit==デュアルコアとか思ってないですよね?
もう一つ。
Javaにおいても、大きなバッファ等をローカル変数に割り当てたままで
別のメソッドを呼び出す事が、当然出来ますが
このバッファがGCにより回収されると思っていますか?
>>532の「freeせずに別の関数を呼びだす」とは、↑と同じことですが
GCがあれば、このような事が起きなくなるとでも思っていますか?
>>561 メソッド呼び出しから戻った後、実行可能性のある部分がそのローカル変数を
参照していたら当然GCされない。(逆は必ずしも真ではないことに注意)
資源を大切にね!
>>562 そりゃぁ、それを回収したら GC じゃなくて・・・なんて言うの(w?
556の下のほうのように参照が無くなれローカル変数だって回収されるでしょ。
>>564 それをGC様が判断できるかという問題になるな。
ローカル変数の入ってるスタックフレームが開放されるまではGCの対象に
ならないと考えるほうが(プログラマとしては)安全側の配慮だと思う。
もちろん
>>556 の下の場合のようにローカル変数(この場合はp)を上書き
していれば、最新のもの以外は確実にGCの対象になる。
そ。
何のためにわざわざnullを代入するか、ってことだよ。
まあ、実際には、ローカル変数に対してnullを代入するケースは少ないけど
何らかの(ローカルを含む)変数が指している領域は
GCの対象にはならないわけ。
だから、Javaでも
>>532は当然起こる。
>>556でfreeを入れると何が違うかといえば
ライブラリが別のところからのmalloc呼び出しに対して再利用可能にすること。
これはJavaにおいて、nullを代入してGC可能であることを明示するのとまったく同じ。
だから、
>>532のケースを「GCがあれば」と論じるのは妥当ではない。
一応。
「null入れときゃいいじゃん」という理論には
「freeすればいいじゃん」という言葉が返りますので。
569 :
デフォルトの名無しさん:2005/11/10(木) 23:25:52
俺、GCのソースコード読んで理解したんだけど、すごいよ。
おまえらの無駄さが笑える程しっかりやってる。
それ以来、GCに頼れるところは頼りまくりまクリスティーヌ。
まあ一口にGCと言っても、
実装は山ほどあるわけで。
>>568 参照を消すことは比較的安全だけど、実体を消すことはそうではないことが多い。
同じだと思うのは極めてナンセンス。
572 :
デフォルトの名無しさん:2005/11/10(木) 23:53:52
「参照にnullを代入して『GC対象であること』を明確にする」のと
「メモリブロックをfreeして再利用可能にする」のは別ですか。
そうですか。
>>573 他からも参照されてる可能性を考えれば、別に決まってるじゃん。
ローカル変数の話をしているのに
他からも参照ですかそうですか。
ローカル変数っていうか、ローカルで用いるバッファだな。
>>532のような。
だから、何が争点になっているのかを明確にしてくれよ。
なんだ、論点もわからず揚げ足取りしてたのか
もはや64bitプログラミングと何ら関係ない論争になっている点について
ていうかそんなにGCの話がしたけりゃ、GCスレ立ててそっちでやってくれよ。
OSレベルのメモリ管理の話をしてるとき(だよね)に「Java厨」とか無意味な呪文を
唱えてGC原理主義者を召還するからじゃないのか?
>>485-577のまとめ
Java厨「マルチコアなら別プロセッサでGC走らせれば・・・」
Java厨「4GB超のメモリ空間で動作するOSを考えると、GCからは決して逃げられない」
他「はあ?(あのー、64bitプログラミングとの関係は?)」
Java厨「OSもメモリの使い回しができるし、アプリケーションサーバー(←おいおい)にも」
他「あのね、ページングとか仮想記憶とか知ってる?足りなければスワップすればいいし」
Java厨「GCがあれば、スワップ減らせるでしょ」
他「はあ?」
Java厨「freeしないで1Mのバッファを100個使うプロセスだと・・・」
他「freeしないプロセスと比べてどうすんの。だいたい、GCがあるからといって、ローカルで使っているバッファの・・・」
(このあたりが
>>532>>560とかその辺)
他「ローカル変数に代入されているものは、GCされるとは限らないよ」
他「null代入とfreeは(メモリを再利用可能にすると意味で)同じ事だよ」
ここに
>>571が登場。
Java厨2「(最後のレスだけを読んで)参照を消すのと実体を消すのは違うだろ」
Java厨2「他から参照されてる可能性を考えれば」
Java厨2「何が争点になっているのかを明確にしてくれよ」
>>580 ごめん。まとめてたらモロに。。。ほんとごめん。
というか
>>485とか
>>532とか、それ以外の言葉が浮かばないんだもん。
(「Java使い」は「Java厨」とは違うよ)
だからOS側の管理の話とプロセス内のヒープの管理の話をごっちゃにしてるんだろ?
GC云々ってのは(普通は)後者の話でしょ?
結論としては、Java最強、ということで。
おまえら.NET CLRは無視ですかそうですか。
別に無視じゃないが、パフォーマンスはネイティブの1/3でメモリ使用量は数倍ってイメージ。
587 :
デフォルトの名無しさん:2005/11/11(金) 02:22:23
64bitマンセーって逝ってる香具師とJavaマンセーって逝ってる香具師は同じ痛さを感じるのは気のせいだろうか(w
現状では32bitでC使ってるソフトが最速だ。
Javaはいつ標準化されんの?後出しのC#はECMA標準規格が存在するけど。
jabaは字実上の標順だからw
ECNAに票準してもらってるC$と比べないでほしいねw
64bitのCLRって32bitのより速いん?
594 :
556:2005/11/11(金) 23:50:51
unix文化だとmallocしてもfreeしない
というのはJava登場以前からある話です。
>>594 異文化に対する偏見だ。必要ならやるし必要なければやらないだけ。
Javaは配列の添え字がint固定だね。
java.nioのByteBufferもintでしか範囲指定できないし。
Javaアプリケーションは64bitアドレスをリニアに扱えないってことか。
>>597 intは符号付きしかないから、現在の仕様では2G要素(事実上2Gバイトか?)が
一つのオブジェクトの大きさとしては限界になりそうだね。超でかいファイルを
一気にマップしてランダムアクセスなんてやるときは、マップし直したりする手間が
入りそうだな。
リニアな配列でデータ扱う必要があるケースって稀だと思うが。
>>594 「unix文化」と言い切るからには、そういうやり方をしているプログラムを複数挙げてくれよ。
もちろん、おまえの言うように
「10-100M単位で確保」「複数同時に動かす可能性もある」もので
「使い捨てでない」「実際に実用的な」ものを、な。
当然だが、「exit前のfree」問題の話じゃないぞ。
「使い捨てバッファ」を「ひたすら確保だけして解放しない」プログラムを、な。
「unix文化」は、昔から、ソースからコンパイルするのが当然だから
「それが普通」なら、ソースコードがいくつでもあるはずだよな。
例えばファイルを処理するのに
ちまちま一行ずつ読んだりブロックで読んだりせず
statでサイズを取ってmallocし、まとめて一気に読み込む、みたいなやり方は確かにある。
けど、これをサーバー(daemon)でやるわけないし
多数のファイルを扱うプログラムが、
ファイル毎に別のバッファを確保するようなやり方になっているとは
とても思えないが。
Javaは32bit時代のプログラミング言語なんだよね
64bitのパワーを生かすならJavaは選択肢から外すことになる
601
> ちまちま一行ずつ読んだりブロックで読んだりせず
> statでサイズを取ってmallocし、まとめて一気に読み込む
mmap使うだろそれ
600
>「使い捨てバッファ」を「ひたすら確保だけして解放しない」プログラム
昔のgnuのgrepなんかがそうだった気がするyo
いまはどうだか知らんが
そういう用途だったら今ならmmapするのが多いとは思う。
statでサイズが取れるってことはnonseekable streamを相手にしなくてよいわけ
だから。
で、何GBというサイズのファイルをmmapしたいときに、64 bit OS の出
番ですよ!!!11!
606 :
デフォルトの名無しさん:2005/11/12(土) 09:32:51
>>606 >
>>602 > 64bitのパワーってなんですか?
こと、x86-64に限って言えば、メモリ空間が32bit(4GB)を超えること。
汎用レジスタが64bitに拡張されているため、42億を超える整数を
扱えること。
決して、命令を64bit毎にフェッチするから速い、VLIWだ、なんてことはない。
> 64bitのパワーってなんですか?
すごい消費電力
>>604 たとえば、CIFSをマウントしてもmmapは無理だよね。
多くのソフトは、mmap不可なときへの対応も必要だよね。
# 可能なとき、mmapするのには異論ないよ。
>598
> intは符号付きしかないから、現在の仕様では2G要素(事実上2Gバイトか?)が
細かい話だけど、Javaのlong配列だと8バイト×2G要素=16GBになる。
>>610 今のJavaVMで2G以上の大きさの配列ってnewできる?
>>605 Javaってさ、4GB超えるサイズのmmapってできるのかなあ
できないんじゃ・・・ちょっと・・・
>>605 まさしくその通り。
でないと昔のEMSを彷彿とさせるような切り替えをプログラマがやらなきゃいけない。
>612
FileCnannel.map()の引数は64ビットになってるから、実装次第かと。
64ビットOS上で動作するJVMなら大丈夫なのでは。
>>615 いや、だからmapし直さないとファイル全体をアクセスできないって話でしょ。
ByteBufferのほうは2Gまでしかシークできないから。
>>609 OSによるでしょ。
Windowsはリモートのファイルをメモリマップできるよ。
原理上、ローカルのファイルのメモリマップとの相違点に要注意だけど。
64ビットならファイルをメモリマップで、というのは乱暴すぎるよ。
OSのVMはそんなに賢くないし、ましてやエスパーでもないので、
もう参照しない場所までマップしたまま放置しておくのは良くない。
> Windowsはリモートのファイルをメモリマップできるよ。
UNIX もできる。
Windows って Windows NT の頃にリモートだと駄目だという説明を
読んだような記憶があるんだけど (でもうろ覚えなので間違いかも)、
今は直ってたのか、知らなかった…
> OSのVMはそんなに賢くないし、ましてやエスパーでもないので、
> もう参照しない場所までマップしたまま放置しておくのは良くない。
64bit 機なら、あまり神経質に mmap(2)/munmap(2) する必要もないのでは?
確かにカーネルメモリをちょっと無駄使いすることになるけど、
たとえばシーケンシャルアクセスなら、madvise(,, MADV_SEQUENTIAL)
しておけば実メモリの方は、VM が適宜解放してくれるし。
アクセスパターンが複雑で VM では判断できないが、アプリだと判断できて、
かつ主記憶を溢れる可能性があるならば、アプリが munmap(2) した方が
勿論いいけど。
結局場合によりけりかな。
619 :
デフォルトの名無しさん:2005/11/13(日) 06:07:41
>>602 最悪の場合でもVMで動いてるJavaや.NETはVM上で32bitモードとか64bitモードとか
モードを分ければすむことじゃないか?
コンパイラのオプションを指定するのと同じように起動時に指定させればいいように
VMを作ればいいだけじゃん
Javaで
long[] long_array = new long [ 2*1024*1024*1024/*2G個*/ ];
はできますか?
>>617 > 64ビットならファイルをメモリマップで、というのは乱暴すぎるよ。
> OSのVMはそんなに賢くないし、ましてやエスパーでもないので、
> もう参照しない場所までマップしたまま放置しておくのは良くない。
普通のページングと同様に参照しなければ実メモリはそのうち別のプロセスに
使われるので全然問題ありませんが。
そりゃ、プログラマがアクセス特性をきっちり把握してれば陽に制御した方がVM
任せよりはよくなることが多いだろうけどさ。
Javaは賢いから大丈夫ですよ(苦笑)
64bit版のJava VMではIntが64bitになったりしないの?
64bit版のVM使ったことないからわからない
誰か教えて
Javaの言語仕様が変わらない限り32bitのまま。
JavaとゆうかJVMが32bitしか考えてないからな
>624
VMの仕様上intは32bit固定になってる。配列の確保時のサイズ指定や、
配列アクセス時のインデックスも32bit固定なので、64bit対応にするためには
VMに新しい命令を追加するしかない。
>>620 Sun からも出てるよ。
・Solaris x64 Platform - J2SE(TM) Development Kit 5.0 Update 5
・Linux AMD64 Platform - J2SE(TM) Development Kit 5.0 Update 5
・Windows AMD64 Platform - J2SE(TM) Development Kit 5.0 Update 5
Java Plug-inマダー? (AAry
longが64bitなわけで。
C言語でint=64bitな処理系って見たこと無いな。
byte=8bit
char=8bit or 16bit
short=16bit
int=32bit
long=32bit or 64bit
long long=64bit
だろ大抵。
自分の世界だけで語らんでくれたまえ厨房
>>630 みたいなバカが死滅するまでプログラマーは低賃金長時間労働者の
ままなんだろうな・・・
純粋にわからん。int=64bitな処理系ってあんの?
shortやlongって何ビットなんだ?
JBossのようにひとつのVMでマイクロカーネルモデルをやってるようなアプリが64it化で使いやすくなるかな。
635 :
デフォルトの名無しさん:2005/11/13(日) 19:16:07
636 :
デフォルトの名無しさん:2005/11/13(日) 19:18:46
>>634 おめーが発してる単語一つ一つにどれだけの人がかかわって
苦労したのかわかってんのかよ。
JBoss, VM, カーネル、マイクロカーネル、カーネルモデル、アプリ、64bit化。
おまえが発するには荷が重すぎる。
どういうたたかれかただよ
ILP64 採用してるのって、昔の CRAY ぐらいでしょ。
ほぼ全ての 64bit OS は 630 の言う通りで、
LP64 (UNIX 系) か LLP64 (Windows 系) の筈。
>>640 今は亡きAlphaがILP64じゃなかったっけ?
>>622 別プロセスに使われるまでが、問題なのです。
やってみればわかるけど、全体のパフォーマンスが落ちます。
Java最強ってことでFA?
一時バッファの終了処理はおおざっぱにvectorとか、boost.scoped_arrayとか使う、
OSが勝手に確保するような特殊なのは関数内クラスで終了処理する。
C言語できちんと書くのは面倒、結論 C++ を使え。
最強厨はJavaでも使っておとなしくしてなさい、ってことで。
Javaはポインタ使わないからC言語ほど32bit→64bitの考慮の必要はないね
議論を蒸し返すのも嫌なので上に頷いておく。
>>644 メモリが余りまくってるからじゃないか?
今からこのスレは貧乏スペック自慢スレになりますた
652 :
デフォルトの名無しさん:2005/11/14(月) 12:18:16
Javaなら64bitのこと考えなくていいから、むしろ32bitの速いCPUで十分な罠。
654 :
デフォルトの名無しさん:2005/12/14(水) 18:15:03
見事な廃れっぷりだな。64bitはまだ先ってことでFA
Vistaで半ば強制移行。
結局 x86-64 に軍配?
って、 x86-64 ってのは正式名称?
初期にAMD64と言われていたものを広く浸透させるために
会社の名前を取って一般名称にしたとかなんじゃ。
インテルの力でEM64Tの呼称が浸透する可能性もなきにしもあらず。
マイケルソフトは x64 と四jね
Intelにとっては主役は飽くまでIA64(IPF)だからね。
そんなことより、もともと Intel が進めていた
x86 互換の 64bit 拡張と、AMD64 との間の違いを知りたい。
まぁインテルの現状を見る限り大したことはしてなかったと思う
AMD64(以下A)とEM64T(以下E)の違い
1.LAHF/SAHF命令のサポート
A:全モード
E:64ビットモードを除く
2.CMPXCHG16Bのサポート
A:未サポート
E:64ビットモード
3.FFXSRフラグのサポート
A:64ビットモード
E:未サポート
4.No-Execute Enableフラグのサポート
A:64ビットモード
E:未サポート
5.SYSCALLとSYSRET
A:全モード
E:64ビットモードのみ
6.SYSENTERとSYSEXIT
A:レガシーモードのみ
E:全モード
>>665 え? AMD64 と EM64T の間に違いがあったのか。
ってことは、マイクロソフトがいう x64 ってのは
実は異なる二つのアーキテクチャの総称???
>>666 386 と 486 程度の違いだから、同じアーキテクチャと言ってよいと思う。
それに一口にEM64Tと言ってもプロセッサモデルによって多少の違いはあったりするし。
>>665 Prescottの現行ステッピングではAMD64は全部サポートしてるような。。。
>>666 MS謹製のx64 Assemblerでは互換性の無い命令は使えないようにしてたハズ。。。
>>668 最初から全部サポートしていればなぁ。
サポートしていないCPUが存在すれば、使えないわけで。
ちゃんとインテルに情報開示しなかったAMDが悪いよ。
今まで散々、互換プロセッサで商売してきたのにさ。
>>671 ほんと?
俺が読んだ記事では、
AMDの資料に問題があり、インテルがAMDと同じように実装できなかった
ということになっていたが。
なんでも、AMDの資料には、AMDのCPUの実態とは違うことが書いてあったらしい。
結局 Microsoft は無難な共通点だけを使うってことかな。
で、それを x64 って呼ぶよってことじゃないか?
きちんとオリジナルを調べる責任は常にコピーする側にあると思うが。
AMDの初期のdocに書きそこねがあったんでしょ
intelも意地張らずにすり合わせしとけばよかったのに、と思う
ダンプに関数パラメータ情報が無いという素敵なx64のABIを策定した奴を100回ヌッコロシタイ。
レジスタ渡しで、スタックに引数を積まない、のかもな。
>>675 AMDのCPUに対して、ドキュメント通りの実装ではないのでエラッタだ、
AMDのほうが修正すべきだと要求するのが本来の筋だと思うんだな。
インテルは度量が大きいから、
しかたねーな、こっちが合せてやるよ、
ってことになったのだと思われ。
>>677 エラッタってのは具体的に何の話?
少なくとも
>>665に書いてる話は最初からドキュメントされているが。
どっちにしても実チップが存在したのだから、それに合わせるのが「互換チップ」の
基本だわな。インテルはそういうことに慣れていなかっただけだろう。
>>679 あのさ、LAHFもSAHFも代替可能な古い命令だぞ?
そこまで目くじら立てる理由がわからん。
文章では64bitモードで使えないと書いておいて、後からx87との互換性かなんかで
横槍入って一応使えるようにしておいたってだけだろうが。
SSEを推進しているIntelがそれを実装していなかったとしても何も問題ないし、
OSベンダーやソフトハウスが最大公約数としてのx64を考えているのなら賢明だってだけじゃんか。
x64互換としてのAMD64とEM64Tと考えれば何も問題はない。
実際、AMD64とEM64Tで「互換性がなくて困る」って話は聞かないもんな。
> 目くじら立てる
そう、
>>665 にある命令で、差異があることで本当に困るものって無いんだよね
それを吟味せずにピーピー騒いでるのは滑稽。
あ・・CMPXCHG16Bってどうだろ。
そもそもx86-64の設計に横槍入れてたMSがx64アプリではx87をサポートしないんじゃなかったっけ。
AMDとしては3DNOW!なんかの資産のあるFP/MMレジスタベースを生かしたほうが有利だっただろうけど
結局XMMレジスタを生かすことになったってのは、ある意味Intelの思惑がかなった形だわな。
まぁMSはコンパイラが象徴するように「80bit浮動小数なんていらねーよ」って態度貫いてきたからね。
それよかXMMレジスタベースで高精度浮動小数サポートしてほしくね?
x64アセンブラの本とかって出版されてる?
製本されたリファレンス欲しい。
なぜか無駄にItaniumのアセンブラ本持ってたりするがw
NX(Intelの呼び名ではXD)ビットはさすがにサポートの有無を判別して動作してるな。
インテルが度量が大きいというのはどういう視点で見るとそうなるんだろう
資本力が大きいですし・・・
Itaniumは結局消えるのかな。
あまりマトモに扱われているという話を聞かない。
>>682-683 ピーピー騒いでいるのは、
何がなんでもインテルを叩きたいAMD厨
なんですよ。
マカーじゃないかな?
真の64bitはmacだけ、ということにしたいわけだし。
>>691 もうすぐ仲間になるんだから、仲良くやりましょうよ。w
まぁ無理やり付け足した感もないところが綺麗だわな。
もともと32bitのPPCは「64bit CPUの32bitバージョン」ということらしいし。
>>692 これまでのマカーから行動から予想するに
AMDを叩きだすだろうな
AMD厨はマカーよりもたちがわるい。
厨はとにかくたちがわるい
Win64(x64)の仕様ではx87レジスタは使用してはいけないという話だが
SDKのmathライブラリ内でx87命令が使われている。どういうことか?
>>698 user-modeではx87レジスタは使用可だよ。
kernel-では使っていけないという話なのに・・・
ユーザーモードで利用可じゃないとそもそもx87使った32bitアプリを
動かせないんじゃないの?いや、よく知らないけど。
701 :
698:2006/01/11(水) 17:24:19
>>699 レスどうも。
自分でも調べてみたのですがそのようですね。
>>700 まあ仮想PCみたいに変換噛ませば不可能じゃないんじゃない?
パフォーマンス落ちるだろうけど。
とにかくAMD厨はたちがわるい
そろそろ鬱陶しいな
>>700 32ビットアプリの話ではなく、64ビットアプリの話ですよ。
厨うざい
>>705 拡張精度が扱えるのはFPUだけではない?
なので「非推奨」ということで。
>>705 Longモード(要するに64bitのOSが乗っかってる状態)だと、32bitと64bitのプロセスが
混在する中でマルチタスキングしないといけない。
最低限FP/MMレジスタの退避をサポートする必要があるわけで、64bitでも
結果的に「使える」という話。
だからFP/MMがレジスタ拡張されるわけでもなく、消されるわけでもなく、
残ってるのはそのため。
MMXはともかく、x87の場合「スタック」として扱うから論理レジスタ本数増やしても
パフォーマンスの向上しえないしね
>>707 >SDKのmathライブラリ内でx87命令が使われている。
とあるが、パフォーマンスの向上しえないのになぜMSは使っているのか。
手抜き?
作ったやつしか知らないよ。
53bitの精度を出すには53bitの演算じゃ手間がかかるってことさ
X64対応のXeonでx87命令使うとめっさ遅い気がする。
ia32 同クロックのXeon上で同じ32bitバイナリを
動かしたときの3倍は遅い。
何か下方修正があった?
SIMD 命令を使えって言う神様のお告げじゃないのか。
Intel MKLのem64t版でもx87使っててめっさ遅いルーチンがあるのさ。
80bit精度使ってるからじゃなくて?
x87使うのはもち80bit精度のため。
OpteronはSSE2よりx87使って書いた方が
速いことも多いんだけどなぁ。
結局
>>711の遅い原因は何であるっぽいの?
内部80bitだからって32bitでは遅くならないが。
(メモリ転送や平方根、除算などを除いて)
なぜOpteronには4倍精度がないのだ。
ICC9の64bit向けコンパイラってコア別最適化がWとPしかサポートされてないんだが
Wって32bitと同じくWillametteだとしたら暗にSSE3未サポートの初期AMD64向けの最適化オプションだよな。
Prescottコア以降でしかEM64T使えないし。
Woodcrest(MeromベースXeon)?まさかね。
719 :
デフォルトの名無しさん:2006/02/18(土) 18:32:23
TextSSを64bit版でコンパイルして欲しい
720 :
デフォルトの名無しさん:2006/02/18(土) 18:40:56
64bitでネイティブ動作する2chブラウザをつくろう
>>707 > MMXはともかく、x87の場合「スタック」として扱うから論理レジスタ本数増やしても
> パフォーマンスの向上しえないしね
FXCH命令のレイテンシ、知ってる?
命令数の問題じゃないんか?
P6以降のCPUでfxchって実行自体されない気が。
リネーミングになるからじゃんじゃか使えという話をみたような。
そしてデコーダは燃え上がる。
うーわ、ものごっつつまんね。
age
だから64bitなんざSVHSだって言ってんだろ。
で、64bit環境でアセンブラいじってるヤシはおらんのか。
Core2の64bit性能がイマイチということだが、
このスレの過疎っぷりを見ると問題なさそうだな。
そのせいでMSがvista 64bitをプッシュしなくなっちゃった!
サーバサイドではプッシュしまくりだがね。
735 :
デフォルトの名無しさん:2006/07/18(火) 22:34:58
簡単な(初心者でもできる)プログラミング教えてください!!
>>735 無い。
なんだかんだ言ってどれも平等に難しい。
64bit Windowsは窓使いの憂鬱が対応するまで移行できん……。
なんのためにソースが公開されてるんだとか言ってみる
64bitならコンパイラも含めて無料で手に入るし
x64のMS Access ODBC Driver ってあるの?
740 :
デフォルトの名無しさん:2006/08/11(金) 01:10:19
VC8 MFCソリューションから使用できる
COMコンポーネントのFlexGridを
誰か知りませんか。
MSFlexGrid6.0 はx86しか対応してないし・・・
昔作成したプロジェクトをx64対応させなあかん
のやけど、Grid系は.Net Framworkコンポネーントでしか
見つからんし
さしあたり、Vistaの64bit版が出たらだね。
アセンブラで増えたレジスタの効果を確かめるのと、
対応コンパイラでどれだけ高速化するかがネタになる。
XP x64ではできない画期的な何かがVista x64にはあるんですか?
XPx64は誰にでもお勧めできる代物じゃないからね。
64ビットプラットフォームとしてVistaに期待できるでしょ。
>>744 改善されるのを願うしかないなあ。
64bitモードでアセンブラをいじるという用途のために、
次は64bitOSを選ぼうと思っていたんだが。
16→32bitの時のような待望感が32→64bitではないね
逆に、128bit化する必要は当分ないというのはあるかも。
ビット数を倍にすると扱える数は2倍でなく2乗になるからな。
完成形の64bitを早く定着させてほしいものだ。
128bitの型の名前は一般名称として定着しているのはありますか?
byte 8bit
short 16bitのように。
QWORD
byte 8bit
word 16bit
dword 32bit
qword 64bit
tbyte 80bit
PUNPCKLQDQとかのニーモニックからすると
128bitはdqword?
128bitのデータって一般的なのは IPv6 のアドレスくらいかな。
(もちろん1「ワード」として扱える必要は特に無いだろうけど)
IEEE754rが広がってきたとして、
浮動小数点はやっぱり
float 32
double 64
quad 128 でしょうか?
UUID (GUID)も128bitある。
128bit型は、だいぶ使い道あるし、大事じゃん。
64bit型はそうでもなかったけどさ。
short 16bit
int 32bit
long 64bit
long long 128bit
こんな処理系も出てくるかな。
very long とか longer の方が面白い。w
longestを出してしまったらそこで終わりだ。
人間、向上し続けることが大事だ。
longer than longer 256bit
longer than logner than longer 512bit
・
・
・
きりが無いから
signed{32} x;
unsigned{128} y;
みたいな表記がいいな。
例えばint128を組み込み型としておいて、
typedef int128 longer;
とか、やっぱり typedefっぽく
ユーザーが型宣言というか型定義っぽくなるのかなと思う?
C99的には当然、int128_tとuint128_tとして提供されるんだろう。
みんな独自定義して
short, int, longのような共通とかないんだろうと思っちゃう…
wow64で動いている32bitアプリから64bitのDLLを呼び出す場合ってDCOM使わんと駄目?
Microsoftがいやがるような裏技はあると思うぞ
少なくともwow64.dll wow64win.dll wow64cpu.dllの3つはマップされてるんだから
逆に比べれば簡単だろうな
なんでWin16/32のときのようなサンクを用意しなかったんだろう?
IA-64版と機能差を付けたくなかったんだろう
769 :
デフォルトの名無しさん:2006/10/01(日) 09:53:55
Vistaインストールしたので64bitのプログラムを
作ってみたいのですが、いいコンパイラはありますか?
Borland C++ Compilerをずっと使っていましたが、
どうやら64bit版はないようで・・・
>>769 とりあえずPlatform SDKをインストールすればVC++の64bit版コンパイラも付いてくるはずだぞ。
772 :
デフォルトの名無しさん:2006/10/01(日) 17:53:55
>>770 VisualStudio2005 TeamSuiteはインストールしていますが、
さらにPlatformSDKも入れる必要がありますか?
>>771 とりあえずC++のが欲しいんですよw
>>772 Visual Studioを持っているなら、それが使えるはずだ。
俺持っていないから詳しくは知らないけど。
だめだorz
コンパイルしても動かないorz
775 :
デフォルトの名無しさん:2006/10/02(月) 05:55:07
Borland C++は64ビット対応してないの?
してない
>>774 まさかこんなメッセージが出てないよな?
...は有効なWin32アプリケーションでありません。
TeamSuiteを入れる人間の質問とは思えないんだが…
割れ物注意w
780 :
デフォルトの名無しさん:2006/10/10(火) 02:30:57
VS2005で、純粋仮想関数を使った基本クラスをライブラリ(libファイル)に
し、その派生クラスと仮想関数をmainのあるところで書いてコンパイルしよ
うとすると、リンクエラーでリンクできません。解決方法はありますか?
>>780 それは普通は問題ないはずだけどな。
64bitコンパイラだけで起きる現象なら何かあるかもしれないが、
32bitでコンパイルしても同じ現象が出るようなら単なるコーディングミスだと思う。
答えが欲しいなら再現性のあるコードをアップしてみて。
782 :
デフォルトの名無しさん:2006/10/15(日) 00:19:06
ここで質問していいのかどうかよくわかりませんが、教えてください。
1テラバイトくらいのメモリを必要とするアプリを開発&実行させたいのですが、
WindowsXP64bit版でVisual Studio 2005を使って開発したアプリは、1テラバイト
のメモリ空間を利用できますか?
メモリ空間は8TBのはず
784 :
デフォルトの名無しさん:2006/10/15(日) 00:40:15
>783
ありがとうございます。
そうすると、500GBのHDDを20台くらい使えば、8TB使うアプリを
ページングしながら動かすことはできますかね?
物理メモリを8TB積め
現在の64ビットのPCサーバーで16GBから64GBくらいが最大搭載容量だからつらそ。
787 :
デフォルトの名無しさん:2006/10/15(日) 08:57:13
>786
ありがとうございます。
PCは64GB程度のメモリ搭載を想定しています。そこにページング用のHDDを
沢山乗せて、64bitのOSを使って数テラバイトのメモリ空間を使うアプリ
を動かしたいのです。現時点で、そういうことは可能でしょうか?
OSはwin,linuxなど何でもOKです。
動いても凄い遅そうだな。
一体何の処理をするんだ?
脳内だけで、釣りだろ。
791 :
デフォルトの名無しさん:2006/10/15(日) 18:23:01
>789
ええっと、ある種のシミュレーションです。
>790
釣りではありません。実際にやりたいのです。
クラスタとかとまた違うのか?
まあPCの性能限界に挑戦とかなら興味ないしどうでもいいけど。
>>791 本当に物理的に8TBもの場所にアクセスが必要なの?
必要なところだけポインタであれするとかできないのか。
本当に必要なら、どんなシミュレーションか気になるね。
リニアアドレッシングさえ考えなければ32bitでも不可能じゃないと思う。
大規模って言うか壮大な計画がなら、豊富な資金を用意して、
ハード面は業者任せ(比較的安い価格で組む特注ハード)?だと思おうけどさ。
たいていは、数人のハッカー企業か大学の研究室で、予算ないんだろうな。
もし本当にやるつもりなら、人柱でヨロシク。
性能比較をHPで公開してよ。結果楽しみ…
できるものならクラスタリングした方が、、、
障害時の被害が凄そうなシステムだ
>>794 それを言ったら64bitのアドレッシング全否定じゃん
16bitだって可能
実際に搭載される物理メモリが増えたときの性能的利点のために今から64bitで作っておく
というのが多いんじゃないかな。
>>799 それを本腰で使うのはいつからだ?素人は黙ってろ。
ランダムアクセスの場合、ディスクはメモリの100万倍くらい遅いので、
64GBしかメモリがないのに、8TBあるつもりでアクセスしたら、
64GBあるつもりの場合の128倍じゃなくて128*100万=1億倍くらい遅く
なりそうだが、それでもいいんだろうか。
問題を分割して、メモリ64GBのマシンを128台用意して解いた方が
いいんじゃねえ?
スラッシングというやつだな。
アクセスを局所化しないで物理メモリより大きな仮想メモリを使うのは馬鹿
馬鹿にも使える64ビット電卓
スラッシングの意味違わない?
>>802 アクセスパターン次第。完全にランダムなアクセスでない限りそういう単純計算の
程度よりは速くなるように設計されている。「100万倍遅い」というのも誰に聞いたか
知らんが不正確。とりあえずもうちょっと勉強しなさい。
>>806 物理メモリを1TB載せたいなんて話は誰もしてないと思う。
アクセス速度と信頼性両立するならRAID0+RAID1でどーよ
>>807 でも素直にできるだけ物理メモリが沢山載るマシンを買った方が
賢いと思うぞ。
金があればそうだがTB越えだとメモリだけで億いくぜ。
812 :
デフォルトの名無しさん:2006/10/25(水) 11:28:02
782の本人ですけれど、
みなさんありがとうございます。
いろいろ参考になりました。Sunの1TBマシンは値段いくらかしりませんが
高くて買えないと思います。大規模なクラスタも予算、設置場所の点で
難しいです。ですので、64GBメモリくらいのSMPの8CPUくらいのマシン1台を
考えています。メモリアクセスは、ほとんどの場合ランダムではなく、
連続的に読み書きする場合が多いです。そいうい条件でも
ページングの影響でとても遅くなりますか?
たとえばdouble型8byteで1T個の配列を確保して合計8TB。
その1T個の配列を
for(i=1;i<1e12;i++){
813 :
デフォルトの名無しさん:2006/10/25(水) 11:29:37
すみません、手が滑って、途中で書き込んでしまいました。
続きです。
なんていう風にループで回すと、どれくらいの計算時間になりますかね?
PCの寿命が先に尽きる希ガス
>>813 自分でやってみれ。いきなり1TBでテストする必要は無いんだぜ。
小規模なテストモデルを考えて、自前のPCで動かしてみれ。
問題を分割出来ていないのが問題化と。
>>812 100MBずつにループを分解してやれば、
32bitCPUのWinXPマシン+大容量HDDで
できるんじゃないの?
それ以前にループにフロート使っちゃダメだろ
あ、気づかなかったw
1e12は整数の1000000000000のことだと思ったけど、
これは32bit整数じゃ表せない大きさだ。
floatではなおさらダメだがdoubleならできなくはない。
整数に収まるかどうかは問題ではない
i++で下位ビットが欠ける数値はカウンターには使えないだろ
それはi+=1.0とかにすればいいじゃん。
まあ、整数使え。
だから桁が増えるとi+=1.0が欠けると
>>821 doubleで1e12なら欠けない。
doubleは絶対値が2^53以下の整数を厳密に扱える。
せっかくの64bit CPUなんだから64bit整数使えばいいじゃない(マリー
64bit CPUじゃなくても64bit整数は使えるけど無理やりスレタイに関連付けてみた
先日x64版Linuxに意味も無く移行した
自前のソースが全然コンパイルできなくて唖然とした
低スキルの素人プログラマだから自業自得なんだけど
閑話休題
おまえら!x86とx86_64でソース互換性を保ったままコーディングする方法について詳しく解説してる本とかサイト知ってたら教えてください
あ、言語はCです
#include <emmintrin.h>
asmを使わない
型の大きさの表現に即値は使わない
例: sizeof (int *)
ポインタ型を整数型にキャストするときにはintptr_t/uintptr_t。
830 :
824:2006/10/31(火) 02:32:09
>>825-829 みなさんの仰られていることでぐぐったらやるべきことが見えてきた気がします
あれこれ調べながら小さいものから書き直してみようと思います
曖昧な質問なのにアドバイスありがとうございました
832 :
824:2006/10/31(火) 21:46:28
>>831 ありがとうございます
わかりやすくまとまっていてとても勉強になります
>>ALL
とりあえずmalloc()でsegmentation faultが出なくなりました!
この調子でマイペースに楽しみながらデバグしていこうと思います
本当にありがとうございました
833 :
デフォルトの名無しさん:2006/11/26(日) 02:14:35
Insure++やDevPartnerなど、ランタイムエラーを捉えるツールで、X86-64
のWindowsXP64ビットで使えるものってありますか?
834 :
デフォルトの名無しさん:2006/12/13(水) 01:20:52
FFFTPの64ビット版つくってください
あるじゃねーかwwwww
MS-DOSの64bit版つくってください
837 :
デフォルトの名無しさん:2006/12/13(水) 01:44:55
64bitでネイティブ動作するテキスト置換ソフトは何を使ってる?
テキスト置換なんか強いて64ビットでやる必要ねーだろ
64bitにすればなんでも速くなるとでも思ってるの?
おうよ!
数値が2倍なんだから2倍速くなければ公取が動きますよ
あふぉや
SSE2のpcmpeqb使って並列比較したほうがまだマシ
843 :
デフォルトの名無しさん:2006/12/13(水) 22:34:13
メモリ帯域は変わらないよね?
全部64bitにすると全部32bitの場合の半分の個数しかデータ送れないんじゃないの?
あんまり詳しくないけど。
誰か教えて。
845 :
844:2006/12/14(木) 14:16:29
むむ。誰からも返事が無い。
自分の疑問は合ってるのかな。
>>844 64bit精度が必要なところ以外では
今まで通り32bit変数を使うから、
そういう心配はいらないのだ。
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ <こいつ最高にアホ
彡、 |∪| /
/ __ ヽノ /
(___) /
>>847 AAに同感するとは思わなかったが、同感だ。
俺も知らんけど、アホとか言ってないで説明できないの?
847がそうなのはわかったが、アホなのは844なのか846なのかはっきりしる。
851 :
デフォルトの名無しさん:2006/12/14(木) 19:29:54
どう考えても846
で、どうなの?
広い範囲のメモリをバンバン読み書きするタイプの処理の場合、
844の心配は現実になるよ
整数なら範囲がわかっていれば32bitにすることもできるけど
ポインタはそうはいかないんだよねえ
>>843 ソース公開されているんだから、自分で64ビット対応の修正すれば作れるのでは?
ポインタだけでキャッシュに収まらないほどの量になるの?
856 :
・∀・)っ-{}@{}@{}@ ◆DanGorION6 :2006/12/14(木) 22:06:46
収まるか収まらないかの問題じゃない。
転送帯域が同じなのにデータサイズが増えるならそれだけでスループット落ちる。
あとは命令サイズの問題か。
imm64とかをうかつに使うと命令フェッチ帯域圧迫されるしREX使えばそれだけで命令長1バイト増える。
Core 2 Duoは4命令同時デコードに対して16byte/clkの命令フェッチ帯域しかないから32bitのほうが速いことも多いよ。
857 :
844:2006/12/15(金) 12:34:25
なるほど。みなさんありがとうございます。
>>856 理論的にはそうだが、自分で試した上での発言か?
Pentium 4だと、レジスタ増えてるのにスループット全く変わらなかった。
SIMD演算ユニットの割にロード・ストアのスループットが良すぎるから
レジスタ数の増加程度で性能は伸びない。
従来型アーキテクチャだとデコード前の命令長の影響はもろに受けるからね。
Core 2 Duoで4 IPCが3 IPC前後に落ちる現象も知ってる。
ロード・ストアの頻度の多いプログラムでレジスタの増分性能が改善されたり、
あと4GB以上のメモリ空間が必要な処理なら十分性能出せるんじゃないかと。
つかね、ただパフォーマンスを上げるだけなら、現状、SIMD使った方がいい。
別に排他的なもんじゃあるまい>SIMDと64bit
そうだけど、別にSSEが128bitから256bitになるわけじゃないだろ?
64ビットは32bitが2個分だから性能が上がる、とか言う前に、まずSIMD使えって言いたいの。
SIMD命令なら各要素ごとにラップアラウンドしたり飽和処理したりするのが簡単にできるわけで。
現状、SIMDを多用するときは、汎用レジスタセットはデータのアドレス計算やループカウント、
あと細かいスカラの演算くらいにしか使わないんだよね。
汎用←→XMMレジスタ間の転送はmovd(32bit)やpinsrw/pextrw(16bit)くらいだし。
強いて言えばIA32→x64でレジスタ数の増加くらいの恩恵はあるけど、REXプレフィックスは
命令サイズを増大させるので、先に指摘した問題がある。
あと、レジスタが増えた分だけ待避・復帰処理の時間が増える。
つか、64bitの利点はデータの幅じゃなくてアドレスの幅だべさ。
64bit整数なんて32bit環境でも普通に使えるべ。
SIMDを多用して速度が向上するような処理は
REXプレフィックスの足かせよりレジスタ数増加の恩恵の方が大きいと思う。
long long intを32bit環境でやると、遅いと言うより使いづらい。
配列なんて確保したら、殆どの場合セグメントフォルトだし
まあ、Athlon64なんかは64bit ALU×3、64bit SIMD ALU×2(128bitは64bit2回に分割実行)
だから、それほど性能良くない。
Core 2なんかは64bit ALU ×3、128bit SIMD ALU×3だから、大量データ処理には
完全にSIMDのほうが優位。
>>865 ダンゴリオンさんは、いろいろ書いてくれてるけど知識だけじゃなくて、
SIMD使ってとりわけ速くなる様なコーディング経験があったってことなん?
いちおう有るには有る。64bitのほうはまだ世に出してないが
Core 2のSIMD整数モンスターぶりがよくわかるのは個人で出してる
871 :
869:2006/12/16(土) 18:48:53
872 :
867:2006/12/16(土) 20:23:29
>>870 ちらっと拝見しましたよ。NANDとNORを追加とかアセンブラ書きの人の言やねw
874 :
デフォルトの名無しさん:2007/01/29(月) 00:26:58
>>854 作者に無断で改変して配布するわけには いかんだろ
>>874 フリーソフトなのにそんな変なライセンスなの?
別に修正BSDライセンスなんだからいいんでねーの。
877 :
デフォルトの名無しさん:2007/01/29(月) 11:09:28
俗に言う64bitCPUというのは何をもって64bitなのですか?
CPUからにょろっとでてる配線の数が64本だから?
ポインターの大きさが8バイトだから?
878 :
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄:2007/01/29(月) 11:35:01
┌┐.┌i ┌┐ __ ┌┐ | | [][]
|└[][]L.ロロ | [][] | | ロロ |.[][] l└─┐
|┌┤.r‐┘│┌┘ | └┐└─┐l ̄ ̄
└┘..凵 └┘ ! l ̄__l ̄ ̄.┘ ゙!!
└┘
∧_∧ !
( ^∀^)
( ;; ⊂ )⊃
( ( ;( ;; ; 0爻爻爻0
汎用レジスタのサイズじゃね?
バス幅が64bitとか、
32bitが2つで64bit級とか。
サターンを彷彿とさせるなぁ
64bit Windowsのユーザーアドレス空間が
0x10000 - 0x0000 07FF FFFE FFFF x64
0x10000 - 0x0000 06FB FFFE FFFF itanium
こうなってるとか見たことがある。
CPUとしては倍の16TBくらいなのかな?
バス幅が64ビットというと。
Pentium以後のIntelCPU全て、ソケ5・7系以後とか、
PowerPC601以後のPowerPCの大半が該当するな。
なんと、PC用CPUは、10年以上前から64ビットばかりだったって事になってしまう。
32ビットが2つで64ビット級...ならば。
CoreDuo、 Core2Duo、 PenttiumDあたりは64ビットってことか
Athlon64 x2は128ビット級ってわけか?
32bitからいきなり64bitなんてやりすぎだろ。まずは40bitくらいを目指すべきではないのか?
アドレスバスとデータバスを混ぜるのは良くないですよ。
>>884 現時点では48bitくらいしか使われてなくて残りは予約されてなかったっけ?
今のプログラムはいわゆるタイニーメモリモデルだから
スモールメモリモデルにすれば8GB
ラージメモリモデルなら1024GBまでいけるな。
ナツカシス
このスレをざっと見てみたけど
float と double は32ビットから64ビットに移行しても
メモリ中に占めるサイズは変わらないってことですよね?
流石にそれが変わったら大騒ぎw
>>889 浮動小数点演算の場合はIEEE 754という縛りがあるんで、
単純にCPUの処理ビット幅が増えたからといってそのまま大きくするわけにもいかない。
レジスタ幅(内部計算精度)がx87は80bitで、x86-64はSSE 64bitという違いがあるな。
>>893 確かにx86-64だと80bit精度にはならないが、
それだとCで同じコードを書いても結果が異なるということになる。
元からdoubleは内部も64bitじゃなかったっけ?
中間結果の精度が高いために結果が異なる場合がある。
もっとも64bitでなくても今はSSEのほうが速いので、いずれx87は廃れる運命だろう。
結果が異なってもいい規格なのか。どうも。
まあ、今どきレジスタがスタック形式はないよな。
浮動小数点は、定数のたたみ込み具合で値が変わるという話があったな。
Javaで問題になったねえ・・・どう決着したんだっけ
899 :
デフォルトの名無しさん:2007/02/11(日) 01:06:55
900 :
デフォルトの名無しさん:2007/03/05(月) 13:12:19
x86版はXP x64で正常動作しないの?
>900それくらい自分でやれよ
つ V2C
904 :
デフォルトの名無しさん:2007/03/07(水) 00:24:05
>>901 win32api つかってるからアウト
delphiで書かれたモノはアウト
まぁjava(v2c)もいいけど
x64対応があってもイイわな
win32apiを使ってることはx64 Editionで動かない理由にはならないだろ。
Delphiで書かれたWin32用アプリってx64 Editionで動かないの?
何か大きな勘違いをしてないか?
2chブラウザは大量メモリが必要なわけでもなく、高速な処理が必用なわけでもない。
64bit化することに全く意味がない。
きっと64bit化しないと64bit OSで動かない(または遅くなる)と思ってるんでしょ
OKわかった。とりあえず開発機材よこせ。
自作板の64bit版2chブラウザスレ、厨房大杉でワロス
過去ログ検索だったら分からんでもないが
それでも個人用途なら64bitは要らんだろうなあ
オンメモリに2chの過去ログ全部のてみせます!
推奨メモリ・256GB
発端が
>>900だからなぁ、とてもそういうものを望んでるとは思えん。
winの64bit版は32bitアプリ動かないのか
まさか
夜釣りご苦労様です。
64bitて死滅しちゃうの?
32bitからいきなり64bitなんて無茶するからだよ。
とりあえず34bitくらいから順に上げていくのが良いのではないか?
何をどうしたらそういう発言ができるのかわからん
あれあれ?いいんですか?
セグメントモデル復活させますよ?
IA-64では復活したと聞いた
そもそも多重仮想記憶やPAEはセグメントと言えないこともないな
祝!FARポインタ(16+32bit)復活。
これからやるなら64bit+64bitにしてください
>>924 セグメントレジスタというより基底レジスタに近い感じだな。
41bit/1命令 x 3命令 + 5bit ということは命令として直に指定できる値が限られるわけだ。
IBM S/360のアセンブリに似ている・・・
RISCなどの固定長命令型アーキはみんなそうだよ
x64の直値代入だと命令長が80bitさすがに弊害が見える。
0004e 48 b9 00 e8 76
48 17 00 00 00 mov rcx, 100000000000 ; 000000174876e800H
00058 48 03 c1 add rax, rcx
IA-64は2バンドル使って64bit即値代入してるな
>>928 多少の非効率は押してでもx86からの以降のしやすさを狙ったのがx64だからね
931 :
デフォルトの名無しさん:2007/03/09(金) 02:20:59
>>913 win32apiで組んだものは動かないのが多いよ
WoWはアテにならない
またテキトーなことを
乞食がこっちのスレに戻ってきたか
934 :
デフォルトの名無しさん:2007/03/09(金) 02:45:12
x64で動かすためにはポータブルメソッドで書き直さないとダメだろう
また知ったかぶりですか?
ただのtypedefとマクロなのにwww
936 :
デフォルトの名無しさん:2007/03/09(金) 02:48:31
団子がいままでx64向けに書いたものを見せてくれ
ソースレベルの話なのかバイナリレベルの話なのかわけわからんな
938 :
デフォルトの名無しさん:2007/03/09(金) 02:51:04
団子って delphi しか使えないひとなんでしょ?
939 :
デフォルトの名無しさん:2007/03/09(金) 02:51:19
WoW(うぉーう)ってなんですか?
C/C++とDelphiのコードも見分けられないのか
馬鹿だな
>>931 そんなことはないよ。よほど行儀の悪いプログラムばかり使う人ですか?
プログラム板にプログラム書けない人が来ても馬鹿にされるだけだよ
944 :
デフォルトの名無しさん:2007/03/09(金) 02:55:15
#include <stdio64.h>
int main(){
printf("Hello X64 World! WoW!\n");
return 0L;
}
じゃ、駄目?
ちょっと動かないソフトの例を挙げてもらえまいか
>941
ofではなくonだと思っていたわけだが
なんでintとlongを混ぜるん?
948 :
デフォルトの名無しさん:2007/03/09(金) 03:04:36
>>946 いや、漏れ的には64bitだからlong long int返せば64bitアプリになる思ったんだが駄目?
じゃ、最後はreturn (long long int)0; でどう?
>>947 手直しヨロシコ
インクルードファイルをオープンできません 'stdio64.h'
950 :
デフォルトの名無しさん:2007/03/09(金) 03:08:18
入門者スレに誤爆したの誰?
95 名前:デフォルトの名無しさん :2007/03/09(金) 03:05:00
・∀・)っ-○◎● は x64でのデータ型の定義も知らずに何をほえているのか?
なんかVisualC++に挫折経験があるみたいだけどw
delphi 厨の典型だな
だから64bit化なんてしなくてもWin32のままで動かせばいいじゃん
>>950 自作板の自スレに貼ろうとして誤爆したらしい
953 :
デフォルトの名無しさん:2007/03/09(金) 03:20:32
Win32でプログラミングするのも飽きてきた → 何か新しいことをやりたい
こんなかんじかな
あとdriverとかは独自のが要るよな
954 :
デフォルトの名無しさん:2007/03/09(金) 03:21:32
おーい、見てるかい、自作PC版ブラ君たち、ム版へおいでよ
そこ、そこスレ違い甚だしいだろ
俺はVIPからの出張人だ
>948
じゃあなんでint main()なんだよ。
957 :
デフォルトの名無しさん:2007/03/09(金) 03:23:15
>>953 Vistaでドライバー仕様が変わったからね、デバドラ人大変だよ
それ以前にstdio64.hってなに?
959 :
デフォルトの名無しさん:2007/03/09(金) 03:26:15
>>956 お前が動くように汁、おれ、プログラム解らんよ
>>957 個人では実質的にカーネルモード触れなくなった。
HDコンテンツの保護が目的らしいが
MSの墨の付いてないデバドラを有効にすると、DRM保護コンテンツが再生できなくなったりとかw
誰が望んだんだろうねVistaって。
961 :
デフォルトの名無しさん:2007/03/09(金) 03:31:19
>>958 よく効くおまじない
>>960 へー、良く分からんけどそうなんだ、DRMってなんだ
きっと、へぼいドライバー出入り禁止にしたいんだよ
簡単に言えばコピープロテクト。
カーネルモードドライバの挿入を無条件に許可してると
プロテクトを回避されるおそれがあるから
963 :
デフォルトの名無しさん:2007/03/09(金) 03:46:31
>>962 すいません、カーネルモードって何なんですか?
だいたい、ユーザーの物は隔離したほうがいい!指輪はたくさんあるのにね
charからintへの代入を知らないと、貴方が心から思いこんでる相手に
ものを聞くのは間違いでしょう?
それとも、撤回できる?
965 :
デフォルトの名無しさん:2007/03/09(金) 04:03:02
ねるぽZzzzzz
966 :
デフォルトの名無しさん:2007/03/09(金) 04:09:45
>>964 良くわからんが、自信をもって撤回します、熱烈完全撤回します。
>>948 stdio.hはISOで定められている規格の一部なんだから、
何ビットの環境になろうと、通用するに決まっている。
久しぶりに来たらスレのレベルが一気に下がってて驚いた
899と900の日付を見れば・・・
だんごここにもいるやw
ダンゴがくると途端にレベルが下がるな・・・
このやりとりはさすがに相手のレベルのほうがアレだと思うが。
まあこういうのを呼び寄せるという意味では確かにレベルが下がるな
973 :
デフォルトの名無しさん:2007/03/21(水) 20:46:39
AppVerifier って、64ビットネイティブでも使えますか?
団子厨は嫌いじゃない俺が居る。
なんで嫌われてるんだ?割と気が合いそうなんだが・・・
>>974 団子が嫌われてんのは厨房なノリで暴走することがあるから。
俺も、なにげに団子と考えることが一致していることは多々ある。
たまに誉めて欲しいが故の発言が痛いけど
それでこそ団子ちゃんだしなぁ。
キャラ立ってて良いと思われ。
団子の発言ほとんどが知ったかぶりなので見てて痛い
自作板見て濃いよ、目を覆わんばかりの無知っぷり
せめて◇でいいからトリもつけてくれたほうが笑いになったのに
こうか?
団子がいるとレベルを下げる方向にしか働かないからなあ。
試しに100年ほど名前入れないというのはどうかな。
名無しの団子を看破するのは容易
まあ、ネタフリすら出来ずに他人のことをとやかく言うしかないやつが
一番無知で低レベルなんだよな
団子が来るとスレがピリッと引き締まるな。
それ褒め過ぎw
>まあ、ネタフリすら出来ずに他人のことをとやかく言うしかないやつが
>一番無知で低レベルなんだよな
団子ちゃん、これが痛いんだよなw
ボクチャン凄いでしゅーって、そんなにアッピールせんでもよろし。
あたまわりーなこいつ→
>>987←生きてる価値あるの?
埋め立てとくぞ
次スレは不要だよな
>>988 ないよ。てか、いちいちそんな当たり前のこと訊くなよ。
あたまわりーなこいつ→
>>988←生きてる価値あるの?
990
991
992
993
ずれてたおrz
10000
10000000
10000
1000!
1
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。