2015-03-25 4 views
2

Я работаю над переписыванием модуля python, первоначально написанного на C, используя python-C api для Cython. В модуле также используется NumPy. Главная задача проекта - поддерживать текущую скорость модуля, а также работать для всех типов данных Numpy. Я думаю использовать плавный тип данных, чтобы сделать его общим, но я беспокоюсь из-за его узкого места воздействия на производительность. Есть ли другой метод, который можно использовать вместо сплавленного типа, который я могу использовать для достижения как скоростного, так и общего кода.Альтернативы сплавленного типа в cython

+6

* «Я беспокоюсь из-за его узкого эффекта на производительность» * - вы действительно измерили это? Можете ли вы привести конкретный пример? –

ответ

6

Игнорирование совершенно правильный комментарий ali_m по поводу уже ли вы на самом деле измеряется ваши проблемы с производительностью ...

http://docs.cython.org/src/userguide/fusedtypes.html#selecting-specializations

«Для функции CDEF или cpdef вызывается из Cython это означает, что специализация разобрался в время компиляции. Для функций def аргументы проверяются по методу во время выполнения, и для выяснения, какая специализация необходима, используется подход с максимальным усилием ».

По существу, если вы звоните из Cython, не должно быть проблем - отдельные функции генерируются и используются без накладных расходов. Если вы звоните с Python, то, очевидно, нужно остановиться и подумать о том, какой из них вызывать.

Но измерьте свою производительность, прежде чем беспокоиться об этом! (И прочитайте руководство, которое достаточно четко ответит на ваш вопрос.)