SORU
13 ŞUBAT 2013, ÇARŞAMBA


Dağıtma tabanlı uzantıları LAPACK kullanarak Cython

Cython uzantıları içerir ve LAPACK (BLAS) kullanan bir Python modülü yazıyorum. Ya clapack lapacke veya gerekirse f2c f2py eriyiği kullanarak açığım. Önemli olan Python çağrı yükü olmadan sıkı döngüler lapack blas Cython gelen rutinleri aramak mümkün duyuyorum.

Bir örnek here buldum. Ancak, bu örnek, ADAÇAYI bağlıdır. Benim numpy modülü yüklü olduğu yere yüklenebilir olmak istiyorum. Kullanım arayüzleri en iyi kombinasyonu nedir ve minimal setup.py dosya derleme için numpy gerekli bilgileri alınamadı neye benzerdi?

DÜZENLEME: Ne ben ne hale geldi. Benim macbook üzerinde çalışıyor, ama ne kadar taşınabilir olduğu hakkında hiçbir fikrim yok. Mutlaka daha iyi bir yolu var.

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy
from Cython.Build import cythonize
from numpy.distutils.system_info import get_info

# TODO: This cannot be the right way
blas_include = get_info('blas_opt')['extra_compile_args'][1][2:]
includes = [blas_include,numpy.get_include()]

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = cythonize([Extension("cylapack", ["cylapack.pyx"],
                                       include_dirs = includes,
                                       libraries=['blas','lapack'])
                   ])
)

Bu cblas.h olarak, benim macbook, clapack.h başlık dosyası ile aynı dizinde olduğu için çalışır. Sonra pyx dosyama bunu yapabilirim:

ctypedef np.int32_t integer

cdef extern from "cblas.h":
    double cblas_dnrm2(int N,double *X, int incX)
cdef extern from "clapack.h":
    integer dgelsy_(integer *m, integer *n, integer *nrhs, 
    double *a, integer *lda, double *b, integer *ldb, integer *
    jpvt, double *rcond, integer *rank, double *work, integer *
    lwork, integer *info)

CEVAP
9 HAZİRAN 2013, Pazar


ADAÇAYI, benim bildiğim, Cython için bir arayüz. Ayrıntılı olarak burada derlemek için iyi olmalı distutils kullanarak: http://docs.cython.org/src/quickstart/build.html

Eğer hala taşınabilirlik diye merak ediyorsanız, bu sayfa yardımcı olacaktır: http://docs.cython.org/src/userguide/source_files_and_compilation.html

Ayrıca, bu satırları, setup.py bir dosya içinde olduklarını varsayarsak:

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 

bu derleme yapıyor. Ayrıca, bu satırları (docs):

setup( 
    cmdclass = {'build_ext': build_ext}, 
    ext_modules = [Extension("grouptitle", ["file.c", "file2.c"])] 
) 

C kodu başvuru ve Cython avantajları derlenecek. Şimdi ne var yani, herhangi bir basit alınamıyor yani temel gereksinimleri vardır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Chrome

    Google Chrom

    1 EYLÜL 2008
  • Justin Schenck

    Justin Schen

    24 Kasım 2006
  • KRQE

    KRQE

    6 AĞUSTOS 2007