Быстрый Data Mining или сравнение производительности C# vs Python (pandas-numpy-skilearn)

Dec 26, 2016 17:38

Всем привет!

Разбираясь со Spark Apache, столкнулся с тем, что после достаточно небольшого усложнения алгоритмов подготовки данных расчеты стали выполняться крайне медленно. Поэтому захотелось реализовать что-нибудь на C# и сравнить производительность с аналогичным по классу решением на стеке python (pandas-numpy-skilearn). Аналогичным, потому что ( Read more... )

big data, c#, data mining, python

Leave a comment

softwizard December 26 2016, 16:19:07 UTC
Страшно подумать, насколько быстрее работало бы, если переписать на ++, да скомпилировать без отладочных вставок :)) На С#, наверное, отладка не так сильно влияет...

Reply

pustota_2009 December 27 2016, 19:38:04 UTC
Сомневаюсь что ++ даст заметный выигрыш. Как-то сравнивал время выполнения кода чистого С под linux с аналогом C# и получил идентичные результаты. Похоже что .net вылизан весьма прилично.

Reply

softwizard December 29 2016, 11:04:43 UTC
странно это... Я несколько далёк сейчас от деталей процессоростроения, но я не понимаю, куда могли деться накладные расходы на интерпретацию кода. Ну или под C# сделали честный компилятор, тогда и нет никакой особой разницы.

Reply

ext_2057957 March 18 2017, 21:05:59 UTC
Дело в том, что в C# или той же Java используются jit компитяторы. Тоесть код на с#, java компилируется в байткод (при компиляции выполняются определенные оптимизации). При запуске скомпилированного приложения рантайм начинает интерпритировать этот байткод. Начиная с какого то момента рантайм .net или jvm понимает, что некоторые куски приложения используются чаще и происходит компиляция байткода в машинный код, который уже условно будет выполняться как есть. Дальше статистика использования продолжает накапливаться, более часто используемые куски кода подвергаются все более агрессивным оптимизациям. в итоге прогретое c# или java приложние в некоторых случаях может быть и быстрее чем плюсовое.

Reply

softwizard March 20 2017, 22:26:29 UTC
Спасибо, но я в курсе. Даже "первобытные" интерпретаторы языка Бейсик работали, если не вдаваться в детали, по примерно такому же принципу (а некоторые ещё и с самомодификацией кода).

Но в любом случае остаются накладные расходы на вызов этих самых "прогретых" кусков кода. Поэтому, ещё раз, мне не понятно, как С# приложение может быть быстрее. Ну только если, я забыл про эту возможность, если С++ компилятор забросили и не оптимизировали под конкретную модель процессора, а над С# продолжили работу.

Reply


Leave a comment

Up