アーキテクチャの研究に未来はあるか

「アーキテクチャの研究に未来はあるか」

ここ数ヶ月の最も大きな悩みの種のひとつである。

 

コンピュータアーキテクチャと聞いて何を思い浮かべるだろうか。どれほどの数のアーキテクチャを挙げられるだろうか。自分はこの世界に入ったばかりだからか指で数えられる程度しか知らない。

しかしながらこれは数多くのアーキテクチャが提案されたにも関わらず、商業的な成功を収めたアーキテクチャがそれだけしかないという意味である。

更に、今以上に効率的なアーキテクチャを作ることは難しいのではないかという雰囲気すら感じる。

このとても小さいパイの中で研究することはリスクだ。

しかし、諦めたくない。今のプロセッサのアーキが最適だとは思えないし、自分ならもっと良いアーキを提案できると思っている。

アーキを馬鹿にする人たちが居るが、アーキの進歩は確実にコンピュータ・サイエンスの幅を広げているのだ。例えばGPUがなければ機械学習はまだ20年前に失速した技術だっただろう。

アーキの世界には実際には使えないようなオレオレアーキテクチャをたくさん発表している人がいるようだが、そんな人たちを反面教師に実際に使われてコンピュータ・サイエンスの幅を広げられたらなと思う深夜である。

GPUを否定する

自分が所属する研究室はGPUは良くないという主張を展開している。(もちろんそれを対外的には明示的に言うことは少ない)

しかし、そのような主張は少なくともweb上では少数派。恐らく学術界でも少数派である。

ここで偉そうなことを書いている自分もちゃんと説明を受けるまではGPUは良いものと思っていたので人のことは言えない。

 

ということで、他人から聞いたGPUのダメなところをメモしていきたいと思う。

教えてくださったM先輩、ありがとうございました。

消費電力

GPUは熱くなるイメージがある。実際にそのとおりだ。
GPUの消費電力が大きくなる原因はスレッドの割り当て部分だそうだ。
そもそもGPUはたくさんのスレッドを並列に動かしているが、1コアあたりに割り当てるスレッド数を大きくすることでメモリのレイテンシを隠蔽している。(これをSIMTと呼ぶ)
コンテキストスイッチの時に次に割り当てられるスレッドを探すのにハードウェアの実装が大きくなり、結果として消費電力が大きくなる。

メモリとのデータ転送

GPUのメモリといえば、256bit幅だったりGDDRだったりしてすごい高速だと思っていた。しかしながら計算能力と比較するとそんなことはなく、圧倒的に足らないのだそうだ。この性能は1byte転送する間にどの程度演算命令があればメモリ律速にならないかという指標であるFLOPS/Byteを使うらしい。GPUがどの程度FLOPS/Byteなのかというのは聞いたが、外に出していい情報かわからないのでここには書かないでおこうと思う。

プログラミングの難しさ

一番のGPUの難点はここだ。簡単にはプログラミングを行えないのである。1スレッドごとのプログラムを書いていくわけだが、これが難しいし書ける人にとっても本筋の計算とは違う苦労をするわけで積極的に書きたいわけでなはいだろう。とりあえず自分はCUDAを書けるようになるところから勉強してみようと思う。

 

アーキテクチャの勉強は思わぬところに落とし穴があるのが難しいけれど楽しいね。

Androidでstd::to_stringが使えない(C++)

この記事は前の記事を誤って消してしまったので思い出して書いています。間違いがあったらご指摘頂けると嬉しいです。

Androidでstd::to_stringが使えないという事態に遭遇しました。

これはcocos2d-xと言うopenGL系のライブラリを使ってゲームを作っていた時のことなのですが、std::to_stringがundefinedになってしまってリンクできないということがありました。

どうやらこれはgccのARMEABIという ABI(スマホでよく利用されているARMアーキテクチャのCPUで使われているABI)向けの標準ライブラリのバグのようです。

私はgccではなく、clangを代わりに使うことでこのバグは回避しました。