作者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/m.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