【问题标题】:Why does ctypes.memmove take constant time for sizes of different magnitudes为什么 ctypes.memmove 对于不同大小的大小需要恒定的时间
【发布时间】:2021-06-27 01:59:56
【问题描述】:

当我运行以下代码时,

import numpy as np
import ctypes

src = np.zeros(10000, dtype=np.uint8)
dest = np.zeros(10000, dtype=np.uint8)

%timeit ctypes.memmove(dest.ctypes.data, src.ctypes.data, 10)
%timeit ctypes.memmove(dest.ctypes.data, src.ctypes.data, 10000)

在我的笔记本电脑上,输出是

42.2 µs ± 5.62 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

用于复制 10 个字节并且是

41.4 µs ± 3.48 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

用于复制 10000 个字节。

我的问题是:为什么 ctypes.memmove 对于不同大小的大小需要恒定的时间?

【问题讨论】:

    标签: python memory memmove


    【解决方案1】:

    因为调用开销会占用复制时间。在 3GHz 系统上,10,000 字节将在大约一微秒内复制。试试 10,000,000 字节。

    【讨论】:

    • 确实如此。谢谢!一个后续问题:如果我需要复制非连续内存 - 例如,每 4 个字节复制 3 个字节并跳过 1 个字节 - 到一个连续的内存位置,最好的方法是什么?我认为 memmove 并不理想,因为对它的许多调用以非常小的大小会产生很多开销。
    • 即使在汇编语言中也没有快速的方法可以做到这一点,任何不得不将 RGB24 转换为 RGB32 的人都知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2012-10-07
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多