タグ付けされた質問 「parallelism」

8
「同時」実行と「並列」実行の違いは?
同時実行と並列実行という用語の違いは何ですか?私はその違いを理解することができませんでした。 このタグは、2つのプロセスを同時に実行する方法として同時実行性を定義しますが、並列処理はまったく同じもの、つまり、別々のプロセッサで実行される可能性のある別々のスレッドまたはプロセスであると考えました。 また、非同期I / Oのようなものを検討する場合、並行性と並列性のどちらを扱いますか?

10
マルチスレッドが難しい理由を説明する方法
私はかなり良いプログラマーであり、上司もかなり良いプログラマーです。彼はマルチスレッドなどのいくつかのタスクを過小評価しているように見えますが、それがどれほど難しいかはわかりません(いくつかのスレッドを実行し、すべてが完了するのを待ってから結果を返す以上のことは非常に難しいと思います)。 デッドロックや競合状態を心配し始めた瞬間、私はそれを非常に難しいと感じますが、上司はこれを感謝していないようです-私は彼がこれに遭遇したことはないと思います。ロックをたたくだけで、態度はほぼ変わりません。 それでは、どうやって彼を紹介したり、なぜ彼が並行性、並列処理、マルチスレッドの複雑さを過小評価しているのかを説明できますか?または多分私は間違っていますか? 編集:彼がやったことのほんの少し-リストをループし、そのリストの各アイテムに対して、そのアイテムの情報に基づいてデータベース更新コマンドを実行するスレッドを作成します。一度に実行されるスレッドの数を彼がどのように制御したかはわかりません。実行中のスレッドが多すぎる場合(キューはセマフォを使用しなかった場合)、キューに追加する必要があります。

11
並行性:設計にどのようにアプローチし、実装をデバッグしますか?
私は数年前から並行システムを開発してきましたが、正式なトレーニングが不足している(つまり学位はない)にもかかわらず、このテーマをかなりよく理解しています。少なくとも最近話題になっているいくつかの新しい言語があります。これらは、ErlangやGoなど、並行処理を容易にするように設計されています。並行性に対する彼らのアプローチは、システムをスケーラブルにし、複数のコア/プロセッサ/マシンを活用する方法に関する私自身の経験を反映しているようです。 しかし、あなたが何をしようとしているのかを視覚化し、少なくとも元のビジョンに近いことを確認するのに役立つツールはほとんどないことがわかります。並行コードのデバッグは、並行処理用に設計されていない言語(C / C ++、C#、Javaなど)では悪夢のようです。特に、開発環境の1つのシステムで簡単に発生する状態を再現することはほとんど不可能です。 それでは、並行性と並列処理に対処するシステムを設計するためのアプローチは何ですか?例: 並行処理できるものとシーケンシャルにする必要があるものをどのように把握しますか? エラー状態を再現し、アプリケーションの実行中に何が起こっているかを表示するにはどうすればよいですか? アプリケーションの異なる並行部分間の相互作用をどのように視覚化しますか? これらのいくつかについては私自身の回答がありますが、もう少し学びたいと思います。 編集 これまでのところ、多くの良い入力があります。リンクされている記事の多くは非常に優れており、私はすでにそれらのいくつかを読みました。 並行プログラミングでの私の個人的な経験から、シーケンシャルプログラミングとは異なる考え方が必要だと思います。精神的な格差は、おそらくオブジェクト指向プログラミングと手続き型プログラミングの違いと同じくらい広いでしょう。この一連の質問では、回答に体系的にアプローチするために必要な思考プロセス(理論)にもっと焦点を当ててほしい。より具体的な回答を提供する場合、例を提供するのに役立ちます-あなたが個人的に経験したこと。 バウンティの目標 何をすべきか教えてはいけません。私はすでにそれをコントロールしています。あなたが何をするか教えてください。これらの問題の解決方法を教えてください。

5
オブジェクト指向プログラミングのパラダイムは、反モジュラーおよび反並列であるため、時代遅れですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 CMUの教授であるRobert Harperが投稿した論争の的となっている記事Teaching FPを新入生に読みました。彼は、CMUが「最新のCSカリキュラムには適さない」ため、入門コースでオブジェクト指向プログラミングを教えることはもはやないと主張しました。 そして彼はそれを主張した: オブジェクト指向プログラミングは、その性質上、反モジュラーかつ反平行であるため、導入カリキュラムから完全に排除されます。 OOPを反モジュラーおよび反並列と見なす理由

1
一意性タイプを使用して安全な並列処理を実装する
しばらくの間、純粋な関数型言語のモナドの代替として、一意性タイプに興味がありました。残念ながら、これは一種のCS研究の難解な分野であり、ユニークなタイプのプログラミングに関するオンラインリソースはほとんどありません。 参照(「ボックス」)や配列などのステートフルデータ構造を実装するために一意性タイプがどのように使用されるかは明らかですが、他の一般的なステートフルデータ構造を実装する方法を回避します。 たとえば、一意の型によるロックを実装することは可能ですか?一意性タイプを使用して、スレッド間で可変デー​​タを共有できますか?一意の型を使用して同期プリミティブ(ミューテックスなど)を構築することは可能ですか、またはメッセージの受け渡しは必要ですか?

3
並列処理は並行性を意味しますが、その逆ではありませんか?
並列処理と並行処理は異なるものだとよく読みます。非常に多くの場合、回答者/コメント者は、まったく異なる2つのものであると書いているだけです。しかし、私の見解では、それらは関連していますが、その点について明確にしたいと思います。 たとえば、マルチコアCPUを使用していて、計算をx個の小さな計算(たとえば、fork / joinを使用)に分割し、それぞれを独自のスレッドで実行する場合、並列計算を実行するプログラムがあります(なぜならおそらく、任意の時点で複数のスレッドが複数のコア上で実行しようとして)されていると同時右のもの? たとえば、単にJavaを使用して、イベントディスパッチスレッドでUIイベントと再描画を処理し、自分で作成した唯一のスレッドを実行している場合、並行プログラム(EDT + GCスレッド+メインスレッド)がありますなど)が、並列ではありません。 これが正しいかどうか、および並列処理(「単一だがマルチコア」システムで)が常に並行性を意味するかどうかを知りたいのですが。 また、マルチスレッドプログラムはマルチコアCPUで実行されていますが、異なるスレッドがまったく異なる計算を実行している場合、「並列処理」を使用していると見なされますか?

