Entry tags:
А что по скорости?
Регулярно можно видеть рассуждения, мол напишем за 20 минут наш проект на фичастом языке сверхвысокого уровня H, а критические по производительности участки кода сделаем на быстром низкоуровневом языке C. Что-то у меня ощущение, что об этом чаще говорят, чем применяют. Я поспрашивал знакомых программистов, тех что поближе, - подобным не занимаются. Один, говорит, пытался, а потом просто стал писать на плюсах. Даже в интернетах, читал о подобном только в исполнении
levgem и
lionet. В связи с чем пара вопросов:
1) Переписываете ли вы куски кода на низкоуровневом языке в угоду производительности?
2) Какой язык вы для этого используете?
Я ведь правильно понимаю, что нет других низкоуровневых языков кроме сишечки? Биндинги ведь только к ней делаются.
![[profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
1) Переписываете ли вы куски кода на низкоуровневом языке в угоду производительности?
2) Какой язык вы для этого используете?
Я ведь правильно понимаю, что нет других низкоуровневых языков кроме сишечки? Биндинги ведь только к ней делаются.
no subject
Сам таким не занимаюсь, т.к. за производительностью я ещё не гонялся.
no subject
Я тоже не гоняюсь, то есть еще не приходилось покидать уютный безопасный дотнет.
no subject
но вот как скриптота в том же 3D вполне себе состоялся
на равне со своим собственным скриптоподелием поддержка пайтона есть в 90% графических пакетов
за дотнэт не знаю, но к примеру opencv к нему всётаки прикрутили для скорости опять таки для задач с изображениями
no subject
no subject
я так не делаю, но видел подобное на github
no subject
no subject
>сразу на асме
Ого, а не слишком сурово? Как это потом поддерживать или запустить на новом_классном_дорогом_интелловском процессоре?
no subject
если без clojure контекста, то звучит немного странно
интересно на каких задачах java уделала clojure по производительности?
no subject
no subject
no subject
no subject
no subject
Сложности с последующей поддержкой не такие большие, т.к.
1. 100% моих клиентов пишут софт, который не предназначен для широкого распространения (максимум - десятки тысяч контроллируемых инсталляций), и предназначен для работы на ограниченном множестве железа.
2. На асме переписывается несколько hot_fucntion_N, старая функция никуда не выкидывается, остается на всякий случай или как часть документации.
3. Главный asset Интел - совместимость. Код, откомпилированный на 8086, запустится на Core i7 (с некоторыми условиями и ограничениями, но условия в принципе выполнимы, а ограничения редки и документированы). Но это 35 лет разницы. В пределах 15 лет (типичное время жизни софта, с которым я работаю) проблем совместимости вообще нет.
4. Однако в новом_классном_дорогом_интелловском процессоре могут появится новые инструкции, которые позволят еще ускорить код - тогда клиент is welcome to be my guest еще раз.
5. Бывают регрессии по производительности с новыми архитектурами. Обычно я могу гарантировать, что в моем коде их не будет в течении 2 следующих поколений.
no subject
no subject
http://lionet.livejournal.com/84884.html
http://levgem.livejournal.com/386524.html
У них точно нет проблем с горизонтальным масштабированием.
Кроме того, выше в комментариях отметился izard, который, как я понял, специализируется именно на том, что выжимает лишние проценты, переписыванием на сях и даже асме.
no subject
еще numpy/scipy вроде тоже.
А у меня все вычисления упираются в "как наиболее эффективно прочесть наименьшую часть БД размером в 10-50 гб и минимизировать расстояние от чтения до вычисления", так что мне вряд ли поможет переписывание на низкоуровневых языках.
no subject
no subject
(Anonymous) 2012-09-29 03:05 pm (UTC)(link)LinkedListNode
{
T value;
LinkedListNode* next;
}
class LinkedList
{
LinkedListNode* root;
...
}
typedef LinkedList MyList;
typedef LinkedList HisList;
В С++ это передается как есть, для Шарпа генерируется следующие структуры LinkedListNode_instantation_int, LinkedList_instantation_int, LinkedListNode_instantation_SomeStruct, LinkedList_instantation_SomeStruct:
LinkedListNode_instantation_int
{
int value;
LinkedListNode* next;
}
class LinkedList_instantation_int
{
LinkedListNode_instantation_int *root
}
Для HisList тоже самое. Что-то типа инстанцирования шаблонов. Все это с поддержкой области видимости. LinkedList < SomeTemplate < SomeOtherTemplate < int > > > то же поддерживается. Вопрос - не велосипед ли я изобретаю?
P.S.: Перед тем, как прочел этот пост, сидел отлаживал описанную выше утилиту.
no subject
Если структуры действительно сложные, то писать обходчики на С++ - это адский ад. Какие преимущества дает цепепе? Какие преимущества перед unsafe C#, который достаточно быстр (http://stdray.livejournal.com/73674.html?thread=377546#t377546) и может простым и прозрачным образом общаться со структурами данных, описанными на Nemerle?
no subject
(Anonymous) 2012-09-29 04:12 pm (UTC)(link)Я не знаю насколько ансейф С# быстрый в реальности, а не на тестах. В С++ я почти уверен, в С# не уверен. Тем более на плюсах у меня есть немалый опыт, на С# опыта нет, я сразу начал писать на Немерле. Шаблоны опять же. OpenMP опять же. Куча нативных библиотек опять же. И т.д.
no subject
(Anonymous) 2012-09-29 04:20 pm (UTC)(link)В С++ я почти уверен, в С# не уверен. На С++ у меня большой опыт, на шарпе опыта нет почти. Темплейты опять же, куча нативных библиотек, OpenMp, и т.д.
no subject
Если из Nemerle убрать паттерн-матчинг, макросы и TCO, то получится Сишарп. Что касается обхода структур, то я не понимаю, на чем там можно в плюсах сэкономить. Адресная арифметика здесь мало применима, а для распараллеливания есть PLINQ, async/await (в C#5 и Немерле) и Async монада для Nemerle.
no subject
no subject
no subject
У clojure с ее динамикой нет причин быть быстрой, и на тестах shootout'a она отстает в разы.
no subject
no subject
no subject
no subject
no subject
no subject
Еще Javascript+C был.
no subject
>Еще Javascript+C был.
Это еще что за эксперименты?
no subject
кстати, ЕМНИП, Steam так устроен (морда на HTML, остальное на плюсах)
no subject
Но пример, когда С был реально нужен у меня есть - писал когда-то индексатор для MS Indexing Service, там производительность была критична и заголовки портировать на что-то не хотелось. Т.е. изначально отладил сам алгоритм на дельфи, а потом итог оформил на С.
no subject
no subject
У вова морда в два потока вообще - отдельный минибраузер и отдельный торрент-клиент.
no subject
no subject
no subject
no subject
По прошестви пары лет я выкинул с-шный кусок потому что это очень неудобно таскать такие экстеншны. И ничего в общей скорости не поменялось.
Там где скорости эрланга не хватает возможно и скорости plain c может не хватить, потребуются всякие intrinsic