計算科学

科学的問題を解決するためにコンピュータを使用する科学者のためのQ&A

7
フロップカウントによるアルゴリズム分析は時代遅れですか?
私の数値解析コースでは、問題のサイズに対して、必要な浮動小数点演算(フロップ)の数を数えることにより、アルゴリズムの効率を分析することを学びました。たとえば、数値線形代数に関するTrefethen&Bauのテキストには、フロップカウントの3Dに見える写真さえあります。 キャッシュにないものをフェッチするためのメモリレイテンシは、フロップのコストよりもはるかに大きいため、「フロップは無料」と言うのが流行しています。しかし、少なくとも数値解析コースでは、フロップを数えることを生徒に教えています。代わりに、メモリアクセスをカウントするように教える必要がありますか?新しい教科書を書く必要がありますか?または、メモリアクセスがマシン固有であり、時間を費やすことができませんか?フロップまたはメモリアクセスがボトルネックであるかどうかに関して、長期的な傾向はどうなりますか? 注:以下の回答のいくつかは、「実装を強烈に書き換えて、数フロップを節約するか、キャッシュのパフォーマンスを向上させるべきですか?」しかし、私が求めているのは、「算術演算またはメモリアクセスの観点からアルゴリズムの複雑さを推定する方が便利ですか?」という行に沿ったものです。

9
関数型プログラミングと科学計算
これがあいまいな質問であればおIびしますが、ここに行きます: 過去数年間、関数型プログラミングはソフトウェアエンジニアリングコミュニティで多くの注目を集めています。多くがScalaやHaskellなどの言語の使用を開始し、他のプログラミング言語やパラダイムよりも成功していると主張しています。私の質問は、高性能コンピューティング/科学コンピューティングの専門家として、関数型プログラミングに興味を持つべきですか?このミニ革命に参加すべきでしょうか? SciComp作業領域における関数型プログラミングの長所と短所は何ですか?

4
Fortranを高速化するものは何ですか?
Fortranは数値プログラミングにおいて特別な場所です。確かに他の言語で優れた高速のソフトウェアを作成できますが、Fortranはその時代にもかかわらず非常に優れたパフォーマンスを維持します。さらに、Fortranで高速プログラムを作成するのが簡単です。私はC ++で高速プログラムを作成しましたが、ポインターエイリアシングのようなことに注意する必要があります。したがって、これには理由があり、非常に技術的な理由が必要です。コンパイラがさらに最適化できるからでしょうか?技術的な詳細を知りたいので、別の言語を使用する場合はこれらのことを考慮に入れることができます。 たとえば、私は知っている-またはそのように考えている-1つのことは、標準ではポインターが常にメモリ内で連続していることを指定しているため、メモリアクセスが高速になることを意味します。コンパイラにフラグを付けることで、C ++でこれを行うことができると思います。このように、Fortranが優れていることを知るのに役立ちます。したがって、別の言語を使用している場合、これを模倣できます。

18
アルゴリズム/ルーチンをテストするための良いデータセット/テスト問題はどこで入手できますか?
計算作業で使用しようとしているソフトウェアの品質を評価する際に(それがあなたが書いたものであるか、缶詰のパッケージであるかを問わず)、標準のデータセットまたは問題でどの程度うまく機能するかを確認することはしばしば良い考えです。計算ルーチンを検証するためのこれらのテストはどこで入手できますか? (回答ごとに1つのウェブサイト/本をお願いします。)

4
数値誤差の科学的基準
私の研究分野では、実験誤差の仕様は一般に受け入れられており、それらを提供できない出版物は非常に批判されています。同時に、多くの場合、疑わしい数値手法が機能しているにもかかわらず、数値計算の結果が数値誤差の説明なしで提供されることがよくあります。数値計算などの離散化や有限精度に起因する誤差について話しています。確かに、これらの誤差の推定値は、流体力学方程式の場合のように、必ずしも簡単に取得できるわけではありませんが、数値誤差の推定値の仕様は、実験結果の場合と同じくらい標準的である必要があります。したがって、私の質問:

