問題タブ [time-measurement]

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.

0 投票する
2 に答える
295 参照

c++ - 相互依存スレッドの並列計算時間の測定

並列プログラムでの実行時測定について質問があります(C ++を使用しましたが、質問はより一般的だと思います)。

簡単な説明:3つのスレッドが並列で実行され(pthread)、同じ問題をさまざまな方法で解決します。各スレッドは、自分のステータス/自分の計算で利用可能な情報に応じて、他のスレッドを高速化するために他のスレッドに情報を渡すことができます(たとえば、一方のスレッドによって取得されたが、もう一方のスレッドによっては取得されていない部分的なソリューション)。最初のスレッドの準備ができるとすぐに、プロセス全体が停止します。ここで、開始から問題が解決するまでの実行時間を評価するための独自の時間測定を行いたいと思います。(最後に、並列計算による相乗効果の使用が単一スレッドでの計算よりも速いかどうかを判断したいと思います)。

私の目には、問題は(オペレーティングシステムがシングルスレッドを一時停止/一時停止解除するため)、プロセスで情報が渡されるポイントが各プロセスの状態で決定論的ではないということです。つまり、特定の情報は、スレッド1でxxx単位のcpu時間後に取得されますが、スレッド2が計算に費やされたyyyまたはzzz単位のcpu時間の後にこの情報を受信するかどうかは、制御できません。いずれにせよ、この情報がスレッド2の計算を終了すると仮定すると、スレッド2の実行時間は、オペレーティングシステムのアクションに応じて、yyyまたはzzzのいずれかになります。

実行時の比較のために決定論的な動作を取得するにはどうすればよいですか?(マルチコアマシン上で)各スレッドを「邪魔されずに」実行するようにオペレーティングシステムに注文できますか?実装(c ++)ベースでできることはありますか?

または、そのような実装のランタイム(タイムゲイン)を評価するための他の概念はありますか?

よろしくマーティン

0 投票する
3 に答える
156 参照

java - コードの最適化; コード セクション間の時間を測定する

Android アプリで特定のメソッドを実行するのにかかる時間を知りたいです。私の最初のアイデアは、次のようなことをすることでした:

しかし、まず、日付オブジェクトには がないようです。それが.getMilliseconds()その後です。これを解決するためのより簡単かつ/またはより良い方法はありますか?

ありがとう

0 投票する
1 に答える
206 参照

java - マルチスレッドシステムにおける情報収集と時間計測に関するアドバイス

私は型破りな問題に行き詰まっていることに気づきました。マルチスレッド システムから情報を収集するコンポーネントを Java で作成する予定です。前進するのに役立つ情報やアドバイスをいただければ幸いです。詳細は次のとおりです。

-システムには、互いに情報を交換する多くのサブシステムが含まれています (たとえば、1 つのコンポーネントが他のコンポーネントを実行して、ログ記録やデータの計算を行うことができます)。

- システムで実行される各操作は、一連のコマンドのようなものであり、いくつかのコンポーネントを連続して実行することにつながります。

-システムは多数のリクエストを取得し、操作にはIDがないため、どの操作がどのチェーンに属しているかを追跡するのは困難です(チェーンのすべてのステップで操作の時間を取得する必要があります)

私が対処しなければならない問題: -操作上の ID の欠如 -サブシステム間で最終的に ID を交換する -コードの変更を最小限に抑える (これは巨大なシステムです) -最終的には、この種の問題 (または少なくともいくつかの) に対する既存のオープンソース ソリューションを見つけるその一部)

これは、単一の操作による私のコンポーネントの結果の例です。

検索番号 60

コンポーネント 1 45 秒 コンポーネント 6 2 秒 コンポーネント 4 32 秒 コンポーネント 2 4 秒

45、2、32、4 は各コンポーネントで費やされた時間を表します

誰かが同様の問題を解決していることに気付いた場合、またはロギング/情報収集の分野での経験がある場合は、あなたのアドバイスが大いに役立ちます。

編集: AspectJ でコンポーネントを作成しました。これは、すべてのメソッドの「周り」の時間を測定し、各サブシステムからの結果をまとめて収集できます。主な問題は、どのログがどのリクエストに属しているかを識別できないことです (たとえば、特定の「検索番号 60」または「追加番号 5」リクエスト)。問題は、ソースコードを大幅に変更せずに制御フローで転送できるリクエスト ID を作成する効果的な方法 (および転送方法) はありますか?

0 投票する
1 に答える
3683 参照

android - System.currentTimeMillis()は0(ゼロ)を返します

私は現在、Android用の小さなゲームを作ろうとしています。
ゲームの2つのアクション間の時間を測定しようとしましたが、メソッドを呼び出したcurrentTimeMillis()後にメソッドを呼び出そうとすると、開始時間が0のままになりますgameThread.run()(gameThreadは実行可能です)。電話の前に置くとrun()、適切な価値がもたらされます。

