剖析我的代码开放源代码和第三方代码封闭源代码的内存使用情况的最佳策略

如何解决剖析我的代码开放源代码和第三方代码封闭源代码的内存使用情况的最佳策略

| 我很快将要负责对用C / C ++编写并使用CUDA来利用GPU处理的代码进行适当的内存配置。 我最初的想法是创建宏和运算符重载,这将使我能够跟踪源代码中对malloc,free,delete和new调用的调用。我将能够包括一个不同的标头,并使用
__FILE__ and __LINE__
宏将内存调用打印到日志文件中。可以在以下位置找到这种策略:http://www.almostinfinite.com/memtrack.html 在第三方库中跟踪链接使用情况的最佳方法是什么?我假设我只能跟踪函数调用前后的内存使用情况,对吗?在我的宏/超载场景中,我可以简单地跟踪请求的大小以找出所需的内存量。我怎么能知道第三方库使用了多少?根据我的理解,跟踪“免费”并不能真正让您了解在任何特定时间使用了多少代码,因为它不一定会返回给操作系统。感谢您对此事的讨论。 我真的不想使用诸如Totalview或valgrind之类的任何内存分析工具,因为它们通常会执行许多其他事情(边界检查等),这似乎会使软件运行非常缓慢。这样做的另一个原因是,我希望它在某种程度上是线程安全的-该软件使用我认为可以生成进程的MPI。我将尝试实时进行分析,以便可以转出日志文件或其他进程可以读取的文件,以在软件运行时可视化内存使用情况。这也将主要在linux环境中运行。 谢谢     

解决方法

        也许valgrind和Massif工具?     ,        要跟踪Linux上我的程序的实时内存消耗,我只需阅读ѭ1。这是一个相当轻巧的操作,如果您要跟踪的第三方库进行了后续工作,则在您的情况下可以忽略不计。如果您想在第三方库工作期间获得内存信息,则可以将“ 2”文件读入独立线程或其他进程中。 (内存峰值很少在函数调用之前或之后追加!) 对于CUDA / GPU,我认为gDEBugger可以为您提供帮助。我不确定,但是内存分析仪不会对性能产生太大影响。     ,        您可以尝试使用Google \的PerfTools \'堆分析器: http://google-perftools.googlecode.com/svn/trunk/doc/heapprofile.html 它非常轻巧;它实际上替换了malloc / calloc / realloc / free以添加检测代码。它主要在Linux平台上进行了测试。 如果您使用调试符号进行编译,并且您的第三方库带有debug-version变体,则PerfTools应该做得很好。如果您没有调试符号库,则无论如何都应使用调试符号来构建代码。它将为您提供代码的详细编号,所有剩余的内容都可以作为第三方库的属性。     ,        如果您不想使用“外部”工具,则可以尝试使用以下工具: 跟踪 它为malloc,realloc和free安装处理程序,并将每个操作记录到文件中。有关代码用法示例,请参见我列出的Wikipedia。 dmalloc 这是一个可以在代码中使用的库,它可以发现内存泄漏,一次性错误和无效地址的使用。您也可以在编译时使用-DDMALLOC_DISABLE禁用它。 无论如何,我宁愿不采用这种方法。相反,我建议您在valgrind(或任何等效工具)下的测试服务器上运行应用程序时,尝试对应用程序进行压力测试,并确保您正在正确地进行内存分配,然后让应用程序在不检查任何内存分配的情况下运行最大限度地提高生产速度。但是,实际上,这取决于您的应用程序做什么以及您的需求是什么。     ,        也许链接器选项--wrap = symbol可以为您提供帮助。真正好的例子可以在这里找到: 人     ,        您可以使用Visual Studio 2010 Premium和Ultimate中包含的探查器。 它允许您在不同的性能评估方法之间进行选择,最可能对您有用的是CPU采样,因为它可以在任意时间间隔冻结程序并找出当前正在执行的功能,从而不会使程序运行速度大大降低。     ,我相信这个问题有两个非常不同的答案。一种用于C / C ++领域。还有一秒钟用于CUDA土地。 在CPU上: 我已经为自己的new和Delete编写了替代品。他们非常缓慢,并没有太大帮助。我已经使用了totalview。我喜欢TotalView进行OpenMP调试,但是我同意进行内存调试非常慢。我从未尝试过valgrind。我听说过类似的事情。 我遇到的唯一值得调试的内存调试工具是Intel Parallel Inspector的Memory Checker。注意:由于我是学生,所以能够以便宜的价格获得教育许可证。也就是说,这太神奇了。我花了十二分钟才发现内存泄漏被掩埋在五十万行代码中-我没有释放抛出的错误对象,而该错误对象却被我捕获并忽略。我非常喜欢这个软件,以至于当我的raid失败/ Win 7吞噬了我的计算机(想同时进行自动更新和raid重建)时,我停止了一切并重建了计算机,因为我知道重建双启动将花费更少的时间(48小时)以外的其他方式来查找内存泄漏。如果您不相信我的古怪说法,请下载评估版。 在GPU上: 我觉得你不走运。对于CUDA中的所有内存问题,我基本上不得不自行开发自己的工具和3 around等周围的包装器。这不是很漂亮。 nSight确实为您提供了一些东西,但在这一点上,仅是“这是您现在已经分配了多少权限”而已。在此令人遗憾的是,我使用CUDA遇到的几乎每个性能问题都是直接取决于我的内存访问模式(即我的线程块大小)。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res