現代が情報化の時代であることに異論を唱える人はいないでしょう。コンピュータやスマートフォンは私達の生活の中にすっかり溶け込み、デジタル機器なしでの生活はもはや想像すらできません。人工知能の著しい発展や、自動運転、製造業の高度化を目指すインダストリー4.0など、情報技術の広がりは留まるところを知りません。こうした情報技術の核となるのが“ソフトウェア”であるということは皆さんもご存じでしょう。どんどん面白いコトができるようになるのは、どんどん面白いソフトウェアが開発されるからだというのは、なんとなく感じているのではないでしょうか。

では、大学でソフトウェアについて学ぶ、あるいはソフトウェアについて研究するということはどういうことだと思いますか? それは、ソフトウェアの使い方に習熟することでもなければ、趣味のプログラミングとも違います。ソフトウェアを研究するということは、人間の認知能力を超えた複雑さに対する挑戦だといえます。人類がこれまでに作り上げてきたものの中でもっとも複雑なものは、コンピュータのソフトウェアです。現在のソフトウェアの複雑さに比べれば、ジェット機であろうが高層ビルだろうが、その複雑さは比べものになりません。

図:研究室の様子 多数のコンピュータを接続して研究を行います

新しく面白いソフトウェアを生み出そうとすると、多くの場合、これまでにはなかった複雑な問題を効率よく解いてあげなければいけません。問題が複雑になるのですから、その解法はさらに複雑になります。また、効率よく問題を解こうとすると、解法は一層複雑になります。ですから、最終的な解法は指数関数的に複雑さを増していってしまいます。その一方で、人間の認知能力は限られていて、対処できる問題の複雑さには一定の限界があります。ソフトウェアに内在する複雑さを隠蔽し、人間の認知能力を超えないようにソフトウェアの複雑さを押しとどめておくこと、その結果として、一層複雑な問題にチャレンジできる余地を常に提供していくこと、それがソフトウェア研究に課されたテーマだといえるでしょう。

図: GLoop のソフトウェア構造

最後に、ソフトウェア研究の一端として、私の研究室でやっていることを紹介しておきましょう。最近、ディープラーニングなどの機械学習によって世の中が大きく変わるというような記事をしばしば目にします。このディープラーニングとやらを効率よく行うには、GPU という超並列プロセッサを使います。この GPU というシロモノ、処理能力は桁違いに高いのですが、その性能を引きだそうとするとなかなかやっかいです。解法が複雑になってしまうのです。この複雑さを覆い隠すソフトウェア基盤(コード名: GLoop)を研究・開発しています。GLoop を使うと、解法が複雑になることなく、GPU の高い処理能力を引き出すことが可能になります。

もっとも、こうしたソフトウェア基盤もどんどん複雑になってしまうのが悩みのタネですが・・・ 図をみてわかる通り、GLoop、とっても複雑です。

ナビゲーションの始まり