问题标签 [typed-memory-views]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - 在 Cython 中访问内存类型的视图很慢
我正在尝试创建一个自定义版本的 numpy.argmin ,它遍历二维数组并找到最小值(这是一个自定义版本,因为我有一些特定于域的信息 numpy 没有,这将导致更快的执行)。
我的第一个实现是这样的:
这大约是 numpy 自己的 argmin 的两倍。问题在于访问内存视图。它很慢。一旦我添加了一些指针:
性能非常接近 numpy 的 argmin。
我注意到一维内存类型视图也发生了同样的情况,需要我在迭代之前用指针替换每个视图。
我在我的 pyx 文件的顶部有以下声明,只是为了确保。
cython - Cython - 返回任意长度的 Typed MemoryView
我编写了一个 Cython 函数,该函数将数字的列表/类型化内存视图作为参数并返回相同长度的类型化内存视图:
在对其进行了数千次测试后,我开始收到Segmentation fault (core dumped)
错误消息。我意识到这是一个内存管理问题,但我找不到如何管理函数返回的类型化内存视图的内存的示例。我发现的唯一有用信息是关于内存分配的信息,它建议将生命周期与result_arr
python 对象联系起来,并使用一种__dealloc__
方法来释放内存。
有没有一种方法来管理 memoryview 垃圾收集,它不涉及创建用于释放内存的 python 类?
编辑:我试过这个,它似乎以正确的方式释放内存。
为什么这行得通,是否有更好的方法来管理内存?
python - 在字节对象上获取指向python memoryview的指针
我有一个 pythonmemoryview
指向一个bytes
我想在 cython 中执行一些处理的对象。
我的问题是:
- 因为
bytes
对象不可写,cython 不允许从中构造类型化(cython)内存视图 - 我也不能使用指针,因为我无法获得指向 memoryview 开始的指针
例子:
在蟒蛇中:
在赛通中:
cdef char * my_ptr = &array[0]
无法编译并显示以下消息:Cannot take address of Python variable
cdef char[:] my_view = array
在运行时失败并显示以下消息:BufferError: memoryview: underlying buffer is not writable
如何解决这个问题?
python - 尝试使用 Cythons 内存视图时出现语法错误
我正在关注这个关于 memoryviews 的指南。
但是当我在 Jupyter 的快速入门部分尝试代码时,它给出了这个错误:
我什至不知道如何搜索此错误,因为它与语法相关,但 Cython.org 建议使用此语法。我认为这可能是因为我在错误的地方使用了这段代码(而不是在 Jupyter 平台上)。
任何建议,将不胜感激。
python - 类型转换错误 '__Pyx_memviewslice' 到 'double *' Cython,什么是等价的?MKL 功能范围代码
我编写了一个 Cython 程序,调用 Intel MKL 进行矩阵乘法,目的是使其并行。它基于链接到 BLAS 的旧 SO 帖子,并使用了一堆我从未见过的 Cython 方法,但它可以正常工作,而且它比 NumPy(也链接到 MKL)慢得多。为了加快速度,我使用了典型的 Memoryview 格式(它使用ndarray
np.float64_t
数据类型进行几个操作)。但现在它不再使用double[::1]
Memoryviews 工作。这是生成的错误:
'type cast': cannot convert from '__Pyx_memviewslice' to 'double *'
由于类型转换不起作用,MKL 函数只能看到 5 个参数中的 3 个:
error C2660: 'cblas_ddot': function does not take 3 arguments
这是 .PYX 代码:
我敢肯定,SO 上的某个人很容易指出这一点。如果您看到可以改进的地方,请告知 - 这是被黑客攻击和切碎的,我认为甚至不需要 i / j 循环。最干净的例子:https ://gist.github.com/JonathanRaiman/f2ce5331750da7b2d4e9我最终编译的实际上要快得多(2x),但没有给出任何结果,所以我将它放在另一篇文章中(这里:直接调用 BLAS / LAPACK使用 SciPy 界面和 Cython - 以及如何添加 MKL)
非常感激。
python-3.x - 在 Cython 脚本中使用 memset 而不是 np.zeros 来提高速度
我开始研究 Fortran 库 (BLAS/LAPACK) 的 SciPy 接口,可以在这里看到:Calling BLAS / LAPACK directly using the SciPy interface and Cython并想出了一个解决方案,但不得不求助于使用numpy.zeros
它实际上杀死了任何速度直接调用 Fortran 代码的好处。问题是 Fortran 代码需要一个 0 值的输出矩阵(它在内存中就地处理矩阵)以匹配 Numpy 版本(np.outer
)。
所以我有点困惑,因为 Python 中的 1000x1000 零矩阵只需要 8us(使用 %timeit 或 0.008ms)那么为什么添加 Cython 代码会杀死运行时,注意到我也在 memoryview 上创建它?(基本上 1000 x 1000 矩阵乘法从 3ms 到 8ms 左右)。然后在 SO 上搜索后,我在其他地方找到了一个使用memset
最快的数组更改机制的解决方案。因此,我将引用帖子中的整个代码重写为更新的memoryview
格式,并得到了类似这样的内容(Cythoncyblas.pyx
文件):
测试脚本
因此,这解决了我将输出矩阵值重置为第 125 行的问题,该问题仍然存在(已解决见下文)。我认为将memset
长度参数设置为 M*N 会清除内存中的 1000*1000 ,但显然不是。
有人知道如何使用 将整个输出矩阵重置为 0memset
吗?非常感激。
python - 在 cython 中如何实现更好的循环速度性能?
我已经在 python 中启动了一个项目,该项目主要由循环组成。几天前,我读到了 cython,它可以帮助您通过静态类型获得更快的代码。我开发了这两个函数来检查性能(一个在 python 中,另一个在 cython 中):
毕竟我使用下面的代码来测试性能:
但是我没有发现任何明显的改进。我还没有使用 Typed-Memoryviews。任何人都可以提出有用的解决方案来提高速度或帮助我使用 typed-memoryview 重写代码吗?
cython - 如何访问在 cython 中声明的类的类型化内存视图元素?
我是初学者,我相信这个问题太简单了。我正在尝试在 cython 中测试内存视图以更好地了解它们。在我的代码中,我将每个内存视图元素(如[1,2]
)作为cy
类元素传递move
。
当我打印结果时。我明白了:
我需要cy
班级打印一份清单。我该如何解决?当我使用此代码时,我遇到了另一个问题:
运行此代码后,我总是收到此错误:
TypeError: a bytes-like object is required, not 'int'
. 是什么导致了这个错误,我该如何解决这个错误?
python - 循环检查两个内存视图的有效方法是什么?
我想通过使用 memoryviews 来加速我的代码。这是我使用的两个类:
这是我要检查类是否有效的代码:
我希望打印 100 个,ok
但我什么也没得到。我知道如果我使用list(move) == list(ch.move)
我可以获得预期的输出,但我不希望循环中的转换开销。
谁能帮我一个有效的方法?如果有人有任何其他可以提高代码速度的建议,我们将不胜感激。
python - 为什么与 python 1 相比,cython 循环的性能在速度方面有所下降?
我正在尝试通过使用 cython 功能来提高我的 python 代码的速度。我的python代码由类和py_child
函数组成,如下所示:py_parent
py_backup
这与cython
使用 memoryviews 作为一些变量的实现相同:
现在我想评估函数 cy_backup、py_backup 的代码速度。所以我使用以下代码:
当我运行程序时,我对结果感到惊讶:
我期待 cython 比 python 快得多,特别是在使用 memoryviews 时。
为什么 cython 中的循环运行速度比 python 中的循环慢?
如果有人对加速 cython 中的代码有任何建议,我们将不胜感激。
提前我为我的问题道歉,包括太多的代码。