2013-12-17 2 views
3

У меня есть простой план для моей программы: все синтаксический анализ и предварительная обработка данных с помощью Python, а затем передайте много структур и вызовите функцию ONCE number-crunching, которую я собираюсь записать на C Вот мой вопрос: что будет быстрее (с точки зрения скорости выполнения)? Чтобы вызвать функцию C с помощью ctypes или записать ее с помощью cython?cython vs ctypes функция скорость выполнения

+1

Использования Cython против ctypes вызвать одну функцию C один раз, которое существенно не отличается. Это более интересно, если вы напишете функцию в Cython, добавив достаточно статической типизации, чтобы заставить ее работать хорошо. Это может быть не так быстро, но версия Cython более читаема, чем C, и ее проще поддерживать. – eryksun

+0

Это зависит также от точного кода, который вы хотите вызвать. У меня есть проблема с тем, что cython не быстрее моего питона (думаю, у меня есть больше трюков, чтобы учиться), поэтому они просто используют ctypes для такого рода вещей. Однако для большого класса проблем обычные нормальные операции с numpy-вектором почти такие же быстрые, как с использованием cython или ctypes, поэтому сначала посмотрите там, где это проще всего. –

ответ

1

Учитывая бесконечное количество времени для оптимизации кода, Ctypes, вероятно, будет быстрее, поскольку вы можете максимально увеличить тяжелый подъем в скомпилированный код.

cython принимает код, подобный питону, и преобразует его в код C с множеством оговорок и исключений. Если бы cython был совершенным, это было бы так же быстро, как кодирование в C-API для python. cython - фантастический инструмент для быстрого создания кода, но пока не совсем совершенен.

Cтипы потребуют некоторых манипуляций с вашими входными переменными, чтобы получить их на C чисто. Это может быть не проблема, если вы все равно выполняете честную обработку данных.

Как обычно, вам необходимо решить, насколько важна скорость выполнения сравнения с временем повторного использования кода/кода/повторного использования кода , мне показалось странным, что меня интересует только скорость выполнения и все еще хочет закодировать любой из них в питон.

И наоборот, общие парадигмы кодирования питона бы, как правило, контрастируют с имеющей большими участками кода C удерживаемого вместе питон обертками

Смежные вопросы