1
ベストプラクティスはポーリングしないことですが、スレッドがwait()を呼び出したときに内部でポーリングが発生しないのですか?
別のスレッドがタスクを終了したときにチェックしたいスレッドがあるとします。他のスレッドが終了したという通知を受け取るまでこのスレッドを待機させるwait()タイプの関数を呼び出す必要があることを読みました。そして、これは私たちが高価なポーリングを実行していないことを意味するため、これは良いことです。 しかし、とにかく内部で低レベルでポーリングが行われていませんか?つまり、スレッドをwait()にすると、カーネルは他のスレッドがいつ終了するかをチェックして、最初のスレッドに通知できるようにポーリングを実行しますか? 私はここで何かを見逃していると思いますが、誰かが私を啓発できますか?

5
暗黙的な並列処理/同時実行性がそれほど普及していないのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 暗黙的な並列処理^は、多くのプログラマーから大きな負担を取り除き、コンピューターに置くことができます。だから...なぜそれが現在それほど普及していないのですか? ^暗黙的な並列処理とは、スレッドなどを使用してこの作業を行う必要のあるプログラマーの代わりに、コンピューターが一度に複数のことを行う方法を把握できるようにすることです。

2
並列プログラムでエラーを処理する最良の方法は何でしょうか?
並列アルゴリズムがドアをノックしているので、エラー処理について考える良い機会かもしれません。 そのため、最初はエラーコードがありました。吸いました。それらを無視するのは自由だったので、遅れて失敗してデバッグしにくいコードを生成することができました。 その後、例外が発生しました。それらは一度発生すると無視できなくなり、ほとんどの人(Joelを除く)は彼らを好むようになりました。 そして今、並列コードを支援するライブラリが手に入りました。問題は、非並列コードの場合ほど簡単に並列コードの例外を処理できないことです。タスクを非同期で起動し、例外をスローした場合、そのタスクを過ぎてアンワインドするスタックトレースはありません。できるのは、そのようなオブジェクトがある場合、それをキャプチャしてタスクオブジェクトに登録することです。ただし、例外の主な強みは無効になります:それらを確認する必要があり、追加の労力なしで無視できますが、シングルスレッドコードでは例外は適切なアクションを必ずトリガーします(プログラムを終了することを意味する場合でも)。 言語実装またはライブラリは、並列コードのエラーをどのようにサポートする必要がありますか?

