タグ付けされた質問 「parallel-computing」

複数の処理装置で同時に計算するアルゴリズムまたはプログラムに関する質問。同時または分散コンピューティングと混同しないでください!

4
MapReduceの目新しさは何ですか?
数年前、MapReduceは分散プログラミングの革命として歓迎されました。批評家もいましたが、概して熱狂的な誇大宣伝がありました。それも特許を取得しました![1] 名前が連想させるmapとreduce関数型プログラミングでは、私が読んだとき(ウィキペディア) マップステップ:マスターノードは入力を受け取り、それをより小さなサブ問題に分割し、ワーカーノードに配布します。ワーカーノードがこれを順番に繰り返して、マルチレベルツリー構造になります。ワーカーノードは小さな問題を処理し、その応答をマスターノードに返します。 削減ステップ:マスターノードはすべてのサブ問題への回答を収集し、それらを何らかの方法で組み合わせて出力を形成します。これは元々解決しようとしていた問題への回答です。 または[2] MAPの内部: [...] MAPは入力値を単語に分割します。[...] MAPは、入力の指定された各キー/値ペアを潜在的に多くの中間キー/値ペアに関連付けることを目的としています。 REDUCEの内部: [...] [REDUCE]は、命令集約(たとえば、削減)を実行します。多くの値を取得し、それらを単一の値に削減します。 私は仕方がありません。これは、Mergesortの意味での分割と征服であり、単純で単純です!それで、MapReduceに(概念的な)目新しさはどこかにありますか、それとも特定のシナリオで役立つ古いアイデアの新しい実装ですか? 米国特許7,650,331:「効率的な大規模データ処理のためのシステムおよび方法」(2010) GoogleのMapReduceプログラミングモデル— R.Lämmelによる再訪(2007)

6
分散コンピューティングと並列コンピューティング
私はよく人々が並列コンピューティングと分散コンピューティングについて話しているのを聞きますが、2の間に明確な境界はないという印象を受けており、人々はそれをかなり簡単に混同する傾向がありますが、それは非常に異なると信じています: 並列計算は、マルチスレッド、または単一のCPUを最大限に活用する方法により密接に結合されています。 分散コンピューティングとは、分割と征服の概念を指し、異なるマシンでサブタスクを実行し、結果をマージします。 ただし、ビッグデータ時代に踏み込んだため、その違いは確かに失われつつあり、今日のほとんどのシステムは並列コンピューティングと分散コンピューティングの組み合わせを使用しています。 私が日々の仕事で使用している例は、Map / Reduceパラダイムを備えたHadoopです。これは、異なるマシンでタスクを実行するワーカーを備えた明確な分散システムですが、並列コンピューティングで各マシンを最大限に活用します。 今日の世界でどのように区別するのか、そして並列コンピューティングについてまだ話せるのか、それとも明確な区別がないのかを理解するためのアドバイスをもらいたいと思います。私にとっては、分散コンピューティングは過去数年で大きく成長したように見えますが、並列コンピューティングは停滞しているようです。これはおそらく、並列化よりも計算の分散について多くの話を聞く理由を説明できるでしょう。

5
並列プログラミングと並行プログラミングの違いは?
並行プログラミングを見るとき、2つの用語、つまり並行と並列が一般的に使用されます。 また、一部のプログラミング言語は、Javaなどの並列プログラミングのサポートを明確に主張しています。 これは、並列プログラミングと並行プログラミングが実際に異なることを意味しますか?

2
Cのvoid型がempty / bottom型と類似していないのはなぜですか?
ウィキペディアと私が見つけた他のソースはvoid、空のタイプではなくユニットタイプとしてリストCのタイプを見つけました。void空の/下の型の定義によりよく適合するように思えるので、この混乱を見つけます。 void私が知る限り、値は存在しません。 戻り値の型がvoidの関数は、関数が何も返さないため、何らかの副作用しか実行できないことを指定します。 タイプのポインターvoid*は、他のすべてのポインタータイプのサブタイプです。また、void*C との間の変換は暗黙的です。 最後の点voidに、空の型であることの引数としてのメリットがあるかどうかはわかりvoid*ませんvoid。 一方、voidそれ自体は他のすべてのタイプのサブタイプではありません。これは、タイプがボトムタイプであるための要件であると言えます。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

