情報科学科の先輩に聞く!

現役学生OBインタビュー「先輩たちの仕事の原点」各界で活躍する先輩たちが教えてくれる“仕事の本質”

座談会トップへ戻る

CPU実験からスパコンへ

富士通株式会社|安達知也さん (情報科学科30期)
インタビュー年月日
平成25年 2月 22日
安達知也 
学部時代はCPU実験にのめりこみ、当時の最速記録を大幅に塗り替えたのち、その集中力と根気を活かして、現在は富士通に就職しスーパーコンピュータの性能向上に取り組んでいる。
生田拓人、鈴木良平(情報科学科三年)
CPU実験の高速化に関して過去の最速を叩きだした安達さんにとても興味をもち、それがどのように現在に活かされているのかなどといったお話を是非伺いたいと思い、インタビューに伺った。
ご略歴
・情報科学科に入られた理由を教えて下さい。

高校の時からプログラムは少し書いていたのですが、最初は数学科に行こうと考えていました。しかし、大学の数学科の講義を受けてこれは無理だと思って、他に出来ることはないかなと思ったときに情報科学科があったので選びました。

・情報科学科に入ってからはどのような感じでしたか。

あまり真面目にはやっていなかったですね(笑)。ただ、CPU実験だけはまじめにやっていました。4年生になって石川研に入って、その時からMPI関係のことを卒論、修士とずっとやっていて、その関係で富士通に入社しました。

・入社した現在はどのようなことをしていますか。

会社に入ってから2年くらいは、MPI関係でスパコンのライブラリ作りをやっていました。今はその仕事もやりながら、これもスパコン関係なんですが、ジョブ管理システムのスケジューラー周りの仕事をやってたりしますね。

・富士通に入ってからもアセンブリをいじることはありますか。

アセンブリというのは可読性が低くてメンテナンス性に欠けるので、あまり直接書くということはありませんね。万が一自分が病気とかでいなくなっても、他の人がコードをいじれないとといけないので。しかし、ある程度読みやすさ重視、分かりやすさ重視のもとで速いものを作る必要がある以上、アセンブリレベルで何が起きているかを解析するという場面は出てきます。動作が速くならない原因には色々あって、例えば計算量が悪かったりしますよね。しかし計算量は悪くないのに性能出ないというときには、アセンブリレベルでプロファイル情報を調べて、毎回キャッシュミスが起きて速くならないとか、そういうところまでちゃんと見て行かないと、本当に速いものは出来ません。

ソフトウェア屋さんって、上流工程をやって実装は丸投げみたいなところもありますが、コアになるところ、本当に頑張らないといけないところはきちんと見られる人が見て、突き詰めて考えないといけないわけです。そういう意味では、CPU実験でアセンブリをいじり続けた経験は役に立っていると思っています。
ISの授業に関するお話
・CPU実験をとても頑張られていたと伺ったのですが、学期が終わってからも続けられていたのは何故ですか。

面白かったからです。ハードとソフトの上から下まで一度にやる機会ってなかなか無い経験だと思いますし。単位が取れるだけで良いならばそんなに時間は掛からないと思うのですが、やっぱりあれって、6ヶ月って短いと思うんですよね。学期の間は20秒を切るのがすごい壁になっていて、それを乗り越えるのでやっとでしたが、まだまだ速くなるはずだ、と。

・CPU実験をされていたときには、コア自体はあまり触っていなかったのでしょうか。

コンパイラをはじめ、他の係の人にそれなりに口を出しましたが、本番の時はいろいろあってコアはあまりいじってなかったですね。延長戦で8秒を目指したときは、アーキテクチャの改造が必要になってコアまで手を伸ばしましたが。

・CPU実験以外の授業や演習の中で、思い出深いものはありますか。

一番楽しかったのは小林先生のハードウェアの授業かな。あれが楽しかったのも、CPU実験にのめり込んだことに繋がっているのかなと思います。あとは、ネットワークの講義がなんとなく面白かったのは覚えてます。通信ケーブルの移り変わりやさまざまな通信プロトコルを学ぶ中で、先人の知恵に感動しました。

