gpt4 book ai didi

python - 如何在 Cython 中使用 `restrict` 关键字?

转载 作者:行者123 更新时间:2023-12-03 22:59:03 24 4
gpt4 key购买 nike

我在 CPython 3.6 中使用 Cython,我想将一些指针标记为“非别名”,以提高性能并在语义上明确。
在 C 中,这是通过 restrict 完成的( __restrict , __restrict__ ) 关键字。但是我如何使用 restrict在我的 cdef来自 Cython 的变量 .pyx代码?
谢谢!

最佳答案

Cython 没有对 restrict 的语法/支持-关键字(还?)。最好的办法是用 C 编写这个函数,最方便的可能是使用 verbatim-C-code,例如这里有一个虚拟示例:

%%cython
cdef extern from *:
"""
void c_fun(int * CYTHON_RESTRICT a, int * CYTHON_RESTRICT b){
a[0] = b[0];
}
"""
void c_fun(int *a, int *b)

# example usage
def doit(k):
cdef int i=k;
cdef int j=k+1;
c_fun(&i,&j)
print(i)
这里我使用 Cython 的(未记录的)定义 CYTHON_RESTRICT , 其中 is defined作为
// restrict
#ifndef CYTHON_RESTRICT
#if defined(__GNUC__)
#define CYTHON_RESTRICT __restrict__
#elif defined(_MSC_VER) && _MSC_VER >= 1400
#define CYTHON_RESTRICT __restrict
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define CYTHON_RESTRICT restrict
#else
#define CYTHON_RESTRICT
#endif
#endif
所以它不仅适用于符合 C99 的 c 编译器。然而,从长远来看,最好定义一些类似的东西,而不是依赖于未记录的功能。

关于python - 如何在 Cython 中使用 `restrict` 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67595319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com