Entries

スポンサーサイト

カテゴリ:スポンサー広告
更新日:--------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

FPGA超並列時代に向けて!? - 関数型プログラミングを学ぶわけ

カテゴリ:システム考
更新日:2013-04-22
私の頭はループ脳、って書いた。

> メソッドチェーンとループ脳 - fintopo

ループってのは、順次処理の繰り返しってことなんだよね。つまりプログラマは、添字の順番に処理されることを期待している。

PASCALのfor文にはdowntoという構文がある。通常はカウントアップでfor文を回すんだけど、カウントダウンで回したい時があるんだよね。これなんかまさに順番が重要ってことを示している。

だけど、関数型プログラミングってのは、処理の順番を気にしない。・・・まぁ、原則的には。

数学的な関数の適用というのは、集合の各要素に対して個別に関数処理をすることで、順番なんて関係ないんだよね。まぁ、遅延評価とか、末尾再帰とか、現状のコンピュータ上で実行するための話ってのは、どうしても出てくるわけだけれども。

そう、問題は現状のCPUのアーキテクチャにある。マシン語レベルで順次処理と条件分岐が大前提としてある。ループにしても、分かりやすくするために構造化しただけなんだよね。

だから、関数型プログラミングと言っても、メリットが分かりにくい。だけど、もしかしたら、これが変わるかもしれない。

> FPGA に夢を見る。 - 言語ゲーム

プログラミング言語が必要なのは、コンピュータには人間の言葉が分からないからだ。コンピュータは順番に単純な命令を実行する事しか出来ないから、大きな問題を小さく分けて、さらに順番に並べなければいけない。そう言われてみんな育ってきた物だから、プログラムはそのように書かれる。しかし、少なくとも順番に並べるという部分に関しては事実と異なる。最近のコンピュータは複数の命令を同時に実行する。しかし私達はあまりにも長い間逐次的なプログラムに慣れてきた物だから、並列プログラムを上手に書く技術を持っておらず、ハードウェアの進歩に追いつけないでいる。

これが早まった最適化。つまり、命令を順番に実行という性質は、ある時代のある特定の制約に過ぎないのに、プログラミング言語全体がそっちに最適化してしまって、制約がなくなってしまっても急には元に戻れない。CPU コアが二つとか四つならまだしも、100 以上に増えるであろう近い将来、この最適化が足かせになってしまうのは間違いない。

ここまでは誰もが思う所だろう。しかし現実問題そんなに差し迫った感じも受けないと思う。100コアが来年にも出るわけが無いし、スーパーコンピュータや巨大データセンタを使ってる訳でも無いそこらのエンジニアにとっては関係の無い話。しかしここへ来ての FPGA ブーム。FPGA って一万円ちょっとで手に入る超並列マシンそのものでは無いか。

並列処理のプログラミングって、昔からテーマとしてあるけど、なかなか厄介なんだよね。

CPUは、単一コアではスペックを上げるのが難しくなって、マルチコア化している。だけど、現状のプログラムでは、数コア以上に増やしてもスペックアップの効果は薄いと言われている。

マルチコアというと、PS3のCellを思い出すけど、複数のSPEを使い切れなかったと聞く。PS4はCellではないらしい。にもかかわらず、GPGPUなんて話もある。使えるの、そんなの?

マルチコア化に伴う並列処理化の要求は高まってるんだけど、根本的な考え方(プログラム言語)が並列処理に向いてないんで、なかなかうまく行かない。

だけど、安価に超並列アーキテクチャが実現できるとしたら?うまく使えない、なんて言ってていいのか?

> Kazunori Sato - Google+

FPGAのしくみって、昔のコネクションマシンをほうふつとさせる。ちょびっとのRAMを持つ小さなプロセッサが何万個も並列に動くやつ。HDLってある意味、超並列機のためのデータフロー言語だなぁ。。って思ってたら同じこと考えてる人がいた。今はFPGAにとってはTK80時代だけど、そのうちFPGAパソコンとかFPGAクラウドができるんじゃないかな。。とかね。

まだ、TK80時代らしい。だけど、コンピュータの時代は一気に変わる。その時に、ついていけるかどうか?

少なくとも、ループ脳、順次脳では、ついていくのは難しいと思う。でも、関数型プログラミングは、原則的には処理の順番は関係ないのだから、そういう考え方に慣れておくのはメリットもあるだろう。

> 2032 年の FPGA: 20年後の FPGA の未来像

Tabula 社社長兼 CTO の Steve Teig 氏は、次のように断言しました。「FPGA のプログラミングに関して言えば、RTL は適していません。しかし、C はさらに問題があります。直列実行から並列実行への移行でさえも低レベルすぎます。Haskell のような関数型言語の方がましですが、ほとんどの関数型言語がベースとしている数学的抽象化であるラムダ計算も最適な抽象化とは思えません」

ま、こんな話もあるんで、まだまだ変わるかもしれないけれど。
スポンサーサイト

Appendix

プロフィール

いむら@fintopo いむら@fintopo

フリーのシステムエンジニア兼プログラマです。趣味はガーデニングとカメラ。2017年4月にα7IIを買いました。フルサイズ一眼初心者です。

このページのQRコード

季節暦

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。