あとは平木先生の計算機構成論の、みんなで色々なアーキテクチャのマニュアル読んで発表するのが良かったですね。私はモトローラのMC88000というのを担当しました。有名なMC68000の系列だけど、ほとんど売れなかったというものですね。

CPUの黒歴史本って知ってますか? もともとWebの連載で、歴史の闇に葬られたCPUの話がたくさん載ってる本です。ISerなら是非読んでほしい一冊なんですが、MC88000はそこの巻末に書き下ろしで載ってるCPUです。君たちはどんなCPUの発表しましたか?

・SPARC、Z80ですね。Z80については、この時はまだ整数乗算の命令もなかったんだなあと思いました。

でも多分、今君たちがCPU実験で作ってるCPUにも整数乗算命令はありませんよね。私達のCPUにもなかったです。掛け算は結局、全部シフトと足し算で作りましたね。課題のレイトレーシングのソースでは、掛け算ってほとんど全く使わないんですよね。使うのってアドレス計算でオフセットずらすとき、構造体の次の要素に移るときというか構造体のランダムアクセスくらいで、大体最適化で消えてしまうので、そもそもほとんど要らないんですよね。

そういえば、他の人の発表でFR-Vという富士通のプロセッサの発表があったんですが、面白いアーキテクチャだなと思いましたね。今(FR-Vに関わっているわけではないですが)富士通にいるのは、不思議な縁を感じます(笑)。

・今されている仕事はハードウェアからは離れていることなのでしょうか。

今やっているのはライブラリを書くことが主なので、ハードウェアともコンパイラとも違いますね。ただ、ソフトを作って性能評価をする中でハードウェアの仕様の問題点が見えてきて、ハードウェアの部隊にフィードバックしたりしているので、間接的には関わっているともいえます。
研究とお仕事に関するお話
・大学院の頃のご研究はどのようなものでしたか。

通信関係、MPIの研究をしていました。最初にやっていたのは異なる設計のクラスタ間を繋げる技術です。大規模計算のために複数のクラスタを使って計算したいと思っても、クラスタごとに特性が違うので、それぞれ最適化を施したMPI実装があって、それらの間では工夫しないと通信ができないという問題があります。そこで、共通の通信の規格は規定されているので、実際にそれを実装してみて性能評価するといった研究をしていました。

・富士通に入られた後で、MPI関係で論文を出されたとか。

はい、大学院でやっていたクラスタ間をつなぐというテーマではなく、特に数万台のような大規模クラスタにおけるMPIの高速化に関する研究をしていました。集団通信は分かりますか? BCASTとか。計算に参加しているクラスタの全プロセスが何かデータを出してきて、それを合計するとか、たくさんのノードで協調してデータを送ったり処理をすることですね。集団通信では、一対一での通信よりも当然通信するデータの量は膨大になって時間が掛かるし、何も考えずに全員がデータを送りつけると、通信路がぐちゃぐちゃになって衝突したりして遅延が発生したりします。そこでうまい具合に通信経路を制御するとか、データを中継するとかといったアルゴリズムを考えて、実際に実装して評価するという研究をしました。そのような問題を考慮していないオープンソース実装に比べると、これによって10倍くらい速くなったりします。

・やっていて少しずつ動作が速くなっていくというのは楽しいですか。

アルゴリズムを変えたりして速くなっていくことは、やっぱり楽しいですね。アーキテクチャの限界の性能はハードウェアを作った段階で決まってしまいますが、実際に発揮できる性能を、その限界までいかに近づけていくかという挑戦は楽しいです。

・情報科学科からメーカーに就職する人は結構いるのでしょうか。

自分の学年は全体の情報はよくわかりませんが、仲良くしていたグループではメーカー就職は多かったと思います。富士通の他、日立、SONYなどがいましたね。そのグループでも院に残った人が4,5人いました。あと、起業した人としてPFI(Preferred Infrastructure)の太田一樹さんがいました。
課外活動とプログラミングコンテストに関するお話
・学生時代には、課外活動などされていましたか。

