看板 C_and_CPP 關於我們 聯絡資訊
各位版友大大們好 小魯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迴圈有效率的方式 怎樣做可以最快呢 @@? 感謝大大的幫助 >///< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.45.239 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1586783543.A.8DB.html ※ 編輯: doasgloria (114.25.45.239 臺灣), 04/13/2020 21:13:36
LiloHuang: numba 試了還是不行? 04/13 22:38
LiloHuang: 如果能跑多個 thread, 就用用 tbb::parallel_for 看看 04/13 22:41
LiloHuang: 但可能得特別避開一下 false sharing 造成的性能損失 04/13 22:43
hsnuyi: 首先 把A做出來後下一步是啥? 有一定要建立A嗎? 直接讀取B 04/13 23:52
hsnuyi: 不行嗎? 04/13 23:52
hsnuyi: 再者 你的隨機是怎樣的隨機? 04/13 23:54
hsnuyi: 最後 B有可能超過10億個元素 你有試過了嗎? 04/13 23:57
SocketAM2: 我的直覺是memcpy再random swap 04/14 00:15
SocketAM2: 如果你的隨機不需AB一一對應那應該可以更簡單一點 04/14 00:21
loveme00835: 你知道這樣一個陣列有多大嗎?xD 04/14 10:39
qscgy4: 我覺得你要先擔心你的記憶體夠不夠? 04/14 11:30
pziyout: 假設每一維度有 3000 個,三維共有 27x10^9 個整數,兩個 04/14 15:26
pziyout: 陣列的整數共需 208x10^9 位元組,你的記憶體夠大嗎? 04/14 15:32
doasgloria: 不好意思沒寫清楚 實際上大概是 3500*3500*3 例子有誤 04/14 16:24
doasgloria: 有用NUMBA做 PYTHON試過最快的是NUMBA 但還希望加快 04/14 16:25
LiloHuang: 聽聞先前提的 numba 效率很快備感欣慰, 再試試 tbb 吧 04/14 16:57
LiloHuang: Intel VTune 有免費 license 也可以拿來 profiling 04/14 17:01
plsmaop: 如果是連續的話就 memcpy 啊 04/15 19:33
plsmaop: 啊沒看到是隨機分佈,抱歉 04/15 19:33
lc85301: 怎麼聽起來有點 sparse matrix 的感覺? 04/16 13:27
MOONRAKER: 就講了要塞滿怎麼可能sparse 04/18 16:04