concurrentとparallelの違い説明会

いくつか例を挙げながらよく話題になるconcurrent(並行)とparallel(並列)の違いをn_sodaさんと話し合いました。 concurrentとparallelの違いが掘り下げられて改めて勉強になりました。
27
くまぎ @kumagi

concurrentは目的が複数あること。例えばマルチプロセスとか。それらが干渉しあうかどうかは関係ない。parallelは動く手が複数あること。例えばマルチコアとか別のマシンとか。同一のタスクを切り分けてるかどうかは関係ない。直交する概念なのでゆめゆめ混同なさらぬよう。

2012-03-02 19:29:45
SODA Noriyuki @n_soda

@kumagi あれ、直交しますかねえ。concurrent⊃parallelだと思ってました。英文Wikipediaのconcurrentの項でも、そう説明していると思います。

2012-03-02 19:35:06
くまぎ @kumagi

@n_soda その記法は「concurrentならば必ずparallel」という事を意味しませんか?

2012-03-02 19:36:00
SODA Noriyuki @n_soda

@kumagi あれ、逆でparallelならば必ずconcurrentのはずです。つまりconcurrentの方が広い概念(parallelを含む)わけで、記号も concurrent⊃parallel で正しいのでは?

2012-03-02 19:39:33
くまぎ @kumagi

@n_soda おっと、逆でしたね(集合の記法読み違えてた)「concurrentize(タスク分割などで切り分け)したのでparallel(複数の手が時間的に同時に動く)に実行可能」という言い方が出来なくなりませんか?

2012-03-02 19:44:23
SODA Noriyuki @n_soda

@kumagi いえ、できると思います。「concurrentize(論理的に並行動作するように書き直)したので、(物理的に複数のプロセッサを同時に割り当てられる状況では)parallel(物理的に同時に動く)に実行可能」ですので。

2012-03-02 19:47:13
くまぎ @kumagi

@n_soda 「parallel実行可能です」という言葉は「時刻的に全く同時に動いているという意味の並列です(つまり高速化します)」というニュアンスを含まないとややこしい、と主張するつもりでしたが、確かにそっちの但し書きなら意味は通りますね。

2012-03-02 20:00:14
くまぎ @kumagi

@n_soda 英文wikipediaは(computing) Involving more than one thread of computation. の事でしょうか。これは典型的な「目的が複数ある状態」だと思います。

2012-03-02 19:40:05
SODA Noriyuki @n_soda

@kumagi あれ、それはどのページでしょう。僕が考えてたのは http://t.co/ejTYRefx の方でした。

2012-03-02 19:44:01
SODA Noriyuki @n_soda

@kumagi parallelという言葉が「時刻的に全く同時に動く」という意味なのは全く賛成です(物理並列ですから)。たぶんその点に意見の相違はなくて、問題はcuncurrent⊃parallel vs concurrent⊥parallel って点ではないかと。

2012-03-02 20:05:47
くまぎ @kumagi

@n_soda はい、物理並列の点は同意します。そして、parallelでありながらconcurrentとは関係のない事例を示せば良いのでは、と。

2012-03-02 20:07:57
くまぎ @kumagi

@n_soda wikipedia引いたつもりがwikitionary引いてました… http://t.co/Y72sdzyj parallelでありながらconcurrentでない例として、例えばCPUのマルチイシューは如何でしょうか?

2012-03-02 19:50:09
SODA Noriyuki @n_soda

@kumagi マルチイシューって、たしかにソフトウェアの層ではconcurrentには書いてないわけですが、ハードウェア層で見るとconcurrentに動いていると言ってよいと思ってます。駄目ですかね?

2012-03-02 19:54:30
くまぎ @kumagi

@n_soda うーん、そういうところまで持ちだして、例えばhello world書いて「これがconcurrent computingだ」と言い張るのは苦しい気がします。それを言い出したらCPUの全ての挙動はconcurrentですし…。

2012-03-02 19:57:36
SODA Noriyuki @n_soda

@kumagi いや、もちろんhello worldのプログラムはconcurrent computingとは呼ばないと思いますよ。でも(スーパースカラなCPU上で実行した場合)それをparallel computingとも呼びませんよね。

2012-03-02 20:01:55
くまぎ @kumagi

@n_soda ILP(Instruction Level Prallelism)を抽出しての並列実行を行っている点に付いては誰も否定しないと思います。またパイプラインも立派な並列実行でしょう。そうやって動くように設計する事をconcurrentizeと呼ぶかが焦点ですかね…。

2012-03-02 20:11:18
SODA Noriyuki @n_soda

@kumagi そもそもハードウェア屋さんがconcurrentとparallelの違いを気にしているかどうかですね。気にしてない気がします。(常にparallelなので)

2012-03-02 20:13:39
くまぎ @kumagi

@n_soda そうですね、電子回路は「嫌でもparallelだからどうにかconcurrentizeしないとそれはバグ」という土俵に見えます。

2012-03-02 20:25:36
くまぎ @kumagi

@n_soda それとDLP(Data Level Parallelizm)もconcurrentである、と言い張るのも苦しいと思います。並行性制御して並列性を抽出する事で並列実行が可能な事を表す特性ですが、データそのものをconcurrentとは呼べないんじゃないかと。

2012-03-02 20:05:08
SODA Noriyuki @n_soda

@kumagi concurrent programmingという文脈では確かに苦しい印象もあるかなあ(concurrent programmingって、コードレベルで並列制御することを指すと思うので)。でも、TSSの上で完全に独立して動く2つのプロセス(続く)

2012-03-02 20:08:35
SODA Noriyuki @n_soda

@kumagi (続き)TSSの上で完全に独立して動く2つのプロセスを、concurrent動作しているとは言うと思うですよ。で、勿論この2つのプロセスはconcurrent programmingとは無縁なわけです(OSがconcurrent programmingされている)

2012-03-02 20:10:19
SODA Noriyuki @n_soda

@kumagi DLPをconcurrent programmingと呼ばないのは、そういう(TSS上の独立した2プロセスと同じ)意味でその通りですが、DLPで並列実行されている2つの処理はcuncurrentに実行されていると呼んでもいいんじゃないでしょうか。

2012-03-02 20:12:39
くまぎ @kumagi

@n_soda んー、そこですね。僕はそれは一つの目的の為に複数の手を動かしてるに過ぎないので、それぞれの手の前にあるタスクを以てして「マルチタスクだ」と呼んではいけないのでは?と思います。英語論文でもconcurrentという単語が出てくるのは衝突が自明な場合だけなのでは、と。

2012-03-02 20:21:21
くまぎ @kumagi

感覚で言うと、あまりに自明な並行性制御(例えばHadoop)をしてマルチコアで動いたなんてのを「concurrentほげほげ」と銘打って論文書いたら叩かれるだろうな。という。Hadoopも確かに内部はconcurrentizeして動いてるんだけどね。

2012-03-02 20:15:04
SODA Noriyuki @n_soda

@kumagi Hadoopみたいなのは、reduce部分以外、スレッド間の相互のやり取りがないし、reduceも自明な処理ですから、concurrent programming的には研究トピックにはなりえないとは思います。

2012-03-02 20:17:56