我已经开发了一个python C扩展,它从python接收数据并计算一些CPU密集型计算. 有没有可能分析一下C-分机?

这里的问题是,用C编写一个要分析的样本测试将是一个挑战,因为代码依赖于特定的输入和数据 struct (由python控制代码生成).

你有什么意见建议?

推荐答案

我已经找到了使用google-perftools的方法.诀窍是用python封装函数StartProfiler和StopProfiler(在我的例子中是通过cython).

分析C扩展就足以将Python代码包装在StartProfiler和StopProfiler调用中.

from google_perftools_wrapped import StartProfiler, StopProfiler
import c_extension # extension to profile c_extension.so

StartProfiler("output.prof")
... calling the interesting functions from the C extension module ...
StopProfiler()

然后进行分析,例如,您可以以callgrind格式导出,并在kcachegrind中查看结果:

pprof --callgrind c_extension.so output.prof > output.callgrind 
kcachegrind output.callgrind

C++相关问答推荐

为什么这个select()会阻止?

try 使用sigqueue函数将指向 struct 体的指针数据传递到信号处理程序,使用siginfo_t struct 体从一个进程传递到另一个进程

C语言中字符数组声明中的标准

为什么复合文字(C99)的返回会生成更多的汇编代码?

如何在Visual Studio代码中关闭此函数名称显示功能?

我编译了一个新的c程序,并收到以下错误

当我运行/调试C程序时,Malloc()似乎正在将&q;r\r...&q;赋值给一个指针,我不确定为什么?

fwrite无法写入满(非常大)缓冲区

向上强制转换C中的数值类型总是可逆的吗?

将数据移动到寄存器时出现分段故障

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

Square不与Raylib一起移动

Go和C中的数据 struct 对齐差异

使用Open62541向OPCUA服务器发送读请求时内存泄漏

即使我在C++中空闲,也肯定会丢失内存

解密Chrome加密密钥

不兼容的整数到指针转换传递';char';到类型';常量字符*

将char*铸造为空**

使用 c 中的 write() 函数将非 ASCII 字符写入标准输出

快速准确计算double的小数指数