3
並列化できないアルゴリズムはどれですか?
並列化が非常に困難なアルゴリズムはありますか、それとも研究はまだ活発ですか 並列計算のアルゴリズムや研究分野について知りたいと思いました。 私が検索したものはすべて、「並列」実装が完了しています。まだ調査されていない並列コンピューティングの分野で何らかの研究を行いたいだけです。

5
P完全性と並列計算
私は最近、二相性をチェックするアルゴリズムについて読んでいて、問題がP-completeであることを読みました。さらに、これの結果は、この問題、または任意のP-complete問題が効率的な並列アルゴリズムを持つ可能性が低いことです。 この最後の声明の背後にある直感は何ですか?

2
並列の複雑さの結果を絶えず多くのコアに縮小する方法は?
クラスNCによって与えられる「並列アルゴリズムによる効率的な解決」の複雑さの理論的見解を受け入れるのに問題がありました。 NCは、、プロセッサで時間並列アルゴリズムによって解決できる問題のクラスです。P (N )∈ O (N 、K)C 、K ∈ NO (ログcn )O(logc⁡n)O(\log^cn)p ( N )∈ O (Nk)p(n)∈O(nk)p(n) \in O(n^k)C 、K ∈ Nc,k∈Nc,k \in \mathbb{N} PRAMを想定できます。 私の問題は、これが「実際の」マシン、つまり有限量のプロセッサを備えたマシンについてあまり語っていないように見えることです。現在、プロセッサ上でプロセッサアルゴリズムを「効率的に」シミュレートできることが「わかっている」と言われています。のp ∈ NO (nk)O(nk)O(n^k)P ∈ Np∈Np \in \mathbb{N} ここで「効率的に」とはどういう意味ですか?これは民間伝承ですか、それともシミュレーションによって生じるオーバーヘッドを定量化する厳密な定理がありますか? 私が起こるのが怖いのは、シーケンシャルアルゴリズムと、プロセッサでシミュレートしたときに時間もかかる「効率的な」並列アルゴリズムを持つ問題があることです逐次アルゴリズムが漸近的に最適な場合、この粒度レベルの分析で期待できるのはすべてです)。この場合、私たちが見る限り、スピードアップはありません。実際、シミュレートされた並列アルゴリズムは、逐次アルゴリズムよりも遅い場合があります。つまり、私は境界(またはそのような結果がないことの宣言)よりも正確なステートメントを本当に探しています。p O (n k)O (nk)O(nk)O(n^k)pppO(nk)O(nk)O(n^k)OOO

3
今日の大規模な並列処理ユニットは、セルオートマトンを効率的に実行できますか?
最近のグラフィックカードで提供されている超並列計算ユニット(たとえばOpenCLでプログラム可能なもの)は、1Dセルラーオートマトン(または2Dセルラーオートマトン?) チップのメモリ内に収まる有限グリッドを選択した場合、このグリッドで定義されたセルオートマトンの1つの遷移が(準)一定時間で計算されることを期待できますか? 2Dセルラオートマトンは、1Dオートマトンよりもチップの異なる部分間の通信に必要な帯域幅が多いと思います。 FPGAプログラミングやカスタムチップの場合も同じ質問に興味があります。

