[問題] 同時對array的多個位置取值的方法

作者: doasgloria (青柳立夏)   2020-04-13 21:12:18
各位版友大大們好
小魯C++很差 很久沒碰
只是需要很有效率實現某個功能
Python的速度感覺還不敷使用
想洽詢看看C++是否有更快的方法 !
想做的是這樣
有兩個3維的array A跟B, 大概像 int [x][y][z]
x,y,z都很大可能到幾千~
A一開始是空的 B的每個位置都有整數數值
要把A的每個位置, 根據已經有的索引
用B的某個位置的數字填進來
比如 A[0][0][0] = B[100][200][300]
每個位置之間的對應是屬於隨機分布~
直到 A[x][y][z], 把A整個填滿~
想問問 如果要用比三層for迴圈有效率的方式
怎樣做可以最快呢 @@?
感謝大大的幫助 >///<
作者: LiloHuang (十年一刻)   2020-04-13 22:38:00
numba 試了還是不行?如果能跑多個 thread, 就用用 tbb::parallel_for 看看但可能得特別避開一下 false sharing 造成的性能損失
作者: hsnuyi (羊咩咩~)   2020-04-13 23:52:00
首先 把A做出來後下一步是啥? 有一定要建立A嗎? 直接讀取B不行嗎?再者 你的隨機是怎樣的隨機?最後 B有可能超過10億個元素 你有試過了嗎?
作者: SocketAM2 (AM2)   2020-04-14 00:15:00
我的直覺是memcpy再random swap如果你的隨機不需AB一一對應那應該可以更簡單一點
作者: loveme00835 (髮箍)   2020-04-14 10:39:00
你知道這樣一個陣列有多大嗎?xD
作者: qscgy4 (有點厲害)   2020-04-14 11:30:00
我覺得你要先擔心你的記憶體夠不夠?
作者: pziyout (pziyout)   2020-04-14 15:26:00
假設每一維度有 3000 個,三維共有 27x10^9 個整數,兩個陣列的整數共需 208x10^9 位元組,你的記憶體夠大嗎?
作者: doasgloria (青柳立夏)   2020-04-14 16:24:00
不好意思沒寫清楚 實際上大概是 3500*3500*3 例子有誤有用NUMBA做 PYTHON試過最快的是NUMBA 但還希望加快
作者: LiloHuang (十年一刻)   2020-04-14 16:57:00
聽聞先前提的 numba 效率很快備感欣慰, 再試試 tbb 吧https://software.intel.com/en-us/system-studioIntel VTune 有免費 license 也可以拿來 profiling
作者: plsmaop (plsmaop)   2020-04-15 19:33:00
如果是連續的話就 memcpy 啊啊沒看到是隨機分佈,抱歉
作者: lc85301 (pomelocandy)   2020-04-16 13:27:00
怎麼聽起來有點 sparse matrix 的感覺?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2020-04-18 16:04:00
就講了要塞滿怎麼可能sparse

Links booklink

Contact Us: admin [ a t ] ucptt.com