バイトはしておけばよかったけど、やらなかったですね。TAをやったくらいでしょうか。ICPC(プログラミングコンテスト)はM1のころにやっていました。国内予選で1位、会津大会と台湾大会で2位で、そのときは東大内に強いチームが他に2つあったので東大内プレーオフをやって、それでも2位だったので世界大会には行けなかったということがありました。

・安達さんご自身は早くからプログラミングコンテストに関わられていたのでしょうか。

最初はそういうプログラミングコンテストはやっていませんでした。始めたのはB4かM1くらいからですね。B3のときにたまたま学科の友人のノートパソコンを覗いたら変なコードが書いてあって、それがショートコーディングのコードだったんですね。それで仲良くなって、まずは色々教えてもらいながらショートコーディングを始めたんですよ。それからプログラムを書くタイプの知り合いが出来てきて、B4くらいから地下で練習会に参加したりして、M1でチームに入ってICPCに参加しました。M2のときは一緒に出てくれる相手がいなかったので、やらなかったですね。それからは、ICPCのOB/OG会で現役の人に出題したりといった活動をしていました。コンテスト、みんなやりますよね。駒場の金子先生の『実践的プログラミング』の授業ページに(インタビュアー)二人の名前が書いてあるのを見ました。

・プロコンで学んだアルゴリズムの知識は、会社に入ってからの高速化などでは役立っていると思われますか。

とりあえずすぐにコードに書き起こす、時間内に実装するというアウトプットの速さが要求された経験は今に活きているのかもしれません。あと、計算量を意識できるようになったというのはよかったと思います。もちろん計算量だけで議論するのはよくないですが、アルゴリズムを考える助けになります。先生方にはコンテストなんかやるくらいだったら何か他のことやれって言われたものでしたが(笑)。

・最近は幾分推奨されているような気もしますね。

何事もほどほどが一番ということですね。でも、多少空気変わったのかもしれませんね。学科のパンフレットにもICPCの実績とか書いてありますし。あれだけじゃだめだけど、あれができることは一つの大きなスキルではあって役に立つことはあるし、レッドコーダーレベルになるとある問題に対してすぐにアプローチを出来るわけで、やはり大きな意味がありますよね。ちなみに私はレッドコーダーではなくて、もう少し下くらいで止まっています(笑)。

・ICPCのOB/OG会には今でも参加されていますか。

最近はさっぱりですね。会社に入ってしばらくしてからはなかなか出られなくなってしまいました。特に若い人が増えて、早めに引退する人も増えてきたので。それだけ世界大会に行ってるということで素晴らしいのですが。UTPC(東京大学プログラミングコンテスト)には問題の解答の作成など、結構関わってます。

・学生時代は、サークル活動はされていなかったのでしょうか。

当時はとにかくプロコンが熱かったので、サークルとかはやってなかったですね。でも、学部の1、2年の頃は素因数分解をする「チーム矢内原」という活動を先輩と二人でしていました。

・素因数分解!?人力ですか?

いえ、人力ではなく、計算機でやらせるものです。素因数分解のためのプログラムを書いたり改良したり、そのためのアルゴリズムを調べてみたり、地道なチューニングとかをしていました。今でも素因数分解は続けていて、検索すると名前が出てくると思います。

あとは自転車に乗るのが好きだったので、一人で遊びに行ったりはよくしていました。会社に入ると平日働いて、休日は休みたいなという感じになってしまいました。君たちはちゃんと運動していますか? 何かしら運動する習慣を持ったほうがいいですよ!
生活に関するお話
・会社での忙しさはどんな感じでしょうか。朝早くから夜遅くまで作業したりされますか。

朝は起きられないので定刻に間に合うように起きて会社に来ています。論文書いてた時期とか、性能を出そうと熱くなっていた時期は結構終電近くまでいたりしましたが、普段はそこまでではないですね。

