[问题] 同时对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