3
ランダム読み取りの並列化はうまくいくようです-なぜですか?
次の非常に単純なコンピュータープログラムを検討してください。 for i = 1 to n: y[i] = x[p[i]] ここで、とは要素のバイト配列であり、は要素の単語配列です。ここで、は大きく、たとえば(したがって、データのごく一部のみがあらゆる種類のキャッシュメモリに収まります)。y n p n n n = 2 31xxxyyynnnpppnnnnnnn=231n=231n = 2^{31} がから間に一様に分布した乱数で構成されていると仮定します。1 nppp111nnn 最新のハードウェアの観点から見ると、これは次のことを意味するはずです。 読書安い(シーケンシャルリード)でありますp[i]p[i]p[i] 読ん非常に高価である(ランダム読み取り、ほぼすべてのあるキャッシュミスを読み込みます。私たちは、メインメモリから個々のバイトを取得する必要があります)x[p[i]]x[p[i]]x[p[i]] 書き込み安い(シーケンシャル書き込み)です。y[i]y[i]y[i] そして、これはまさに私が観察していることです。このプログラムは、シーケンシャルな読み取りと書き込みのみを行うプログラムと比較して非常に遅いです。すごい。 ここで疑問が生じます。このプログラムは、最新のマルチコアプラットフォームでどの程度並列化されますか? 私の仮説では、このプログラムはうまく並列化されません。結局のところ、ボトルネックはメインメモリです。単一のコアは、メインメモリからのデータを待機するだけで、すでにほとんどの時間を無駄にしています。 ただし、これは、この種の操作がボトルネックとなっているいくつかのアルゴリズムを試し始めたときに観察したものではありませんでした! 単純なforループをOpenMP並列forループに置き換えました(本質的に、範囲を小さな部分に分割し、これらの部分を異なるCPUコアで並列に実行します)。[1,n][1,n][1,n] ローエンドのコンピューターでは、スピードアップは確かに軽微でした。しかし、ハイエンドプラットフォームでは、優れた線形に近い高速化が得られたことに驚きました。いくつかの具体的な例(正確なタイミングは少しずれている可能性があり、多くのランダムな変動があります;これらは単なる簡単な実験でした): 2 x 4コアXeon(合計8コア):シングルスレッドバージョンと比較して、5〜8倍高速化。 2 x 6コアXeon(合計12コア):シングルスレッドバージョンと比較して8〜14倍高速化。 今、これは全く予想外でした。質問: 正確になぜプログラムの並列化のこの種のは、とてもよくありませんか?ハードウェアで何が起こりますか?(私の現在の推測は、これらの線に沿ったものです:異なるスレッドからのランダムな読み取りは「パイプライン化」されており、これらに対する回答を取得する平均レートは、単一のスレッドの場合よりもはるかに高くなります。) 速度を上げるには、複数のスレッドと複数のコアを使用する必要がありますか?メインメモリとCPUの間のインターフェイスで何らかのパイプライン処理が実際に行われる場合、シングルスレッドアプリケーションでは、メインメモリに、、...、コンピュータはメインメモリから関連するキャッシュラインのフェッチを開始できますか?これが原則的に可能である場合、実際にどのように達成しますか?x [ p [ i + 1 ] ]x[p[i]]x[p[i]]x[p[i]]x[p[i+1]]x[p[i+1]]x[p[i+1]] …

2
タスク完了時間の変動はメイクスパンにどのように影響しますか?
私たちは、タスクの大規模なコレクションを持っていることをみましょうと言うτ1,τ2,...,τnτ1,τ2,...,τn\tau_1, \tau_2, ..., \tau_nおよびプロセッサ(性能の点で)同一のコレクションはρ1,ρ2,...,ρmρ1,ρ2,...,ρm\rho_1, \rho_2, ..., \rho_m並列に完全に動作します。興味のあるシナリオでは、我々は仮定してもよいm≤nm≤nm \leq n。各τiτi\tau_iそれがプロセッサに割り当てられると完了するまでに時間/サイクルのいくつかの量をとりρjρj\rho_j、そして一度割り当てられると、完了するまで再割り当てすることはできません(プロセッサは常に割り当てられたタスクを常に完了します)。各仮定しよう時間を要する/サイクルはX 私は、ない、事前に知られているいくつかの離散確率分布から取られました。:この質問のために、私たちも、単純な分布と仮定することができますP (X I = 1 )=は、P (X I = 5 )= 1 / 2、およびすべてのX iのあるペアごとに独立を。したがって、μ iの = 3とστiτi\tau_iXiXiX_iP(Xi=1)=P(Xi=5)=1/2P(Xi=1)=P(Xi=5)=1/2P(X_i = 1) = P(X_i = 5) = 1/2XiXiX_iμi=3μi=3\mu_i = 3σ2=4σ2=4\sigma^2 = 4。 静的に、時間/サイクル0で、すべてのタスクがすべてのプロセッサに可能な限り均等に、一様にランダムに割り当てられるとします。ので、各プロセッサρjρj\rho_j割り当てられているn/mn/mn/m(私達はちょうど同様に想定することができるタスクをm|nm|nm | nの質問の目的のために)。メイクスパンを、割り当てられた作業を完了するための最後のプロセッサρ∗ρ∗\rho^*が割り当てられた作業を終了する時間/サイクルと呼びます。最初の質問: mmm、nnn、XiXiX_iの関数として、makespan MMM何ですか?具体的には、E[M]E[M]E[M]何ですか?Var[M]Var[M]Var[M]? 2番目の質問: 仮定、およびすべてのX iはそう、ペアごとに独立しているμ iが = 3及びσ …

