使用不安全的 Python 实现 100 倍的加速

主要观点:通过“不安全 Python”将 numpy 代码加速 100 倍,以 pygame 写游戏时发现 OpenCV 图像缩放比 pygame 快,用pygame.surfarray.pixels3d获取像素数组给cv2.resize后速度变慢,研究发现是 numpy 数组的步幅(strides)导致性能差异巨大,SDL 布局与 numpy 默认布局不同,通过创建具有特定步幅的 numpy 数组并传递给cv2.resize可恢复速度,还展示了一些其他函数的加速效果,“不安全 Python”体现了 Python 与 C 的互补及在高性能领域的主导地位。
关键信息

  • pygame写游戏,OpenCV图像缩放比pygame快。
  • pygame.surfarray.pixels3d获取像素数组给cv2.resize后变慢。
  • numpy 数组步幅不同导致性能差异巨大。
  • SDL 布局与 numpy 默认布局差异及原因。
  • 通过特定方式让cv2.resizepygame表面数据上运行变快。
  • “不安全 Python”体现 Python 与 C 的互补及在高性能领域的主导地位。
    重要细节
  • 给出不同操作的基准测试时间,如pg.Surface with smoothscale耗时 0.2002 秒,np.zeros with cv2耗时 0.0145 秒等。
  • 详细解释 numpy 数组的内存布局及步幅概念,如对于 3D 数组base + x*3*height + y*3 + z等。
  • 展示创建具有特定步幅的 numpy 数组并与cv2.resize配合的代码及效果。
  • 说明“不安全 Python”中涉及的内存安全问题及与 Rust“unsafe”的区别。
  • 提及 Python 与 C 的互补关系及在高性能领域的应用,如用 Cython 生成扩展等。
阅读 15
0 条评论