問題タブ [overhead-minimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - Objective-Cプロトコルのデフォルトの実装を提供するにはどうすればよいですか?
オプションのルーチンでObjective-Cプロトコルを指定したいのですが。ルーチンがプロトコルに準拠するクラスによって実装されていない場合は、代わりにデフォルトの実装を使用したいと思います。このデフォルトの実装を定義できる場所はプロトコル自体にありますか?そうでない場合は、このデフォルトの実装をあちこちにコピーして貼り付けることを減らすためのベストプラクティスは何ですか?
optimization - オーバーヘッドに関するHTTPとWebSocket
両端でnode.jsを使用してファイル同期プログラム(Dropboxとは異なります)を構築しています。潜在的に何千ものクライアントが同時にデータを要求する必要があります。
これが私の現在のシステムです:
- サーバーはWebSocketを介してクライアントに通知をプッシュします(ファイルは更新されています)
- クライアントはダウンロードをキューに入れ、アイドル時にHTTPリクエストを作成します
たとえば、それぞれ50 MBの圧縮されたチャンクでデータを提供するため、HTTPリクエストのオーバーヘッド(ヘッダー)はごくわずかです。
リクエストとプッシュ通知にWebSocketを使用する場合、次のようになります。
- 全体的な速度の顕著な改善?(遅延、認証などの削減)
- 接続を開いたままにするためのサーバーの追加のオーバーヘッド?
- バイナリデータのプッシュに関する問題?
ダウンロードが行われている間(多くのオーバーヘッド)にサーバーで通知をキューに入れたくないので、専用のWebSocketを介して通知を送信する必要があると思います。
注:これらのWebSocketは、クライアントのシステムがオンになっている限り、長期間開いています。
編集:別のCPUコアに移動するために、別のポートの別のhttpサーバーでWebSocketを使用します。数千(数十万ではないにしても)の同時WebSocketを開く可能性があります...
c# - 暗号化プロジェクト: メソッドのオーバーヘッドをなくす方法についてアドバイスが必要
アドバイスを求めています。私はそれを楽しんでできるので、独自の暗号化アルゴリズムを開発しました。今、私は新しいアイデアを試してみようとしています。
私のアイデアには、いくつかのアルゴリズムをより大きなものに統合することが含まれます。たとえば、 を呼び出して、、などX.Encrypt()
を使用します。この種の操作を実行すると、 、、メソッド呼び出しごとに 1 バイトのメソッド オーバーヘッドが致命的になります。数ミリ秒から数分になります。質問はありますか?A.Encrypt()
B.Encrypt()
C.Encrypt()
A
B
C
問題を軽減するためのコード設計のヒントとコツを探しているだけです。
ありがとうございます。
アップデート
問題のコード例:
この問題は、呼び出し方法に固有のものであることを知っています。私の目標は、私のやり方を変えることです。Transform メソッド内で改善できることはわかっています。高速は約 24 秒で動作しますが、低速は数分かかります。明らかに、メソッドからのオーバーヘッドであり、プロファイラーは必要ありません:)
やってみたいアイデアがあります。Transform メソッドの外側でループする代わりに、ニーズに合わせて各メソッド内での実行方法を変更する「実行モード」の使用を考えています。したがって、Transform メソッド内でバッチとして実行される 1 バイトおきの暗号化を実行できます。これにより、私が得ているオーバーヘッドが解消されると思います。
最終更新 (私自身の問題を解決しましたが、まだアイデアを受け入れています!)
Transform メソッド内でループ レートをインクリメントするとうまくいきました。
私がやったことは次のとおりで、うまくいくようです:
これは、私の作業用 VM で 100MB の場合、約 12 秒で実行されます。貢献してくれた皆さん、ありがとう!このように試すようになったのは、さまざまな反応の組み合わせでした。皆さんに感謝します!
これは現時点での概念実証にすぎません。それはより大きなものに向かって構築されています!:)
mysql - MySQL データベース構造の決定
ユーザーに関する可能性のあるすべてのデータ用に1つの巨大なテーブルを用意するか、その多くはすべてのユーザーに適用されるわけではありません.たとえば、以前の仕事) と、各ユーザーに関するデータを複数のテーブルに分散させることです。
最初の方法はより合理化されていますが、大量の不要なオーバーヘッドを使用するように感じます.
multithreading - グローバルキャッシュをスレッドセーフにする方法
私のアプリケーションはモノスレッドでしたが、今ではパフォーマンスを向上させるためにマルチスレッドにする必要があります。
次のアーキテクチャに List と ListItem があります。
継承の代わりに、リストの構成を優先します。
ADD() メソッドで次のようにします。
前述したように、このオブジェクトは実行時にキャッシュ データを記録するために使用されますが、オブジェクトを読み書きする必要があるたびに、次のことを行う必要があります。
そこから継承したクラスが無数にあるため、アーキテクチャを大きく変更することはできません。
プロセスを実行すると、プロセッサのグラフィックに多くのスパイクが発生し、多くのダウンタイムも発生します。
システムは Delphi 6 コンパイラからコンパイルされます。
クリティカル セッションは、ユニットの初期化で作成されました。
これを行う別の方法はありますか?
少なくとも読み取りをロックしないでください。
また、整合性を保証する必要があり、同じキーを持つ 2 つのオブジェクトは許可されません。
overhead - コマンドラインから Julia を実行する際のオーバーヘッド
私は最近Juliaを発見し、今日ソースからコンパイルして以来、いじっています。私はこの非常に単純なスクリプトを持っています.2つのランダム行列の乗算の時間を計っています.
julia_matmul.jl
Julia のインタラクティブ セッションからこのスクリプトを 2 回実行すると、2 回目の実行は最初の実行よりもかなり高速になります。ただし、ターミナルからスクリプトを 2 回実行すると、最も遅い結果しか得られません。
ここに私の結果があります:
オーバーヘッドは約 0.3 秒で、これは非常に小さいですが、短いスクリプトのタイミングを台無しにする可能性があります。だから私の質問は: この ~0.3 秒のオーバーヘッドはどこから来て、どうすればそれを取り除くことができますか (特にインタラクティブセッションを使用していない場合)?
opencl - OpenCL オーバーヘッドの測定と最小化
長い計算を行う pyopencl プログラムがあります (1 回の実行で約 3 ~ 5 時間)。いくつかのカーネルをサイクルで 1 つずつ開始しています。だから私はこのようなものを持っています:
時間を測定したところ、次のようになりました。
- システム時間は 4:30 時間です (Linux
time
コマンドで測定) - 純粋な opencl イベントベースのタイミングは 3:30 時間 (ロード + 計算 + ストア)
知りたい:
- OpenCL プログラムの最小オーバーヘッドはどれくらいですか? 私の場合は35%くらいです
- イベントベースのタイミングを信頼する必要がありますか?
- プロファイリングを有効にすると、プログラム全体の実行時間がかなり長くなりますか?
オーバーヘッドがプログラムに依存することは知っていますし、Python は純粋な C や CPP ほど高速ではないことも知っています。しかし、重い計算をすべて OpenCL カーネルに移行すると、5 ~ 7% しか失うことがないと信じています。間違っている場合は修正してください。
PS AMD OpenCL、AMD GPU
python - Python での関数呼び出しのオーバーヘッドの削減
グリッド内を移動するN 個のロボットをシミュレートするアプリケーションを開発しました。これらのロボットは、限られたステップ数で訪問したグリッド セルの量を最大化し、ゴール ポイントで合流します。すべて正しく動作しますが、非常に遅いです。現在は python+numpy+mathplotlib です。
ロボットの最大数は 100 のソフト リミットを持つことができます (それが高くなる場合は、あると便利です)。
そのために、私は次のように単純化します。
ロボットは 1x2 numpy 配列 (x および y 座標) です。
ここでエージェントが何をすべきかを決定します。その場で戦術と戦略を切り替える必要があるため、そのロジックを動かすことはできません。
agent.calcは、ロボットをその場で次々と更新します。
cProfiling すると、次のように返されます。トップの抽出
ロボット用にさまざまな環境を実装しました。最も重要なのはsquaregirdです。マンハッタン/タクシーとユークリッドなど、さまざまなメトリックを使用するつもりだったので、すべての環境には独自の距離関数があります。距離関数は、何度か使用するので、独自のdistance.pyファイルに抽出しました。
taxicab_distanceが多く呼び出されていることがわかります。これは、エージェントが次の位置がまだゴールに到達できるかどうかを確認し、他のすべてのロボットとの距離をヒューリスティックの最適化。
この関数は派手なことは何もしません。
私は、Python の関数呼び出しのオーバーヘッドがかなり高いことを知っており、それがパフォーマンスに影響していると思います。{numpy.core.multiarray.array}は無視できます。私が間違っていることはわかっていると思います。
距離呼び出しチェーン: agent -> environment.distance -> taxicab_distance
問題は、関数を呼び出すオーバーヘッドをどのように削減できるかということです。pythons c の拡張性である cython を使用して、より具体的にすることを強く検討しました。それはうまくいきますか?それがとても遅い理由は他にありますか?
zip - 圧縮ファイルの「オーバーヘッド」をどのように推定できますか?
たとえば、サイズが7バイトの.txtファイルを圧縮するとします。圧縮して.zipファイルに変換すると、サイズは190バイトになります。
「オーバーヘッド」のおおよそのサイズを推定または計算する方法はありますか?
オーバーヘッドのサイズに影響を与える要因は何ですか?
Zlibはオーバーヘッドを計算します。彼らは次のように述べています 。
「オーバーヘッド」のサイズを見積もることが可能であることを伝えるために、このサイトを掲載しました。
注:オーバーヘッドとは、データの圧縮バージョンに追加される余分なデータの量です。
performance - ソケット サーバー側のオーバーヘッド
サーバーでソケットを開いたままにしておくことに関連するオーバーヘッドはどれくらいですか?
Facebook のように何百万もの同時接続があるとしましょう。HTTP リクエストと比較して、ソケットはオーバーヘッドを追加しすぎますか? ソケットを使用するとネットワークのオーバーヘッドが大幅に削減されることはわかっていますが (ヘッダーが原因で)、ソケットの方が適切でしょうか? クライアントをリアルタイムで更新せずに、(数秒ごとまたはクライアントが要求するたびに) 情報のバッチをクライアントに送信する場合、スケーラビリティ、パフォーマンス、およびサーバーの観点から、これらの何百万ものユーザーにサービスを提供するためのより良いオプションです。サイドオーバーヘッド?(ソケットまたは http を使用して、より多くの/より高速にスケーリングする必要がありますか?)