Domanda

I'm using Cython to make my Python code more efficient. I have read about the Cython's function cython -a filename.pyx to see the "typedness" of my cython code. Here is the short reference from Cython web page. My environment is Windows 7, Eclipse PyDev, Python 2.7.5 32-bit, Cython 0.20.1 32-bit, MinGW 32-bit.

Here is the report for my code:

enter image description here

So does the color yellow mean efficient or non-efficient code? The more yellow it is the more....what?

Another question, I can click on the numbered rows and the following report opens (e.g. row 23):

enter image description here

What does this mean? P.S. If you can't see the image well enough --> right click --> view image (on Windows 7) ;)

Thnx for any assistance =)

UPDATE:

In case somebody wants to try my toy code here they are:

hello.pyx

import time

cdef char say_hello_to(char name):
    print("Hello %s!" % name)

cdef double f(double x) except? -2:
    return x**2-x

cdef double integrate_f(double a, double b, int N) except? -2:
    cdef int i
    cdef double s, dx
    s = 0
    dx = (b-a)/N
    for i in range(N):
        s += f(a+i*dx)
    return s * dx

cpdef p():
    s = 0
    for i in range(0, 1000000):
        c = time.time()
        integrate_f(0,100,5)
        s += time.time()- c
    print s

test_cython.py

import hello as hel

hel.p()

setup.py

from distutils.core import setup
from Cython.Build import cythonize

setup(
  name = 'Hello world app',
  ext_modules = cythonize("hello.pyx"),
)

From command line prompt I used the command (to generate C, pyd etc files):

python setup.py install build --compiler=mingw32

To generate the report I used:

cython -a hello.pyx
È stato utile?

Soluzione

This is more or less what you wrote. To be more precise:

Yellowish line signal Cython command which are not directly translated to pure C code but which work by calling CPython API to do the job. Those line includes:

  • Python object allocation
  • calls to Python function and builtins
  • operating on Python high level data stuctures (eg: list, tuples, dictionary)
  • use of overloaded operation on Python types (eg: +, * in Python integers vs C int)

In any case, this is a good indication that thing might be improved.

Altri suggerimenti

I think I perhaps got it myself already. Someone can correct me if I'm mistaken:

The more "yellowish" the line is, then less efficient it is

The most efficient lines are the white-colored lines, because these are translated into pure C-code.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top