2016-07-07 6 views
2

내 신경망을 실행하는 데 더 많은 성능이 필요하므로 cython으로 구축하는 것이 좋습니다. 다음과 같이 코드를 작성합니다.python과 같은 외부 python libs와 함께 cython에서 파이썬 코드를 컴파일하는 방법

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

setup(
    ext_modules = cythonize("my_code.pyx") 
) 

하지만 외부 파이썬 파일을 빌드할까요? pybrain, skimage 및 PIL 같은 경우. 그렇지 않은 경우 cython에 강제로 빌드하는 방법.

+1

Cython은 확실히 프로그램의 측면을 가속화합니다. 하지만 먼저 병목 현상을 확인 했습니까? 아마도 코드의 1 %가 느린 속도의 99 %를 일으킬 것입니다. – dodell

+1

Cython 풀의 잘못된 끝으로 이동하고 있습니다. 작은 코드 조각을 선택하고 그 중에서 가장 빠른 속도를 얻는 방법을 배웁니다. 예를 들어 여러 번 반복되는 작은 함수들. 어떤 종류의 코드가 최선의 후보인지 확인하려면 문서를 읽으십시오. – hpaulj

답변

1

확장자로 setup.py을 특별히 추가하지 않는 한 외부 파이썬 파일을 cython 화하고 컴파일하지 않습니다. 내가 아는 한이 일을하는 사소한 방법은 없습니다.

이것은 외부 파일에 대한 모든 호출이 '파이썬 공간'에서 처리되므로 Cython의 모든 잠재력을 사용할 수 없음을 의미합니다. 예를 들어, 외부 파일에 대한 모든 호출은 유형 검사가 될 것이므로 많은 시간을 낭비하게됩니다. cython -a yourfile.pyx을 사용하여 파일을 cython 화하고 생성 된 C 코드를 살펴보면이 사실을 알 수 있습니다. 노란색이 많을수록 pythony 코드가 있습니다.

  1. 찾기 라이브러리/사이 썬 또는 C 수준의 액세스를 제공하는 패키지 :

    당신은 다음과 같은 옵션이 있습니다. 불행하게도 Cython을 사용하여 좋은 것들을 발견 할 수있는 가능성은 낮으며 C 라이브러리를위한 래퍼를 만드는 것은 많은 일이다. themselve가 C로 구현 된 패키지 (예 : numpy)는 이미 상당히 빠르다는 점에 유의하십시오. 나는 이것이 당신의 패키지에 어떻게 작용 하는지를 모른다. pybrains는 내가 처음 보았던 이유에서 순수한 비단뱀 인 것 같습니다.

  2. 사용하려는 패키지의 소스 코드를 가져 와서 Cython으로 직접 컴파일하십시오. 이것은 엄청난 노력 일 수도 있고 시간 가치가없는 것일 수도 있습니다.
  3. lineprofiler/kernprof과 같은 프로파일 러를 사용하여 병목 현상을 찾습니다 (최적화시 첫 번째 단계는 입니다. 항상이되어야 함). 런타임 병목 현상 만 해결하십시오.

저는 개인적으로 옵션 3을 사용합니다. 옵션 1과 2 모두가 의심스러운 결과가있는 측면에서 많은 작업이 필요할 수 있으므로 개인적으로 옵션 3과 함께 갈 것입니다.