物理的システムのコンピューターシミュレーションは、科学、工学、エンタメ系産業では一般的ですが、使われているツールは違います。この手のシミュは非常に複雑で、アルゴリズムを組むのも困難で、当然プログラマーとコンピュータにとっても大変な作業でもあります。そういった計算に特化した、簡潔なプログラミング言語が求められていました。
今回、MIT(マサチューセッツ工科大)、Adobe(アドビ)、University of California at Berkeley(カリフォリニア大学バークレー校)、University of Toronto(トロント大), Texas A&M(テキサスA&M大学)、University of Texas(テキサス大学)の研究者達によって、その要求を満たすかもしれない、新しいプログラミング言語が開発されました。
新プログラミング言語
User-friendly language for programming efficient simulations
If, say, you want to explore how a crack forms in an airplane wing, you need a very precise physical model of the crack’s immediate vicinity. But if you want to simulate the flexion of an airplane wing under different flight conditions, it’s more practical to use a simpler, higher-level description of the wing.
「もし、例えば、あなたが飛行機の翼にどのようにして亀裂が形成されるを調べたいならば、亀裂の直ぐ側のとても正確な物理的モデルが必要になります。しかし、様々な飛行条件下における航空機翼の屈曲作用をシミュレートしたい場合、簡潔で、より高レベルの翼の描写を使うのが、より実践的です。」
If, however, you want to model the effects of wing flexion on the crack’s propagation, or vice versa, you need to switch back and forth between these two levels of description, which is difficult not only for computer programmers but for computers, too.
「もし、しかし、あなたが、亀裂の伝播に対する翼の屈曲作用の影響をモデルにしたい時、あるいは逆の場合も同様にそうしたいなら、これら2つのレベルの描写を交互に切り替える必要があり、この事は、コンピュータープログラマーだけではなく、コンピュータにとっても困難です。」
今回新たに開発された新言語は、このスイッチングを自動的にやってくれるみたいです。こういったシミューレーションにはmatlabやansysがよく使われます。この新しいプログラミング言語がそういったソフトウェア上で使われるのかどうかは分かりませんが、matlabで使われるC++の代わりになる言語だとしたら、相当便利なような気もします。
新言語のパワー
In experiments, simulations written in the language were dozens or even hundreds of times as fast as those written in existing simulation languages. But they required only one-tenth as much code as meticulously hand-optimized simulations that could achieve similar execution speeds.
「実験では、新言語で書かれたシミュレーションは、既存のシミュレーション言語で書かれたシミュの、数十倍もしくは数百倍の速度を実現しました。しかし、それらは、似たような実行速度を実現可能な、最新の注意を払って手動で最適化されたシミュレーションの、10分の1のコードしか必要としませんでした。」
同じ結果を得るのに、手動の力業によるプログラミングの1割の労力で済むなら、こんな素晴らしいことはありません。例えば、1万行のコードが必要なシミュが、たったの1000行のコーディングで達成可能なら、プログラマーにとっては神言語です。プログラミングの経験が乏しい物理学者にとっても、この画期的な新言語が救世主になることは間違いありません。
Simple is best. (簡潔が一番)
“The story of this paper is that the trade-off between concise code and good performance is false,”
「この論文の内容は、簡潔なコードと高パフォーマンスとの間のトレードオフは間違いだという事でもあります。」
コードの長さとシミュレーションのパフォーマンスは比例するみたいな従来の考え方を真っ向から否定しているのが、今回の論文テーマでもあるようです。アルゴリズムと最適化の問題なのですが、使用言語によってその煩雑性が変わるのもまた真実でもあります。簡潔が一番であることは言うまでもありません。プログラミングの作業効率を上げることは、プロジェクトの経済性や生産性を考えても、非常に重要な要素でもあるからです。それと、誰が見ても分かりやすいコードは簡単に使い回せるし、さらに改良もしやすいので、比較的簡単、短時間で、シミュレーションの実行精度を向上させる事が可能になります。
新言語の可能性
the researchers’ language has applications outside physical simulation, in machine learning, data analytics, optimization, and robotics, among other areas.
「今回の新言語は、数ある分野の中で、機械学習、データ解析、最適化、ロボット工学を含む物理シミュレーション以外のアプリが与えられています。」
物理シミュ以外にも、幅広い分野での応用も可能らしく、特にビッグデータ、機械学習、あるいは、深層学習、ロボット工学は今最もホットな分野なので、この新言語「Simit」が今後の主流になっていく可能性は十分にあるのではないでしょうか。この言語のポテンシャルは相当に高いと言わざるを得ません。
今回の言語は、matlabのプログラミングとは比較にならないほど、簡潔でありながら高速なシミュレーションを可能にするみたいです。
Simitの仕組み
During the simulation, however, Simit doesn’t need to translate graphs into matrices and vice versa. Instead, it can translate instructions issued in the language of linear algebra into the language of graphs, preserving the runtime efficiency of hand-coded simulations.
「シミュレーションの間、しかし、Simitはグラフを行列に変換する必要も、行列をグラフに変換する必要もありません。その代わりに、線形代数の言葉で出された命令をグラフの言葉に変換し、手作業でコーディングされたシミュレーションの実行時効率性を維持しています。」
プログラマーは最初に、システムのグラフ記述と行列記述の間の変換を記述し、後は、ソフトが、線形代数で書かれた簡潔な命令を、自動的にグラフ化してシミュレーションを行うみたいな感じです。
Unlike hand-coded simulations, however, programs written in Simit can run on either conventional microprocessors or on graphics processing units (GPUs), with no change to the underlying code. In the researchers’ experiments, Simit code running on a GPU was between four and 20 times as fast as on a standard chip.
「しかし、手入力シミュと違い、Simitで書かれたプログラムは、CPUでもGPUでも、コードを移植する事なしに走らせる事が可能です。研究者達の実験では、Simitのコードは、GPU上では、CPUの4倍~20倍高速に動きました。」
GPUを使う場合、それ専用にコードを書き換える必要があり、スキル不足でコード書き換えが不可能な場合は、CPU onlyモードでシミュレーションする必要があり、ほとんどの人はそうしているのでしょうけど、Simitで書かれたコードは、プログラムの書き換え無しに、GPUでも使えるみたいなので、シミュレーションの実行性能を飛躍的に向上させることができます。
http://simit-lang.org/からダウンロードできるので、興味がある人は使ってみるといいかもしれません。自分は途中で挫折しましたが、元来プログラミングとか全くダメで、アメリカ留学中も、アセンブリ言語とC/C++のプログラミングに躓いて、専攻をcomputer/electrical engineering with material scienceから、ただの物理学部に変えなくてなならなかったという苦い経験をしています。