栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么multiprocessing.sharedctypes分配这么慢?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么multiprocessing.sharedctypes分配这么慢?

由于第二个链接中给出的原因,这很慢,并且解决方案实际上非常简单:
绕过(慢速)

RawArray
切片分配代码,在这种情况下,该 代码
每次从源数组中低效地读取一个原始C值来创建一个Python对象,然后将其直接转换回原始C,以存储在共享数组中,然后丢弃临时Python对象,并重复
1e8
次数。

但是您不需要那样做;与大多数C级事物一样,它

RawArray
实现了缓冲区协议,这意味着您可以将其转换
memoryview
为底层原始内存的视图,该视图以类似于C的方式实现大多数操作,并尽可能使用原始内存操作。因此,与其做:

# assign memory, very slow%time temp[:] = np.arange(1e8, dtype = np.uint16)Wall time: 9.75 s  # Updated to what my machine took, for valid comparison

用于

memoryview
将其作为类似于原始字节的对象进行操作并进行分配(
np.arange
已经实现了缓冲区协议,并且
memoryview
的slice分配运算符无缝使用它):

# C-like memcpy effectively, very fast%time memoryview(temp)[:] = np.arange(1e8, dtype = np.uint16)Wall time: 74.4 ms  # Takes 0.76% of original time!!!

注意,后者的时间是毫秒,而不是秒;使用

memoryview
包装进行复制以执行原始内存传输只需不到1%的时间即可完成
RawArray
,默认情况下采用折叠方式即可!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625150.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号