Avalonインターフェイス

Avalonインターフェイスが良くわからず最近調べていたが単純に言えば

  • Alteraが作った
  • Qsysでつかう
  • AXIと互換性がある
  • AXI-LiteとAXIがAvalon-MMと対応
  • AXI-StreamingがAvalon-STと対応

ということのようだ。

AXIより単純そうなので多用していきたいが、もっと標準化してもらえないと困るというのが本音。

Avalon-MMはシンプルなメモリインターフェイスでwaitrequestがアサートされたら待ってるだけなので楽。

Avalon-STに関してはまだ勉強中だが、mSGDMAを使うと良さそう。

Avalonインターフェイスの日本語資料はここにある。
https://www.altera.co.jp/documentation/nik1412467993397.html

生産性にコミットしていけ

今のご時勢、生産性が重要視される。

そんななか、最近はPythonやRubyが生産性が高いとして人気だ。
確かにCやC++で書くよりも遅くてもいいならPythonやRubyで書いたほうが良いと思う。

CやC++、Java、C#あたりは開発コストが高くつくといったところだろうか。

Web業界を見ていると生産性だけではなく、セキュリティやスクリプト言語自体が持つ手軽さ(生産性に含まれるが)といったところも重要視される。

一方、アーキテクチャ屋は何を目指しているかというと線形代数の計算高速化だ。主な用途としては流体シミュレーションなんかだろう。

もちろん密行列の計算を高速化するのに文句は言わないが、本当に目指すべきものなのだろうか。Top500は国の威信さえ関わっていると言っても過言ではないが、やはりこればっかりにこだわるのも危険だと思うし、一般大衆に役立つものをコミットしていくという大義を考えた時に目指すべき物が偏りすぎていると思う。

実際にコンピュータを利用する企業という視点から考ると、どうしても生産性の時点でRubyやPythonが強いのならばそれを使うのが当然と言ったところだ。つまり、この部分を高速化することは求められているし、社会貢献でもある。

スクリプト言語処理系の高速化はすすめるべき技術だと思う。

個人的にはまず処理系のソースコードを読んで見ることから始めていこうと思う。(おっとその前にその言語を使えるようにならなければ)

スパコンのベンチマーク

スパコンのベンチマークといえばLINPACKだろう。
Top500で使われているベンチマークで、線形代数の計算を行う。

確かに科学技術計算だと線形代数的な計算は多いのかもしれないが、実用的な計算はもっと複雑なものが多いだろうし、評価の尺度は多面的であるべきだ。

評価の尺度だけでも、演算性能と通信性能で大きく変わってくるだろう。特に通信性能が無視されているのではないかと心配である。

より一般的なアプリケーションを走らせたいと考えたときに通信はやはり多くなると思うのだ。例えばGCCでLinuxのカーネルをコンパイルするときにはメモリへのアクセスは多くなるだろう。また、このような場合はベクトルプロセッサやGPUなどSIMD計算機はあまり意味を為さない。

しかしながら、気象計算を行うときにCPUを使ってちまちま計算することはないはずだ。おそらくベクトルなりGPUを使うだろう。

Top500に縛られすぎて本当に使えるプロセッサを作れていないんじゃないかというのが最近よく思うところだ。

 

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

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

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

 

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

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

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

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

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

アーキを馬鹿にする人たちが居るが、アーキの進歩は確実にコンピュータ・サイエンスの幅を広げているのだ。例えば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を書けるようになるところから勉強してみようと思う。

 

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