Модули, скомпилированные с /openmp, нельзя импортировать?

У меня есть очень простой код cython, который использует prange, который отлично работает в Linux. Однако, когда я пытаюсь сделать это в Windows. Я столкнулся с проблемой, что его можно скомпилировать, но нельзя импортировать:

ImportError: DLL load failed: This application has failed to start because the a
pplication configuration is incorrect. Reinstalling the application may fix this
problem.

Более того, в windows я не могу from cython.parallel import threadlocal?! странный...

Кто-нибудь может указать направление?

Система работает нормально: linux64, компилятор gcc, пакеты: Python 2.7, cython 0.16

проблема в системе: Win64, компилятор: MSVC VS2008, пакеты: Python 2.7, cython 0.16

Вот мой простой cython pyx:

cimport cython
from cython.parallel import prange

def f(int n):
    cdef int i
    cdef int sum = 0
    for i in prange(n, nogil=True):
        sum += i
    print sum

Вот мой setup.py:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy as np


setup(
    cmdclass = {'build_ext': build_ext},
    include_dirs = [np.get_include()], 
    ext_modules = [Extension("pcython1",  ["pcython1.pyx"],extra_compile_args=['/openmp',],),]
)

person Wang    schedule 02.08.2012    source источник
comment
Код нормально работает под Windows, если prange заменить на range?   -  person DaveP    schedule 03.08.2012
comment
@DaveP Спасибо за ваш ответ! Без /openmp работают и range, и prange. С ним ни один из них не работает.   -  person Wang    schedule 04.08.2012
comment
Получается, если в системе установлена ​​не MS visual studio, а только VC++ redustributable, то работает нормально... Запутался... И загрузки процессора совершенно разные между range и prange версией. Итак, openMP работает, просто он не может работать в системе с установленными отладочными dll, я думаю.   -  person Wang    schedule 04.08.2012


Ответы (2)


Из-за ошибки установщика VS2008 amd64_microsoft.vc90.openMP не устанавливается в winSxS. Установка среды выполнения openMP решит эту проблему.

подробнее см. этот вопрос: Как правильно настроить VS2008 для программирование x64?

person Wang    schedule 04.11.2012

Используйте MinGW (см. этот вопрос для правильной настройки mingw с cython), затем обновите свой setup.py до:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy as np

ext_modules = [Extension("convolve_cy", ["convolve_cy.pyx"],
                         extra_compile_args = ["-O3", "-fopenmp"],
                         extra_link_args=["-fopenmp"])]

setup (
    name = 'performance test app',
    cmdclass = {'build_ext': build_ext},
    include_dirs = [np.get_include()],
    ext_modules = ext_modules,
)

Это работает на многоядерной 64-битной машине Windows7 с Python 2.7 и cython 2.0.

person Rabih Kodeih    schedule 22.01.2014