吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1314|回复: 1
收起左侧

在已有对应的.lib/.a文件而无源代码的情况下,如何恢复.dll/.so文件的符号信息?

[复制链接]
.·.·. 发表于 2019-7-31 05:11
350吾爱币
我把这个问题同时送去了知乎https://www.zhihu.com/question/337047143跟相关的MXNet论坛https://discuss.mxnet.io/t/anywa ... libmxnet-dll/4548/2
至今为止只有浏览数没有回复数

想了想如果这里也找不到答案,大约是真的找不到了

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

问题的背景是这样的
我有一个炼丹用的python包mxnet,每次import mxnet as mx的时候都需要十几秒的时间
理论上……我是知道如何加速mxnet的加载的,比如mxnet加载缓慢的原因是libmxnet.dll里面包含了太多无用的CUDA_ARCH。只要github上拿下源代码,从源代码直接编译一份,保证import在一秒内结束
然而问题是,mxnet会升级,而我不可能每次升级都去mxnet那里下好源代码重新编译。

于是我去nvidia论坛提问,如何去掉.dll里面不需要的ARCH
他们给了一个解决方案,nvprune
然而nvprune是单文件版,不能同时输入两个文件,并且nvprune需要输入的文件是relocatable的——我能拿到的.dll都是被删掉了符号表导致不能relocate的版本,于是nvprune自然而然地失败了。

幸运地是,除了libmxnet.dll,下载的mxnet自带一个应当是包含了全部libmxnet.dll符号表内容的libmxnet.lib——然而问题是,我并不知道如何把这样的.dll跟.lib文件正确地结合起来,生成一个relocatable的.dll文件

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我真正关心的问题是,应该如何削减libmxnet.dll中无用的cuda_arch(对windows以及对linux,因为我不确定日后会不会专门弄个机子装linux来炼丹)
目前能找到的路径是,只要我们能把.lib文件的符号信息正确地送进.dll,我们就能使用nvprune修剪.dll文件,去掉所有无用的结构
最后这个应当是论坛里的大牛所熟悉的范畴,也是我悬赏的内容
希望有大神看到这个悬赏帖子吧……

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如果你回答这个问题,你的答案很可能会因为我的转载被包括且不限于全世界每一个用MXNet炼丹的人看见
我会注明究竟是谁完成了这个工作(并把链接指向这里(如果他们真的点过来看的话……))

因此你应当理解,不要只送一个来源未知的.exe上来告诉我这玩意works fine...


我能接受的答案格式应该是
(1)mingw-w64工具(反正我安装mingw64版本的gcc是毫不吃力的,这个移植去Linux也最方便)
或者(2) C语言代码(同时解决.dll/.so的问题)
或者(3) C语言代码(解决.dll问题)
或者(4) 告诉我应当如何用一些高知名度的工具进行操作

优先级(1)>(2)>(3)>(4)
这里的优先级指的是,在一个属于第(j)类的解决方案发布24*(k-j)小时内有人发布了第(k)类方案,则认为发布第(k)类方案的人活得悬赏
也就是说如果X给出了一系列复杂的OD操作告诉我如何恢复符号表,而23小时之后Y给出了一个针对.dll文件的C代码,又过了23小时Z把这个代码扩展到了针对.so的情形,而又过了25小时之后终于有大神给出了mingw-w64工具的脚本
……悬赏属于Z(所以……如果针对.so引入相对应的.a文件记录的符号表没那么复杂,最好在给出windows版本的同时给出linux版本),然而解决这个问题的荣誉属于大家


测试:
我会使用如下命令进行测试:
nvprune -arch sm_61 libmxnet.dll -o 1.dll
(如果不进行修改,nvidia会提示nvprune fatal   : Input file 'libmxnet.dll' not relocatable)

(但如果修改失败,nvidia或许会给出另一个提示:nvprune warning : No device code that matched architecture, so stripped out all device code)

linux的话,我会用我的gentoo linux进行测试
曾经用gentoo编译mxnet,大概编译了一两天&&两三遍的样子
反正……整个五一,都奉献给了gentoo...然后我就把gentoo彻底封印了
(现在我的电脑,没有E盘……)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

大鸽鸽 发表于 2019-8-8 21:46
帮顶  路过的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 05:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表