4

私は現在、Erlang を読んだり学んだりしていますが、「大量の計算」には (実際には) 適していないことがよくあります。今、私はこのフレーズや類似のフレーズによく出くわしますが、「重い」が正確に何を意味するのかを本当に知りません.

操作が計算集約的であるかどうかをどのように判断しますか? テスト前に定量化できますか?

編集:

計算量、アルゴリズムの複雑さ、または入力値のサイズに違いはありますか。

たとえば、1000 computaions of 28303 / 4100 computations of 239847982628763482 / 238742

4

4 に答える 4

4

具体的にErlangについて話している場合、一般的にErlangを使用した集中的な数値処理を必要とするアプリケーションを開発したいとは思いません。つまり、Erlang で物理エンジンをコーディングすることを学んでいないということです。したがって、Erlang が遅すぎることを心配する必要はありません。

Erlang から一般的な質問に移ると、これらのことはほとんどの場合、相対論に帰着します。数値計算は無視して、プログラミングに関する一般的な質問をしましょう:どのくらいの速さで十分ですか?

まあ、十分な速さは次のものに依存します。

  • アプリケーションでやりたいこと
  • どのくらいの頻度でそれをしたいですか
  • ユーザーが期待する速さ

一部のプログラムでファイルの読み取りに 1 ミリ秒または 1000 ミリ秒かかる場合、1000 ミリ秒は「遅すぎる」と見なされますか?

10 個のファイルを立て続けに読み取る必要がある場合 - はい、おそらく遅すぎます。ディスクから XML ファイルを読み取るだけで 1 秒かかる XML パーサーを想像してみてください。

一方、ユーザーが 15 分ごとに手動でボタンをクリックする場合にのみファイルを読み取る必要がある場合は、Microsoft Word などでは問題になりません。

何が遅すぎるかを正確に言う人がいない理由は、それが実際には問題ではないからです。同じことがあなたの特定の質問にも当てはまります。ある言語が「遅い」という理由で敬遠されることは、たとえあったとしてもめったにすべきではありません。

最後になりましたが、Erlang で巨大なプロジェクトを開発し、その道のりで、そのダグナビットに気付きました! これらの数字を実際に処理する必要があります。次に、調査を行い、優れたライブラリを見つけて、それに最適な言語でアルゴリズムを実装し、その小さなライブラリと相互運用します。

于 2012-07-27T16:17:21.320 に答える
2

以前、couch DB mapreduce での数値処理について質問したことがあります: CouchDB ビュー: map reduce で許容できる処理の量は?

答えの1つで興味深いのはこれです:

10,000 個のドキュメントがあり、それぞれの処理に 1 秒かかるとします (これは、これまでに見たことがないほどの速さです)。ビューを完全に構築するには、10,000 秒または 2.8 時間かかります。ただし、ビューが完成すると、任意の行 (?key=...) または行スライス (?startkey=...&endkey=...) をクエリすると、ドキュメントを直接クエリするのと同じ時間がかかります。文書数の検索時間は O(log n) です。

つまり、マップの実行に 1 ドキュメントあたり 1 秒かかっても、結果を取得するのに数ミリ秒かかるということです。(もちろん、ビューは実際にはインデックスであるため、最初に作成する必要があります。)

現在の質問をそれらの用語で考えると、あなたの質問を考えるのは興味深い角度だと思います。言語の速度/最適化のトピックについて:

操作が計算集約的であるかどうかをどのように判断しますか?

Facebook は PHP についてこの質問をし、最終的に問題を解決するためにHIP HOPを作成しました。これは PHP を C++ にコンパイルします。PHP が C++ よりもはるかに遅い理由は、PHP 言語がすべて動的ルックアップであるためであり、変数、配列、動的型付け (速度低下の原因) などを処理するには多くの処理が必要であると彼らは言いました。

ですから、あなたが尋ねることができる質問は次のとおりです: erlang は動的ルックアップですか? 静的型付け? 編集済み?

計算量、アルゴリズムの複雑さ、または入力値のサイズに違いはありますか。たとえば、28303 / 4 の 1000 回の計算と 239847982628763482 / 238742 の 100 回の計算

そうは言っても、特定のタイプをさまざまな種類の数に付与することさえできるという事実は、正しいタイプを使用する必要があることを意味し、それは間違いなくパフォーマンスの向上につながります。

于 2012-07-27T15:52:29.027 に答える
2

こういうのは見ればわかる!通常、これは、int、float、double などを選択することが重要な状況を指します。物理シミュレーションやモンテカルロ法など、何百万もの計算を行う必要がある場合。

正直なところ、実際には、これらのビットを C で記述し、好きな他の言語を使用してそれらを実行するだけです。

于 2012-07-27T15:52:46.890 に答える
0

数値計算の適合性は、ライブラリのサポートと言語の固有の性質によって異なります。たとえば、純粋関数型言語では可変変数が許可されないため、方程式を解く型の問題を実装することは非常に興味深いことです。Erlangはおそらくこのカテゴリに分類されます。

于 2012-07-27T15:54:41.400 に答える