- Community Home
- >
- HPE Community, Japan
- >
- HP-UX
- >
- HP-UX General
- >
- 時間測定をCPUサイクル数で行う方法
HP-UX General
1822078
メンバー
3735
オンライン
109640
解決策
フォーラム
カテゴリ
Company
Local Language
戻る
フォーラム
ディスカッションボード
フォーラム
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
ディスカッションボード
フォーラム
ディスカッションボード
ディスカッションボード
ディスカッションボード
フォーラム
ディスカッションボード
戻る
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
ブログ
コミュニティ言語
言語
フォーラム
ブログ
トピックオプション
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-04-2005 01:28 PM
03-04-2005 01:28 PM
時間測定をCPUサイクル数で行う方法
OS:hpux10.20
Model:B2000
C言語のプログラムにおいて
nsec単位で1命令の実行時間を
測定したいのですが
times(),clock()では
10msec単位でしか計測できず
困っています。
CPUのサイクル数(1/CPU周波数)
で計測する命令が有ったような
気がするのですが
ご存じの方はおられますでしょうか?
Model:B2000
C言語のプログラムにおいて
nsec単位で1命令の実行時間を
測定したいのですが
times(),clock()では
10msec単位でしか計測できず
困っています。
CPUのサイクル数(1/CPU周波数)
で計測する命令が有ったような
気がするのですが
ご存じの方はおられますでしょうか?
2件の返信2
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-04-2005 02:20 PM
03-04-2005 02:20 PM
時間測定をCPUサイクル数で行う方法
struct timeval t1, t2;
として、
gettimeofday(&t1, (void *)NULL);
....
gettimeofday(&t2, (void *)NULL);
ではさむのではいけませんか? 一応、struct timeval の tv_usec メンバーは ”マイクロ秒" の単位になってますから、ミリ秒よりは細かい。
ナノ秒まで測る、というのはシステムコールでは難しいでしょう。
として、
gettimeofday(&t1, (void *)NULL);
....
gettimeofday(&t2, (void *)NULL);
ではさむのではいけませんか? 一応、struct timeval の tv_usec メンバーは ”マイクロ秒" の単位になってますから、ミリ秒よりは細かい。
ナノ秒まで測る、というのはシステムコールでは難しいでしょう。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-05-2005 07:11 AM
03-05-2005 07:11 AM
時間測定をCPUサイクル数で行う方法
移植性はまったくなくなりますが、PA-RISCプロセッサのインターバルタイマレジスタを使う手もあることはあります。例えば、
#include
#include
main()
{
register unsigned long x, y, s;
double ave;
int i;
s = 0;
for (i=0; i<10; i++) {
_MFCTL(16, x);
sleep(1);
_MFCTL(16, y);
s += y - x;
}
ave = (double)s / (double)10;
printf("CR16 1 count = %15.7f nsec.\n",
(double)1.0 / ave * 1000 * 1000 * 1000);
}
として、+DD64 付でコンパイルして (すいません、11.11で試しました。) 実行すると、
$ ./a.out
CR16 1 count = 2.4761232 nsec.
なんて風になります。このマシンでは、インターバルタイマレジスタの1カウントは大体 2.4ナノ秒。
( _MFCTL()はマクロで、中で定義されています。10.20でこのファイルがあるかは分かりません。)
ただしこの方法は移植性が全然ありません。それと、今度はあまり長い時間 (おそらくミリ秒の
オーダー)を測るのは難しいかも、というのも、あまり長い時間が経過すると、プロセスがCPU間で移動することがある。そうするとCR16の数値比較の意味がなくなりますから。
#include
#include
main()
{
register unsigned long x, y, s;
double ave;
int i;
s = 0;
for (i=0; i<10; i++) {
_MFCTL(16, x);
sleep(1);
_MFCTL(16, y);
s += y - x;
}
ave = (double)s / (double)10;
printf("CR16 1 count = %15.7f nsec.\n",
(double)1.0 / ave * 1000 * 1000 * 1000);
}
として、+DD64 付でコンパイルして (すいません、11.11で試しました。) 実行すると、
$ ./a.out
CR16 1 count = 2.4761232 nsec.
なんて風になります。このマシンでは、インターバルタイマレジスタの1カウントは大体 2.4ナノ秒。
( _MFCTL()はマクロで、
ただしこの方法は移植性が全然ありません。それと、今度はあまり長い時間 (おそらくミリ秒の
オーダー)を測るのは難しいかも、というのも、あまり長い時間が経過すると、プロセスがCPU間で移動することがある。そうするとCR16の数値比較の意味がなくなりますから。
上記の意見は、Hewlett Packard Enterpriseではなく、著者の個人的な意見です。 このサイトを使用することで、利用規約と参加規約に同意したことになります 。
企業情報
© Copyright 2025 Hewlett Packard Enterprise Development LP