・情報科学科の学生室にいた時もそんな生活でしたか。

結構、夜遅くに来て朝帰るみたいな生活したりしていましたね。みんなが帰ったあとにちょこちょこいじったら100MHzで動いたー!とか。学生時代は本当に生活リズムがひどかったけど、会社に入ってからちゃんと朝来て夜帰る生活になって改善しましたよ(笑)。実は睡眠時間の記録を学生時代からずっと付けていて、どの時期にリズムが乱れているか、ひと目でわかるようになっています。

・情報科学科に入ってからは最初は規則正しかったのが次第にずれていっていますね。

人間の本来の概日リズムって25時間周期という話は知っていますか。だからずれてきているのも自然なことなのかもしれません(笑)。

・その後、すごくノイズみたいに不規則になってるところがありますね。

そのあたりは多分CPU実験でしょうね。で、ここから就職で、またすごく規則的になります。

・面白いですね!このログはどうやって記録しているのでしょうか。

実は毎回自宅のサーバーにsshでつないで手書きしています。後輩がメールで登録できるシステムとか作ってくれたけど結局使ってないですね。これだけは本当に長く続いて、今8年目です。

・まさにライフログですね。

はい、こんな生活をしています。
ISerと技術伝承に関するお話
・今は安達さんご自身は仕事ではコーディングをされているんですか。

はい、コーディングがメインです。ライブラリ周りの記述言語は基本的にはCですね。アセンブリで書くと読めないって怒られます。

・会社に入ってコーディングのスタイルなどは変わりましたか。

学部の演習でシェルを作っていた頃よりは分かりやすいコードになっていると思います(笑)。ただ、コードを読めばわかると思っているところがあって、コメントとかあまり書かなくて怒られたりしますね。コメントって嘘になるんですよ。コメントだけそのままで肝心のコードの内容が気付いたら逆の意味になっていたり、よくありますよね。周りのスキルとの兼ね合いとかあるんで、なかなか難しいところですけど。やはり能力を発揮できるのがコーディングなので、よくやっていると思います。レビューとかも積極的にやっていますね。

しばしば上司などに言われるのは、周りを育ててほしいということです。一人でできることはたかが知れているので、全体でスキルを共有してもらったほうが会社としてはありがたいということですね。ISで自然にやっていることは、実は結構高度なことだったりするので、ISerはそういう場面に遭遇することも多いんじゃないかな。

・CPU実験でも特に技術継承という感じはありませんし、ISには技術を伝えていくという雰囲気は不足しているかもしれませんね。

そういう意味では、技術を伝えたいと思って書いた資料(FPUの設計に関する資料)が毎年伝わっているのは良いことかもしれません。ですが、結果や出来た物だけを見て、コピペで同じものを作って終わりにしてもらいたくはない。私がやったことは既知の技術として、新しい優れたものを効率的に作るための踏み台にしてほしい。だから当時のWikiとか試行錯誤の過程も読めるように残しているんだけど、なかなか読んでもらえないのが悩みですね。

・神資料(安達さんが執筆されたFPUに関する資料)は本当にあちこちで再配布されていますね。

pdfだけじゃなくて、ちゃんとWikiとかから文脈を踏んで読んで欲しいですね。実はまだぽろぽろと間違いがあるみたいだけど、皆さん気づいているのでしょうかね?

・最後に、後輩たちにメッセージをお願いします。

是非、CPU実験で私の記録(8.8秒)を超えてほしい! そして、俺はこんなすごいことをしたんだ、という記録を書き残して欲しいですし、それを見たいと思います。そこで得た知見とか、頑張った記録を残すことは本当に価値が有ることなので、後世に残していってほしいです。

・ありがとうございました。

インタビューアの一人である生田のチームは、後に安達さんの残した「神資料」等を参考にして高速化を行い、六年ぶりに安達さんの記録を破る8.71秒を達成しました。後日このことを御報告すると、安達さんも大変喜んで下さいました。