2
並列計算とクラスNCに関するいくつかの質問
これらの2つのトピックに関するいくつかの関連する質問があります。 まず、ほとんどの複雑なテキストは、クラスのみを光沢化します。研究をより深くカバーする優れたリソースはありますか?たとえば、以下の私の質問のすべてを議論するもの。また、は並列化にリンクしているため、かなりの量の研究が行われていると想定していますが、間違っている可能性があります。複雑な動物園のセクションはあまり役に立ちません。N CN CNC\mathbb{NC}N CNC\mathbb{NC} 第二に、セミグループ操作に一定の時間がかかると仮定した場合、セミグループの計算はます。しかし、無制限の整数の場合のように、操作に一定の時間がかからない場合はどうでしょうか?既知の -complete問題はありますか?N C iN C1NC1\mathbb{NC}^1N C私NCi\mathbb{NC}^i 3番目に、、ログスペースアルゴリズムを並列バージョンに変換するアルゴリズムはありますか?L ⊆ N C2L⊆NC2\mathbb{L} \subseteq \mathbb{NC}^2 第四に、ほとんどの人はと同じ方法でを仮定しているように聞こえます。この背後にある直感は何ですか?P ≠ N PN C ≠ PNC≠P\mathbb{NC} \ne \mathbb{P}P ≠ N PP≠NP\mathbb{P} \ne \mathbb{NP} 5番目に、私が読んだすべてのテキストはクラスに言及していますが、それに含まれる問題の例は示していません。いずれかがあります?R N CRNC\mathbb{RNC} 最後に、この回答はサブリニアパラレル実行時間に関する問題に言及しています。これらの問題の例は何ですか?ないことが知られている並列アルゴリズムを含む他の複雑度クラスはありますか?N CPP\mathbb{P}N CNC\mathbb{NC}


1
GPGPUがある場合、なぜSIMDを使用するのですか?
この質問はStack ExchangeのCSの部分でより適切に処理されると思いました。CUDAやOpenCLなどの言語を使用するGPGPUができたので、マルチメディアSIMD拡張機能(SSE / AVX / NEON)はまだ目的を果たしていますか? 最近、SSE命令を使用してソートネットワークを加速する方法についての記事を読みました。私はこれはかなりきちんとしていると思いましたが、私のcomp arch教授に言ったとき、彼は笑い、GPUで同様のコードを実行するとSIMDバージョンを破壊すると言った。SSEは非常にシンプルで、GPUはより多くの並列処理を備えた大規模で複雑なアクセラレーターであるため、これは疑いありませんが、マルチメディアSIMD拡張機能がGPUを使用するよりも便利なシナリオはたくさんありますか? GPGPUがSIMDを冗長にする場合、インテルはなぜSIMDサポートを増やすのですか?SSEは128ビットでしたが、AVXでは256ビットになり、来年は512ビットになります。GPGPUがデータ並列処理を備えたより優れた処理コードである場合、インテルはなぜこれらのSIMD拡張機能をプッシュするのですか?それらは、同等のリソース(研究と領域)をより大きなキャッシュと分岐予測子に入れることができ、それによりシリアルパフォーマンスが向上します。 GPGPUではなくSIMDを使用する理由

3
マルチコアSATソルバー
私は25k節5k変数SAT問題を解決しようとしています。1時間(precosat)実行されていて、後でより大きなものを解決したいので、マルチコアSAT-Solverを探しています。 SAT-Solversが多いように思えるので、私はかなり迷っています。 誰かが私の場合に最適なものを指摘してもらえますか? また、誰かがおおよその時間を教えてくれれば幸いです(可能であれば)。

3
逐次乗算よりも効率的な並列行列指数アルゴリズムはありますか?
実数の行列の累乗(正の整数)を見つけるために1つ必要です。効率的な行列乗算アルゴリズムはたくさんありますが(たとえば、一部の並列アルゴリズムはCannonのDNSです)、行列の能力を正確に見つけることを目的としたアルゴリズムであり、行列乗算の逐次実行よりも効率的ですか?特に並列アルゴリズムに興味があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.