8
コードを出版物にリンクする方法
学術コンピューティングの学術論文(および今日では他の多くの分野)には、通常、その論文専用に記述された、または論文の結果を得るために使用されたコードまたはソフトウェアパッケージ全体が含まれます。論文の読者がコードにアクセスできるようにする最善の方法は何ですか?私の現在のアプローチは、Githubリポジトリへのリンクを(特定のバージョンタグとともに)論文または引用に入れることです。

14
科学データとグラフの公開に推奨されるソフトウェアとワークフローはどれですか?
いくつかのデータポイントの単純なプロットから、詳細なスタイル、数学的な組版、「プロ品質」を備えた出版物レベルのグラフィックの作成まで、どのソフトウェアが優れたワークフローを提供しますか? これは、Davidの質問に関連しています(どの属性がフィギュアをプロフェッショナルな品質にしますか?)。しかし、焦点は属性ではなく、そこに到達するためのソフトウェアまたは一般的なワークフローです。Gnuplot、Origin、Matplotlib、TikZ / PGFplot、Qtiplotなどのプログラムで表面的な経験がありますが、データ分析と素敵な数値を同時に行うのはかなり難しいようです。 これを可能にするソフトウェアはありますか、それともパッケージの1つをさらに掘り下げる必要がありますか? 編集:私の現在のワークフローはさまざまなコンポーネントを組み合わせたものであり、多少なりとも連携しますが、全体としてはあまり効率的ではなく、これは大学の研究室の多くの科学者にとって典型的だと思います。通常、実験から出版物までのチェーンは次のとおりです。 実験データを取得します(通常はASCII形式ですが、ヘッダー、コメント、列数などのレイアウトが異なります) Origin、Gnuplot、または20年前に書かれた難解なプロットプログラムで何も問題がなかったかどうかを確認するためのデータのクイックプロット。 データのより詳細な分析:バックグラウンドの寄与の減算、依存関係と相関の分析、理論モデルとの適合。多くの科学者がこのタスクにOriginを使用していますが、MatlabやPython / Scipy / Numpyの使用が増えています。 専門的な人物を作成するには、ジャーナルのガイドラインに合わせて調整し、数学的な組版と一般的な編集を行います。現時点ではOriginを使用していますが、いくつかの欠点があります(ちょうど0.5ptの線幅を取得しようとすると、不可能です)。図の結合/研磨には、主にAdobe Illustratorを使用します。これは、PDFドキュメントのim- /エクスポートを適切に処理できるためです。ただし、図ごとに2つのステップを実行する必要はありません。 最後にどのように見えるかの例を追加しました(これはほとんど手作業で変更することによって作成されているため、すべてが苦痛であり、すべての要素の線幅を設定するためのインターフェースを提供するものは素晴らしいでしょう):

3
並列ODEメソッドの最新技術とは何ですか?
現在、ODE統合のための並列メソッドを検討しています。さまざまなアプローチを説明する新しい文献や古い文献がたくさんありますが、最近の調査や一般的なトピックを説明する概要記事は見つかりませんでした。 Burrageによる本[1]がありますが、それはほぼ20年前であり、したがって、パラリアルアルゴリズムのようなより現代的なアイデアの多くをカバーしていません。 [1] K.バラージ、常微分方程式の並列法および逐次法、クラレンドンプレス、オックスフォード、1995

2
除算が他の算術演算よりもはるかに複雑なのはなぜですか?
最近、欠けているチップ(ARM Cortex-A8)で整数除算が必要なケースに遭遇しました。なぜそうなのかを調査しようとすると、一般的に、ほとんどすべての整数(または固定小数点)アーキテクチャで、除算が加算、減算、または乗算よりもはるかに多くのサイクルを要することがわかりました。これはなぜですか?他のすべての2層AND-ORロジックでは表現できないのですか?


