由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 怎样准确测量函数执行的时间?
相关主题
[合集] 怎样 使 优先队列 的比较函数参数化 ?C 程序 clock() timer 问题
python里的 lambda函数 有什么有点log4j 谁熟悉?
sml, any one know about it?hibernate问题
server端用Threadpool实现request/response的两种不同方法比较when I run junit test, how can I log the java log to a file?
Clock() problem关于 Java 的 Log 轮子
how to know the contents in Message queue?有人用过slf4j simple logger么,太他妈的难用了
C++ 问题紧急求救twitter又自己做了一個distributedLog.基于bookeeper
问一个C\C++中clock()函数溢出问题java logger 用哪一个好?
相关话题的讨论汇总
话题: clock话题: thread话题: 函数话题: multi话题: c++
进入Programming版参与讨论
1 (共1页)
d******e
发帖数: 117
1
我有一个软件的源代码,是用C写的。我想记录某些函数执行的时间,现在想的是在代
码里嵌入一些printf,把函数名和时间打印出来。困难在于这是一个multi-thread的软
件,需要避免冲突,而且如果嵌入的代码影响太大的话,会改变打印出来的时间的准确
性。有没有什么library/tool能帮我做这件事?
d**o
发帖数: 864
2
profiling工具,你可以搜一下,哪个更适合你。

【在 d******e 的大作中提到】
: 我有一个软件的源代码,是用C写的。我想记录某些函数执行的时间,现在想的是在代
: 码里嵌入一些printf,把函数名和时间打印出来。困难在于这是一个multi-thread的软
: 件,需要避免冲突,而且如果嵌入的代码影响太大的话,会改变打印出来的时间的准确
: 性。有没有什么library/tool能帮我做这件事?

c*********e
发帖数: 16335
3
#include
struct timespec requestStart,requestEnd;
clock_gettime(CLOCK_REALTIME,&requestStart);
...
clock_gettime(CLOCK_REALTIME,&requestEnd);
double elapsedTime = (requestEnd.tv_sec - requestStart.tv_sec ) * 1E9 + (
requestEnd.tv_nsec - requestStart.tv_nsec);

【在 d******e 的大作中提到】
: 我有一个软件的源代码,是用C写的。我想记录某些函数执行的时间,现在想的是在代
: 码里嵌入一些printf,把函数名和时间打印出来。困难在于这是一个multi-thread的软
: 件,需要避免冲突,而且如果嵌入的代码影响太大的话,会改变打印出来的时间的准确
: 性。有没有什么library/tool能帮我做这件事?

h**********c
发帖数: 4120
4
If I was given this assignment, perhaps probably may I will put the time
stamps, clock ticks in a queue, printf them before the the program exit, if
the program finishes at last and least.
d******e
发帖数: 117
5
多谢回复。
还有两个问题要解决:
怎样存elapsedTime,怎样输出。为了不影响runtime性能,可能需要缓存输出。对于
multi-thread的程序,缓存可能要用lock。这还是有一点复杂度。

【在 c*********e 的大作中提到】
: #include
: struct timespec requestStart,requestEnd;
: clock_gettime(CLOCK_REALTIME,&requestStart);
: ...
: clock_gettime(CLOCK_REALTIME,&requestEnd);
: double elapsedTime = (requestEnd.tv_sec - requestStart.tv_sec ) * 1E9 + (
: requestEnd.tv_nsec - requestStart.tv_nsec);

h**********c
发帖数: 4120
6
Let's say multi-thread. In java, LinkedConcurrentQueue can be very fast.
While you use C++. Otherwise, you can spend sometime study the source code
of log4j. It is regretful log4j is for java.
So I mentor you an architecture. For each thread you declare a local storage
, say a c++ hashmap , may not be exactly accurate. Most c++
thread can be joined. Before you join them, you can check a boolean
variable (or use semaphores), advanced Unix programming has similar example.
You don't look like a beginner. So each thread can notify the main thread,
after it finishes its task. Remember multi-threading , it often happens that
a thread does not finish. But assume all you threads are correct. The main
thread will merge all the stamp maps. At least, you don't use lock for the
stamp/clock_t queues. At last, print/analyse your stamps.
I don't comment non-technical stuff. You can profile multi-threading. But it
is very difficult to DEBUG.
good luck.
b***i
发帖数: 3043
7
如果每个thread自己拥有一个queue,不就解决了,不用lock。thread结束的时候通知主
程序,这个时候所有性能相关的已经全部结束。

【在 d******e 的大作中提到】
: 多谢回复。
: 还有两个问题要解决:
: 怎样存elapsedTime,怎样输出。为了不影响runtime性能,可能需要缓存输出。对于
: multi-thread的程序,缓存可能要用lock。这还是有一点复杂度。

c*******y
发帖数: 1630
8
这个比较麻烦,写一个class。
ctor里面调用一次clock,或者time
dtor里面再调用一次,print diff出来。
每次在函数体的开头定义一个实例就可以了。

【在 c*********e 的大作中提到】
: #include
: struct timespec requestStart,requestEnd;
: clock_gettime(CLOCK_REALTIME,&requestStart);
: ...
: clock_gettime(CLOCK_REALTIME,&requestEnd);
: double elapsedTime = (requestEnd.tv_sec - requestStart.tv_sec ) * 1E9 + (
: requestEnd.tv_nsec - requestStart.tv_nsec);

c*******y
发帖数: 1630
9
V-tune,这是我用过的profiler里面最好的,其他的perf等link到了debug库,还是找
不到caller function。
non-commercial免费。

【在 d******e 的大作中提到】
: 我有一个软件的源代码,是用C写的。我想记录某些函数执行的时间,现在想的是在代
: 码里嵌入一些printf,把函数名和时间打印出来。困难在于这是一个multi-thread的软
: 件,需要避免冲突,而且如果嵌入的代码影响太大的话,会改变打印出来的时间的准确
: 性。有没有什么library/tool能帮我做这件事?

d*******o
发帖数: 5897
10
这个方法测的是wall clock吧?函数被suspend的时间也被算进去了,不是函数实打实
消耗的cpu时间。

【在 c*********e 的大作中提到】
: #include
: struct timespec requestStart,requestEnd;
: clock_gettime(CLOCK_REALTIME,&requestStart);
: ...
: clock_gettime(CLOCK_REALTIME,&requestEnd);
: double elapsedTime = (requestEnd.tv_sec - requestStart.tv_sec ) * 1E9 + (
: requestEnd.tv_nsec - requestStart.tv_nsec);

1 (共1页)
进入Programming版参与讨论
相关主题
java logger 用哪一个好?Clock() problem
embeded and realtime systemhow to know the contents in Message queue?
One OS scheduling question (转载)C++ 问题紧急求救
Thread Priority 设为最高--窗口最小化时好像并不优先啊?问一个C\C++中clock()函数溢出问题
[合集] 怎样 使 优先队列 的比较函数参数化 ?C 程序 clock() timer 问题
python里的 lambda函数 有什么有点log4j 谁熟悉?
sml, any one know about it?hibernate问题
server端用Threadpool实现request/response的两种不同方法比较when I run junit test, how can I log the java log to a file?
相关话题的讨论汇总
话题: clock话题: thread话题: 函数话题: multi话题: c++