作者swampni ()
看板Python
标题[问题] Numpy串接外部dll
时间Mon Oct 15 00:40:17 2018
各位大大好
最近因为有需要做大量的矩阵运算
且需要使用大量的回圈
所以numpy会非常的慢
也因此选择使用c++写一个外部的dll然後导入python
但是
在过程中发现使用64bits与32bits的DLL在速度上有非常大的差异
32bits大概比64bits的DLL快5倍
但原本python的开发环境是64bits
有点不想要换成32bits
而且这本身感觉就有点奇怪
不知道是不是我哪里弄错了呢?
希望各位大大救救我(跪
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.176.50.59
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1539535220.A.3D5.html
1F:推 Sunal: 其实numpy就已经是用c加速了 10/15 07:57
是没有错 numpy本来就用c加速
但是我的情形是需要做大量的单一矩阵对单一矩阵的运算
所以会用到很多回圈而且没有办法vectorize
所以才会想说用外部dll来加速
※ 编辑: swampni (180.176.50.59), 10/15/2018 11:56:38
2F:推 sma1033: 回圈计算很慢不是结构性的问题吗?应赅要先消除回圈? 10/15 15:12
3F:→ sma1033: 把可以分开平行算的东西都拆开来平行算不是比较有效吗? 10/15 15:14
我要算的东西有点像是一张rgb图
然後我要算每一个PIXEL对另外一个PIXEL的关系
但这个关系的函式很复杂
没有办法利用vectorize的方式一次大量算
所以才会想说能不能用外部DLL的方式来加速
实作上也是证明可以
那关於我的问题我後来发现好像是我32bits跟64bits编译用的编译器不同的关系
32bits用g++
64bits用cl
後来用cl编了一次32bits的也是很慢
但是最糟糕的就是我怎样都没办法用g++编出64bits的DLL
载了好几个不同版本的mingw64都不行
所以虽然在这里问好像怪怪的
但有大大可以指点一下要怎麽用g++编译出64bits的DLL吗?
另外用cl跟g++在执行速度上会有如此巨大的差异又可能是甚麽原因呢?
也谢谢上面两位愿意给我意见^ ^
※ 编辑: swampni (180.176.50.59), 10/16/2018 00:30:31
4F:→ neil987: 这应该在C/CPP板问 10/16 13:35
5F:→ neil987: 然後找找看有没有g++64.exe 10/16 13:37
6F:推 yoyololicon: 要不要换用DL的frame work,pytorch之类?会比numpy快 10/22 21:36