小编Max*_*xim的帖子

Cython内联函数,以numpy数组作为参数

考虑这样的代码:

import numpy as np
cimport numpy as np

cdef inline inc(np.ndarray[np.int32_t] arr, int i):
    arr[i]+= 1

def test1(np.ndarray[np.int32_t] arr):
    cdef int i
    for i in xrange(len(arr)):
        inc(arr, i)

def test2(np.ndarray[np.int32_t] arr):
    cdef int i
    for i in xrange(len(arr)):
        arr[i] += 1
Run Code Online (Sandbox Code Playgroud)

我使用ipython来测量test1和test2的速度:

In [7]: timeit ttt.test1(arr)
100 loops, best of 3: 6.13 ms per loop

In [8]: timeit ttt.test2(arr)
100000 loops, best of 3: 9.79 us per loop
Run Code Online (Sandbox Code Playgroud)

有没有办法优化test1?为什么不把cython内联这个函数告诉?

更新:其实我需要的是这样的多维代码:

# cython: infer_types=True
# cython: boundscheck=False
# cython: wraparound=False …
Run Code Online (Sandbox Code Playgroud)

python performance numpy inline cython

17
推荐指数
3
解决办法
8710
查看次数

Cython可以加速对象迭代的数组吗?

我想使用cython加速以下代码:

class A(object):
    cdef fun(self):
        return 3


class B(object):
    cdef fun(self):
        return 2

def test():
    cdef int x, y, i, s = 0
    a = [ [A(), B()], [B(), A()]]
    for i in xrange(1000):
        for x in xrange(2):
            for y in xrange(2):
                s += a[x][y].fun()
    return s
Run Code Online (Sandbox Code Playgroud)

想到的唯一事情是这样的:

def test():
    cdef int x, y, i, s = 0
    types = [ [0, 1], [1, 0]]
    data = [[...], [...]]
    for i in xrange(1000):
        for x in xrange(2):
            for y in …
Run Code Online (Sandbox Code Playgroud)

python cython

9
推荐指数
1
解决办法
2920
查看次数

分析OpenCL内核

我正在尝试优化我的OpenCL内核,而我现在所拥有的只是NVidia Visual Profiler,它似乎相当受限制.我想看看内核的逐行配置文件,以便更好地理解合并等问题.是否有办法获得比Visual Profiler提供的更全面的分析数据?

profiling opencl

7
推荐指数
2
解决办法
8111
查看次数

标签 统计

cython ×2

python ×2

inline ×1

numpy ×1

opencl ×1

performance ×1

profiling ×1