ブラックボックスでの並行プログラミング

約2か月前、Intelによる最初の実験的なロシア語オンラインセミナー「 Intel Parallel Studio workflow 」が開催されました。 このセミナーでは、プログラムの原理を完全に理解していなくても、C ++コードの並列化と最適化の実装に役立つ魔法のツールがあることを示す試みが行われました。 このアプローチはしばしば批判されることを知っています。 また、ウェビナーに表示されているアクションが間違っていることを思い出させてくれたため、私はこの投稿に追い込まれました。







デバッグツールを使用するサポーターと反対者(「デバッガー」)の間にも、同様の不一致が存在していました。 反対者は、デバッガーは誤った方法論の結果であり、デバッガーのユーザーは単に文盲であると主張しました。 彼らの主な論点は、デバッグツールを使用すると、アルゴリズムを考え直して書き直し、小さな関数に分解することなく、試行錯誤によるコード記述を促進し、エラーの余地がないように簡潔かつ単純にすることでした。 デバッグツールの反対者はほとんどいないため、そのような論争を聞いたことがない人も多いでしょう。 さて、今、私たちは新しいラウンドの始まりを目撃しています。



現在、プログラムの並列化の問題に対する2つのアプローチが形成され、議論されています。 最初の支持者は、最小限の手直しでプログラムを並列化できる手段を手に入れたいと考えています。 これらは、一般ユーザーのテーブルに表示されるマルチコアシステムの機能にソリューションを適合させたいと考えている実践者です。 2番目は、並列化のさまざまな理論、並列プログラミング言語、および並列コードがどのように機能するかを明確に理解する必要があるという事実について話します。 実際、彼らの意見では、そうでなければ、その正確さと有効性を達成することは不可能です。







私は、OpenMPディレクティブを使用してデバッグするか実験するかにかかわらず、意識的なアクションを必要とする2番目のグループに同意します。 このアプローチは、正しいコードが実行可能なコードとして認識されるのではなく、多くのテストで正しく機能するコードであるため、信頼性の低いプログラムの作成によって引き起こされます。 これは間違いなく悪いことです。 しかし、私の魂で私は完全に最初のグループをサポートします。



私は開業医です。 そして私は、長い間、実際のプログラムがどのように機能するかを誰も知らないと思います。 そして、デバッグされたプログラムまたは並列化されたプログラムが開発者に明確であるかどうかを言うのは意味がありません。 産業用ソフトウェア開発について話している場合、それは常に理解できません。 「ブラックボックス理論」(最初のグループ)の反対者は、主に、並列性の極端な効率が重要である狭い問題の解決に関わる学界、教師、または人々の代表者です。 たとえば、数値プログラミング。 通常、彼らは何かを計算するプログラムのプロトタイプを扱います。その中で、彼らは精通しており、それぞれの特定のケースでどの並列化アルゴリズムを使用すべきかを知っています。 プログラムは小さく、他の言語で読むことも、必要に応じて書き換えることもできます。 間違いは、彼らが経験を大規模なソフトウェアプロジェクトに拡大しようとしていることです。



2番目のグループ(理論家、またはブラックボックスの反対者)との類推。 懐中電灯と虫眼鏡を持っている人。絵で覆われた美しい胸を興味を持って勉強しており、さらに美しく使いやすくする方法を提供します。



長年または数十年にわたって開発されてきた大規模プロジェクトの開発に携わる本物のプログラマーは、まったく異なる状況にあります。 おそらく、彼はメガバイトのコードがすでに書かれていて、さまざまなアーキテクチャソリューションの歴史全体を知らなかったときにプロジェクトに参加しました。 おそらく彼は誰にも尋ねることさえありません。 彼はソースコードを読む時間を持っていなかったので、そんなに時間がなかったでしょう。 彼は仕事の特定のサイトで働いており、開発チームに参加するずっと前に書かれたアルゴリズムの数を想像できないかもしれませんが、使用することを余儀なくされています。



最初のグループ(実践者、またはブラックボックス支持者)との類推。 巨大な迷路の中で懐中電灯と虫眼鏡を持った男。 彼は壁のフレスコ画を注意深く調べることができますが、ランタンのビームは反対側の壁を強調することはできず、全体像を作成することなく、迷路の廊下を断片のみで見ることができます。



並列プログラミングへのアプローチは、ブラックボックスを使った実験として、良い方法論とは考えていません。 ただし、既存のソフトウェアパッケージとアルゴリズムの構造を完全に理解することは、何もしない、または提供しないよりはましです。 残念ながら、これは機能しません。 多くのソフトウェアソリューションの複雑さは、個人や彼らと連携するチームの意識の​​可能性をも超えています。 何らかの方法で並列化とデバッグの問題を解決する特別なツールを使用することが唯一の選択肢です。 ここでは、非常に効果的ではあるが小規模な並列プログラムを開発した経験は当てはまりません。



プロファイラーは、アルゴリズムを変更するための高度な方法を提供しません。 ただし、コードの最も重要なセクションを並列化することにより、プログラムを少なくとも部分的に高速化する方法を示します。 並列デバッガーまたはコードアナライザーは、並列プログラムの正確性を証明しません。 しかし、彼らはあなたが方向の1つで懐中電灯を照らすのを忘れて、それによって彼の視線から重要な要素を見逃したプログラマをヘッジすることを可能にします。



大規模なソフトウェアシステムで実際に動作する唯一の方法として、十分に理解されているコードだけでなくブラックボックスも許可し、並列化するツールの使用をサポートしています。



All Articles