クラスゲームビュー:

クラスGameThread(実行可能を実装)

編集:最初にcurrentMillis()の戻り値をログに記録しようとしましたが、run()メソッドが終了した後にメソッドが呼び出されるようです。同期して実行するべきではありませんか?

ログ:

解決策: Runnableを誤って起動しました。これがRunnableを開始する正しい方法です。

0 投票する
2 に答える
4125 参照

linux - ARMパフォーマンスカウンターとLinuxのclock_gettime

開発ボード(ZC702)でZynqチップを使用しています。これは667MHzのデュアルcortex-A9 MPCoreを備え、Linuxカーネル3.3が付属しています。プログラムの実行時間を比較したかったので、最初にclock_gettimeを使用し、次にARMのコプロセッサによって提供されるカウンタ。カウンタは、1プロセッササイクルごとに増分します。(stackoverflowとこれに関するこの質問に基づく)

-O0フラグを使用してプログラムをコンパイルします(並べ替えや最適化を実行したくないため)

パフォーマンスカウンターで測定する時間は、583833498(サイクル)/ 666.666687 MHz = 875750.221(マイクロ秒)です。

clock_gettime()(REALTIMEまたはMONOTONICまたはMONOTONIC_RAWのいずれか)を使用している場合、測定される時間は 731627.126(マイクロ秒)で、150000マイクロ秒少なくなります。

なぜこれが起こっているのか誰かが私に説明できますか?なぜ違いがあるのですか?プロセッサはクロックスケールしませんが、clock_gettimeで測定される実行時間を短縮するにはどうすればよいですか?以下にサンプルコードがあります。


0 投票する
2 に答える
160 参照

language-agnostic - 信頼できる方法でコードを実行するのにかかる時間を測定するにはどうすればよいですか?

実行時間を測定する方法については、SOで何度も質問されています。たとえば、ここまたはここを参照してください。ただし、これらの質問は主に、使用するタイミング関数に焦点を当てています。

私が興味を持っているのは、結果を再現可能にする方法です。たとえば、マルチタスクが原因で、テストされたコードの実行が、結果に影響を与えるバックグラウンドプロセスによって中断される可能性があります。これを克服するために、いくつかのベンチマークが複数の実行を行い、(ループ内でコードを複数回実行することに加えて)最適な時間を費やしているのを見てきました。

結果の信頼性と再現性を高める方法について、他に提案やアイデアはありますか?

0 投票する
1 に答える
1756 参照

arm - ARMCortex-A8プロセッサでのプログラム実行時間

ARM Cortex-A8を使用しており、アセンブリコードを介してCCNTタイムカウンターから値を読み取ろうとしています。私はこの投稿をフォローしていますARMCortex-A8プロセッサでプログラムの実行時間を測定する方法は? 。それに応じて、タイマーから値を読み取る前に、カウンターを有効にし、64ビット分周器を有効にしてオーバーフローをクリアする必要があります。これらの操作は、適切なレジスタ(たとえば、PMCR(パフォーマンスモニトロ制御レジスタ))内に書き込むことによって実行されます。したがって、オーバーフローがどのように発生するかを追跡するために、ループ内にカウンター値が出力され、次の動作が発生します。

したがって、私は一連の質問があります:

a)Linuxカーネルで使用されているレジスタはどれですか?(今後のカーネルバージョンの情報はどれほど信頼できるか)。それらの値の変更はどれほど安全でしょうか?

b)CCNT周波数の正確な値とその取得方法は何ですか?残念ながら、プロセッサの仕様に値が見つかりません。しかし、dmesgはそれを言います

しかし、clock_gettimeに対して手動で識別すると、7MHzになります。では、なぜそれが期待どおりに24MHzではないのでしょうか。

c)私の最初の出力によると、オーバーフロー後、ゼロではなく約1ミルから始まるのはなぜですか?

d)64分周器がないと、間違った結果が得られるのはなぜですか?値は次のようにジャンプし始めます。

助けていただければ幸いです。ありがとう

0 投票する
2 に答える
1960 参照

php - PHP ドキュメントのダウンロード速度とサイズを測定する方法

これが私が計画していることです: 私のウェブページは単純なファイル共有システムです。ユーザーにダウンロード速度を表示したいと思います。100%ではありませんが、比較的良好です。そして、ダウンロードにかかる時間を書きたいと思います... 例: あなたのダウンロード速度は 300kb/s で、このファイルは 7 秒でダウンロードできます..


私は2つのPHPファイルを持っています。

アルファファイルはこれを行います:

これは簡単です。speedtest.php から取得できる数値は 1 つだけです。私の問題は次のとおり(int)$size = 1です。私は彼のことをしたい: $time_left = $size / $sebesseg; $sebesseg速度を意味します。ダウンロード速度 (バイト単位)。しかし、私はsettype、または(int)$sebesseg..または私がすでに知っているものを使用することはできません。