2
なぜプログラマーは、並列処理のためにC / POSIXを置き換えるプログラミングモデルを定義するのですか?
新しいコンピューターアーキテクチャのプロバイダーは、定期的に新しいプログラミングモデル(最近のGPGPU向けのCUDA / OpenCLなど)の導入を試み、プラットフォームの並列処理の制御インターフェイスとしてC / POSIXを置き換えます。(Poss&Koening、AM3:2015年のメニーコア向けハードウェアUnixアクセラレータに向けて) なぜアーキテクチャ設計者は、並列プログラミングのためにC / POSIXに取って代わるために新しいプログラミングモデルを設計しようとするのですか?C / POSIXはマルチプロセッサにあまり適していませんか、それともC / POSIXの最初の作者はC / POSIX設計時に並列計算を必要としていませんでしたか?それとも、プログラマーがC / POSIXが提供できるよりも多くの機能を必要としているため、CUDA / OpenCLなどの新しい設計に頼っていますか?

4
Javaの主な焦点は何ですか?新機能を入手するのになぜこんなに時間がかかるのですか?
私は、ラムダ式、拡張メソッド、新しいストリームAPIなど、JDK8の新機能を調査しています。 明らかに、これらの機能のどれもプログラミングの世界で新しいものではないので、なぜ今までこれらすべての機能がJavaで利用されているのか不思議に思いました。 Lisp(1958)、SML(1973)、Haskell(1990)、Python(1991)、JavaScript(1994)、Ruby(1995)、Scala(2003)、C#(2007)、およびLispの55年後にラムダ式があり、 Java(2013)では実質的に他のすべての人。 そして、私はSIC(1996)のストリームについて読みました。 なんで今なんだろう?証拠は、他の言語との競争が動機ではないことを示唆しています。 このリリースのJavaの優れた新機能はすべて、並列処理の実装の副産物にすぎないようです。ラムダは、並列アルゴリズムの記述を簡単にするためにあり、ラムダ式が必要とする変更などをサポートするためにそれらを必要とするため、拡張メソッドがあります。 したがって、私の質問は、このJavaの次のリリースのメイントピックが実際に並列処理であることを安全に確認できるでしょうか。それとも、今までJavaで本の中で最も古いトリックが登場した他の理由を正当化できるでしょうか。

1
プロローグ並列処理
効率を向上させるために「プログラム」を機能的に分解できるプロローグインタープリターはありますか? 並列処理によってCに近い速度に到達するプロローグインタープリター(典型的なCプログラマーが「見ることができない」種類)についての研究があることは知っています。誰かがこのトピックについてもっと知っていますか?

6
ソフトウェアを開発するとき、いつ並行セクションを考えたり設計したりしますか?
最適化が早すぎないという原則に従って、ソフトウェアの設計/開発のどの時点で、同時実行の機会について考え始めますか? シングルスレッドのアプリケーションを作成し、プロファイリングを通じて、並列実行の候補となるセクションを特定することが1つの戦略となることはよく想像できます。私が少し見てきたもう1つの戦略は、タスクのグループごとにソフトウェアを検討し、独立したタスクを並列化することです。 もちろん、尋ねる理由の1つは、最後まで待ってソフトウェアをリファクタリングするだけで同時に動作する場合、可能な限り最悪の方法で構造化し、大きなタスクを抱えることになるということです。 設計で並列化を検討するときに、どのような経験が役立ちましたか?

2
Dragon Bookのアプローチに従う並列化コンパイラーを知っている人はいますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 コンパイラ:原理、技術、用具、アホら平行(第2版第11章)のために最適化するためのアプローチを記載します。そのアプローチに従う既存のコンパイラを知っている人はいますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.