5
武器の研究に貢献せずにSciCompでキャリアを積むことは可能ですか?
私は数値法に関する国際会議(ICIAM2019)に参加しており、武器研究に直接関係するアプリケーションの普及に驚いています。 例: ある賞受賞者は、レーダーの再構築/移動物体の検出の数学的問題について講演し、講演の中で、地上レベルでの「移動被写体」を検出するアクティブレーダーを使用して、高さ8kmのレーダー「プラットフォーム」の状況を説明し、この問題がどれほど壮大であるかについて。 人々は衝撃波を正確に解決してシミュレートする方法を提示しており、グーグルで簡単に検索すると、「慣性閉じ込め核融合」に取り組んでいることがわかります。 会議後のディナーで、私はロスアラモスで数字をやっている人々の隣に座った。 私は応用数学と数値計算法で博士号を取得していますが、正直なところ、賞を受賞し、大きなステージに置かれた人々が武器研究をしているとは予想していませんでした。また、おそらく私よりも賢い聴衆がこの作品を称賛していることに気づきました。 私はこのコミュニティの一員になりたいかどうか、そして直接または間接的に武器研究に貢献することなく応用数学のキャリアを築くことができるかどうか疑問に思っています。これは肩をすくめたものですか?私は非常に初期の段階にあり、より経験豊富な人々からのアドバイスに非常に感謝しています。

4
MATLABバックスラッシュ演算子は、正方行列の
いくつかのコードを「ストック」MATLABコードと比較していました。その結果には驚きました。 サンプルコードを実行しました(スパースマトリックス) n = 5000; a = diag(rand(n,1)); b = rand(n,1); disp('For a\b'); tic;a\b;toc; disp('For LU'); tic;LULU;toc; disp('For Conj Grad'); tic;conjgrad(a,b,1e-8);toc; disp('Inv(A)*B'); tic;inv(a)*b;toc; 結果 : For a\b Elapsed time is 0.052838 seconds. For LU Elapsed time is 7.441331 seconds. For Conj Grad Elapsed time is 3.819182 seconds. Inv(A)*B Elapsed time …

7
コードを将来ペタスケールのマシンで実行したい場合、どのプログラミングパラダイムに投資すべきですか?
top500の調査から、業界がプロセッシングコアの指数関数的な増加に向かっていることは明らかです。最大のスーパーコンピューターはすべてノード間の通信にMPIを使用しますが、ノード上の並列処理の明確な傾向は見られませんが、単一のMPIプロセスを各コアに自動的にマッピングする最も単純な(ただし、必ずしも効率的ではない)コンパイラ、OpenMP、pthreads、CUDA、Cilk、およびOpenCLからの並列化。 私は、世界最大のスーパーコンピューターで使用される可能性のあるコードを維持および開発する科学者グループの1人です。開発者の時間が限られていると仮定して、世界で最も強力なマシンのパフォーマンスを活用できるように、自分自身を将来的に保証するにはどうすればよいですか プロセス相互接続アーキテクチャについて、どのような仮定を立てるべきですか?メニーコア時代に入ると、どのようなパラダイムが苦しむでしょうか?パーティション化されたグローバルアドレス空間の言語は、ペタスケールのマシンで「生産中」に利用できますか?

6
マトリックス式のシンボリックソフトウェアパッケージ?
は対称で正定であることを知っています。Bは直交することがわかっています。AA\mathbf ABB\mathbf B 質問:ある対称正定値?回答:はい。B ⋅ A ⋅ B⊤B⋅A⋅B⊤\mathbf B \cdot\mathbf A \cdot\mathbf B^\top 質問:コンピューターがこれを教えてくれましたか?回答:おそらく。 行列に関する既知の事実を処理および伝播する記号代数システム(Mathematicaなど)はありますか? 編集:明確にするために、抽象的に定義されたマトリックスについてこの質問をしています。すなわち、私はとBの明示的なエントリを持っていません、私はそれらが両方とも行列であり、対称、正定等のような特定の属性を持っていることを知っています。AAABBB

2
OpenCLの数学ライブラリ?
科学コードでOpenCLを使用しようとした人からの情報を探しています。誰もが(最近)ViennaCLを試しましたか?もしそうなら、それはどのようにカスプと比較されますか? 何についてOCLTools?約束どおりですか?もしそうなら、それはOpenCLで数学カーネルを書き始めるための実行可能な方法でしょうか?

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