はてなキーワード: AMD64とは
CCっつったらカーボンコピーじゃなくてクリエイティブコモンズライセンス。
いやまあ松尾研の話なんですけど。
アメリカでPDSがもめごとのもとになって散々バチバチにやった結果、決してソースを奪われてしまわないために自由なソフトウェアという意味でのフリーソフトウェアという言葉が使いだされ、これがその用語の混乱から無料ソフトウェアと思われたりしてこれまたもめごとのもととなってしまい、(地球の裏側の日本なんかではソースの提供なんか最初からなんにもない無料ソフトウェアの意味で作者自身が使ったりしていた)ぐちゃぐちゃに殴り合いになったため思想とか立場とかいったん置いといてビジネス的な展開もちゃんとできるための新造の用語としてオープンソースソフトウェアという用語を創造してうまくやっていたらこれが硬すぎてクリエイターのお気持ちを一切斟酌しないしあまりにもドライかつソースコード寄りなのでプログラマー以外にとってやりづらいということでクリエイティブコモンズという用語が創造された、という感じに把握してるんだけど
そこへきて「AIでーす、CCのライセンスの一つをチョイスしてまーす」という実態のものを「オープンソースでーす」っていうのは「三波春夫でございます」ぐらいにどつかれるの当たり前っつーかなんつーか
オープンソースライセンスとかいうガチガチな定義の用語(IA-64が何を指しているかぐらいに明快)がつかいづらい状況で使いたいからクリエイティブコモンズライセンスのCC-BY-NC-SAですとか書くわけじゃんか。
クリエイティブコモンズライセンスのことをオープンソースとか言うの、x86-64とかx64とかEM64TとかIntel 64とかAMD64とか書くべき状況でIA-64って書くよりなお悪いと思う。
この解説記事の通りにやったらDockerのインストールが完了した。
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# :OUTPUT:
# OK
sudo apt-key fingerprint 0EBFCD88
# :OUTPUT:
# pub rsa4096 2017-02-22 [SCEA]
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io
# :OUTPUT:
https://b.hatena.ne.jp/entry/s/jp.quora.com/hotondo-no-puroguramingu-gengo-de-kansuu-no-return-ga-1-tsu-shika-deki-nai-no-ha-naze-desu-ka を呼んだんだけど、回答・ブコメともにとんでもないことを書いている人がたくさんいてびっくりした。本質的に多値返しは直積型の返しと同じで、これはタプル・構造体と本質的に同じ、というのは多くの人が指摘している通りではあるのだが…。
動的型付け言語に慣れてらっしゃる方が多いのかもしれないけれど、配列というのは「同じ型をまとめた型」であるべき。動的型でいろいろ突っ込める配列は本質的には「直和型の配列」と思った方がいいよね。多値返しという意味では(記憶領域の面で)余分なコストがかかりうる直和型を選択する意味はないですよね?回答でもなんか配列返しに言及している某有名人がいたが、あれれ?という感じ。
もっとも、immutableな配列をtupleと呼ぶPythonという言語があるせいで引っ張られている感は否めないけども、配列とは本質的に異なる型が存在しているのは明らかですよね?配列と構造体って違うよね…?(言葉の定義の問題と言われそうだけれど、型システムの分野での言葉の定義は存在しているわけで、反論になっているとは思えない。『俺は明日からこのわんわんなく動物をネコと呼ぶから』と言っているようなもんでは。)
確かにナイーブにはレジスタに入れて返すのが素直だというのは同意するけど、でもそれ構造体と一緒だよね?昔のCではこれはできなかったというのは知らなかったので勉強にはなりました(未検証だけど)。
あと構造体返しの関数がどう機械語で実装されているのか知らなさそうな人がいるのにはちょっとびっくり。それでなんでレジスタがどうとか言えちゃうのかしら。構造体の値を返す関数ならばポインタは返さないですよ。そのポインタはどこを指してるんですか。実装しづらいとか何とか言ってる人たち、ちゃんとアセンブラ読んだことあるんですか…?本質的に何の困難もないです(ちなみに少なくともlinux amd64ではスタックに領域を確保してそのポインタを関数の引数の一部として渡します。まあヒープに置く場合でも余計なmoveが出ないようにしたいとかあるかもだけど、そんなでかいデータは普通無名構造体では扱わないでしょう)。
確かに、返り値の型が(A, A)のような場合はドキュメント読まないとわからなくなってしまうので可読性が下がるし構造体を使うべしというのは(ほぼすべての場合において)同意(多値は使いづらいというのは構造体は使いづらいという意味ではないですよね?)。でもさ、某有名人もgoで挙げているけれど多値って普通(A, B)みたいに違う型の値を返したくなることの方が多くないですか。この場合どっちがどっちかは自明だよね?ただの無名構造体だよ。多値返しは設計が甘いとかわけわからんことを言っている人もいたけれど、なんかこちらが不安になってきた。
…本当に意味不明で驚いた。id:megumin1氏が言っているように、tupleのパック・アンパックに余分なコストをかける必要はない(まあアドレス渡しになるから複数本のレジスタで返すのと比べたら余分なmovが入りうるという話はあるけど、この人が多値返しというので何を想定しているかわからないので何とも。)。何遍呼んでも多値返しとtuple返しの違いが判らなかった。おそらく前述のようにimmutableなlistのことをtupleと思っているのかな?と予想はするが…。
はてな界隈ってエンジニア的な印象があったんだけど、ここら辺の話ってそんななじみないのかな…?てか某有名人氏も型システムとかあんまりご存じないのかな…?むしろこれは増田が無知なんだろうか…?
Dockerがバズるくらいだから今どきハードウェア仮想化なんて流行らないのだろうが、Windows10 Proの安いPCを1つ購入してHyper-Vを有効化したのでCentOSとUbuntuのどちらを入れようかと考えてた時に、昔インストールに苦労したDebian 3.1 Sargeのことを思い出して本家のサイトに行ったら今年の6月にDebian 9が正式リリースされたと聞いてすごく懐かしくなり、こいつを選択することにした。
随分バージョンが上がったものだなあ。しかも今はamd64がインストーラーのリストの最初に上がってるし。昔は64は人柱用だったのに。
10年ほど前、玄人志向の玄箱というNASのOSをDebianに入れ替えて単なるファイルサーバから多用途サーバにするのが流行ったことがあった。今でも後継品のBuffalo製NASをDebian化する好事家は細々ながら活動しているが、UbuntuのベースであるDebianに最初に触れたのがその頃で、当時のバージョンは3.1、通称Sargeだった。タイミングのいいことに、Sarge対応の分厚いDebian入門書が存在していたのでレファレンスには事欠かなかった。まあそれでも、スペックの貧弱な玄箱にインストールして少しでもパフォーマンスをよくするにはカーネルを書き換えて再コンパイルしたりといった悪戦苦闘があったわけだがもう忘れた。
Hyper-Vの仮想マシンへのDebianのインストールはトラブルらしきトラブルもなく、インストールしてすぐに使えるようになっていてまあこれが普通だよなと。OSは使いこなしてなんぼで、インストールで苦労するのは不毛だと当時も思ったし。
あと、エンジニアが多いと聞いているはてな界隈でも個別のディストリのトピックはあまり話題にならないんだなというのがちょっと面白かった。
最初に言っておくと、増田はSCEが嫌いな方でPS3もVitaも持っていない。
そんな増田だが、PlayStation4発表でのハードウェアに対する誤解の数々を見てちょっとばかり怒りを覚えたので少し書いておく
いきなり「何が違うんだ?」と思う人や「何も違わないだろ?」と言う人も居るかも知れない。
だが後半を語る上でもこれは重要な話なので省略しないでおく。
最近のPCは当たり前のように64bitのメモリ空間を扱えるようになった。
この増田を読んでる人でも64bit OSを使っている人は少なくないはずだ。
これをもたらしたのは、x86 CPUを作ったIntelではなくx86互換CPUを作っていたAMDである。
じゃあIntelは何をしていたのかと言うと、64bit CPUを作っていた。x86を完全に捨てて。
Intelは「IA-64」という64bit CPUを開発して商品も出していたが、これは現在ではほぼ完全に消えている。
確かにIA-64は64bitをネイティブで扱えて「x86の古臭い負債」が全く無かった。しかし、現実世界はx86で作られた既存のソフトウェアを求めたのだ。ゲーム業界でも似たような話を聞いた気もする。
それに対して、AMDは「64bitを扱えるx86」を作ってしまった。これが「AMD64」であり、現在業界標準としてx86-64と呼ばれているものである。
知っての通り、x86-64は現在のIntel CPUでも対応している。AMDが作った命令を使わされる事になったIntelは何を思っただろうか。逆に、これまでIntelの命令を使ってきたAMDは何を思っていたのだろう。
PS3に搭載されていたCellは、非x86でスカラプロセッサのPowerPC CPU(PPE)と、複数のベクトルプロセッサSPEを組み合わせたヘテロジニアス(非対称)プロセッサだった。(スカラ、ベクトルについてはググろう)
スカラプロセッサが得意な処理、ベクトルプロセッサが得意な処理を両方とも高速に実行できる。それがCellの目指した「夢」だった。
スカラプロセッサとベクトルプロセッサのプログラム最適化は全く別の概念で、プログラマーにとっては野球とサッカーを同時にやらされるような物である。
しかも、スカラプロセッサとベクトルプロセッサの間でデータの交換もある。野球とサッカーのキャッチボールて。
スーパーコンピュータ「京」もスカラとベクトルの合わせ業で池田某氏に何度も叩かれるほどの超絶難産だった事は記憶に新し…いっけ?
それが原因でPS3の性能を最大限に引き出したソフトはほとんど存在せず、こともあろうにXbox360とのマルチソフトが溢れる結果となった。(ちなみに増田は360も持ってないのでエルシャダイをプレイ出来ていない、問題だ)
それに対し、PCの世界ではPS3・360が発売してしばらく後に新たなヘテロジニアスコンピューティングが生まれていた。
CPUに比べて進化が止まらないGPUをベクトルプロセッサの代わりとして使う試みだ。
GPUはスパコン用のベクトルプロセッサやCellのSPEと違い、最近のどのPCにも搭載されているので量産効果で割安というメリットがある。
DirectXのバージョンも2桁に突入し機能が増えるにつれて、「もうこれで計算すれば良いんじゃね?」となったわけだ。
結論から言うとこの試みは無茶苦茶ヒットした。近年開発されたTOP500スパコンでGPUが使われていないものを探すのが難しくなってきたし、
最近はPhotoshopなんかの比較的身近なツールもGPUコンピューティングに対応してきてヌルヌル動くようになっている。
しかし、そんなGPUにも欠点はある。「CPU・メモリから絶望的に遠い」のだ。
IBMが発明しMS-DOS・Windowsが動くことで爆発的に普及した今のPCは、GPUを外付けにすること前提で設計されていた。
DirectXやOpenGLのような例外を除いて、基本的に現代のOSはCPUとメインメモリでソフトを動かすように出来ている。
GPUも、一旦メインメモリ上でGPUのRAMに載せるためのデータを生成し、CPUから「GPU動かすよー」という命令を出さなければ動かせないのだ。
これはGPUにとって致命的すぎる欠点だった。これが原因で、遅さを跳ね返せる最新のミドルレンジ・ハイエンドのGPUでなければ逆にCPUより遅くなってしまうケースばかりだ。
現実的な理由で始まったGPUコンピューティングがぶち当たった現実的な壁である。
このGPUの欠点を克服する方法について、AMDはかなり前(少なくともGPUコンピューティングが流行るより前の2007年以前)から取り組んでいた。
GPUコンピューティングが遅いのはCPUから物理的に遠いため命令を送る時間が掛かり、メモリの扱いも異なるせいである。
CPUからGPUに命令を送る遅延を無くし、CPUのメモリとGPUのメモリを交換する時間も減らせばGPUコンピューティングのデメリットは消え失せる。
夢のある話だ。
しかし、AMDには発想と設計技術はあったがカネと製造技術はIntelと比べて絶望的に劣っていたため、
初めてのCPUとGPUを統合したプロセッサはIntelに先を越されてしまった。(IntelのGPUが絶望的に遅いからって実質出てないなんて言っちゃダメだ)
これにはAMDもかなり堪えただろう。けれどもAMDは戦略を曲げなかった。
IntelのGPUが絶望的に遅いのでほとんど意味は無かったが、少なくとも前世代のIntel GPUに比べると格段に実効性能が上がっていたのだ。CPUとGPUを近付ける統合には間違いなく意味があったということである。
AMDはCPUとGPUを同じチップにするだけでは無く、メモリ「アドレス空間」も一緒にする道を目指した。
こうなるとCPUの使っているメモリがGPUから直接扱え、GPUの使っているメモリがCPUから直接扱えるようになる。
これが実現するとCPUとGPUが完全なヘテロジニアスコンピュータに一歩近付くのだ。
2011年にやっとAMD初めてのCPU+GPUであるAPUを出せたが、メモリアドレス空間はまだ別々だった。
2012年になってもメモリ空間は別々のままだったが、AMDはARM(iPhoneやAndroidやWindows Phoneに載っているARMである)と合同でHSA(ヘテロジニアス・システム・アーキテクチャ)を推進すると発表した。
世の中の現実的な人々は笑った。「アーキテクチャだけを作ってもハードとソフトが出てこないんじゃ話になりませんよ」と。
同じ2012年、AMDは2013年中にHSAの第1世代製品を出すとだけ発表し2012年は終わった。
そして2013年2月21日(米国時間20日)、Sony Computer EntertainmentはPlayStation 4を発表した。
Cellはコケてしまったので載らない事は誰もが知っていたが、載っているハードウェアに一部の人が驚いた。
―HSAである。PC用のHSA対応APUがまだ正式発表されていない中で、なんとHSAを載せてきた。(2013年末発売だから当たり前だというツッコミは止めろ!)
CPUはx86-64のJaguar 8コア(ちなみにPC向けJaguarは4コアまでだ)、GPUはRadeon HD 7800相当でPS3と違いガチで1.8TFLOPS(理論上1秒間に計1.8兆個の小数点を含む計算を実行可能)のスペックを持つ代物だ。
このCPUとGPUは8GBのGDDR5メモリを共有して動作する。8GBと聞くと最近のPCから考えると少なく聞こえるかも知れないが、(わたしのメモリは16GBです)
GDDR5とはGPUの描画計算を速く済ませるために作られた超高速メモリであり、ご家庭のDDR3メモリとは比べ物にならない速さが出せる。
実際の所PS4がHSA対応かは正式発表されていないのだが、PC向けJaguarはHSA対応と発表されており、SCEもPS4をAPU(CPU+GPU)と呼んでいてこの変態メモリ構成とすると、発売までにクッタリでスペックダウンしない限りHSA確定と見て良いはずだ。
また、PlayStationはこれまで一度もx86系CPUを採用した事が無く、これが最初(で最g)のx86採用機となる。
Intelが初代Xbox(Celeron搭載)であっさり諦めたx86のゲーム機市場制圧の夢を、AMDが思いもよらぬ形で果たしたのだ。
これまでPCでしか発売されてこなかったDiabloが、x86-64のPS4向けに初めてコンシューマ版を発表した事もx86-64の採用が決してつまらない事ではなかった証だろう。(Diabloと戦うハメになるサードの方々にとっては非常につまらないが)
CPUとGPUの”フュージョン”…(HSAは以前はFusionと呼ばれていた。そういえばドラゴンボールの映画も今年やな…)
AMDが長年の間見てきた夢が、PS4で初めて現実世界に現れることになる。(※ただし次世代XboxもHSA採用でPS4より先に発売したりしない世界線に限る)
こんな馬鹿らしいほど夢が詰まったマシンを「x86搭載だからPCみたいで夢が無い」という一言で切り捨ててしまう人に増田は絶望した。
でも、それってユーザーの夢にどう繋がるの?
性能の引き出し易さがPS3と比べて格段に良くなるのでPS3版ラストレムナントや人喰いの大鷲トリコのような非情な現実が減る。以上。
ふとDreamweaverのwebページを見たらoom killerに殺されたでござる
[412469.068584] plugin-containe invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0
[412469.068588] plugin-containe cpuset=/ mems_allowed=0
[412469.068590] Pid: 25562, comm: plugin-containe Tainted: P 2.6.32-5-amd64 #1
[412469.068592] Call Trace:
[412469.068597] [<ffffffff810b4950>] ? oom_kill_process+0x7f/0x23f
[412469.068600] [<ffffffff810b4e74>] ? __out_of_memory+0x12a/0x141
[412469.068602] [<ffffffff810b4fcb>] ? out_of_memory+0x140/0x172
[412469.068604] [<ffffffff810b8c7f>] ? __alloc_pages_nodemask+0x4b6/0x5cf
[412469.068607] [<ffffffff812f7ce9>] ? io_schedule+0x93/0xb7
[412469.068610] [<ffffffff810ba1ed>] ? __do_page_cache_readahead+0x9b/0x1b4
[412469.068613] [<ffffffff81063910>] ? wake_bit_function+0x0/0x23
[412469.068615] [<ffffffff810ba322>] ? ra_submit+0x1c/0x20
[412469.068618] [<ffffffff810b30a8>] ? filemap_fault+0x17d/0x2f6
[412469.068621] [<ffffffff810c8e46>] ? __do_fault+0x54/0x3c3
[412469.068623] [<ffffffff812f8110>] ? __wait_on_bit_lock+0x76/0x84
[412469.068626] [<ffffffff810cb16e>] ? handle_mm_fault+0x3b7/0x80e
[412469.068628] [<ffffffff812f8e11>] ? rwsem_down_read_failed+0x22/0x2b
[412469.068631] [<ffffffff812fb466>] ? do_page_fault+0x2e0/0x2fc
[412469.068633] [<ffffffff812f9305>] ? page_fault+0x25/0x30