Pull to refresh

Как мы разогнали САПР КОМПАС-3D → Часть 1

Reading time6 min
Views17K
Уже 20 лет прошло с момента выпуска первой 3D-версии КОМПАС — V5.11. За это время мы поняли, что потребности наших пользователей растут пропорционально возможностям КОМПАС-3D, так же как и функциональность КОМПАС расширяется пропорционально запросам пользователей. Только вот одна загвоздка: наращивая долгие годы технологическую часть, мы упирались в проблему производительности при работе со сложными большими проектами. Теперь и этот рубеж преодолен, и мы готовы рассказать, как нам удалось ускорить КОМПАС-3D на более чем 30 базовых операциях.

Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments34

Python (+numba) быстрее Си — серьёзно?! Часть 1. Теория

Reading time7 min
Views78K

Давно собирался написать статью о numba и о сравнении её быстродействия с си. Статья про хаскелл «Быстрее, чем C++; медленнее, чем PHP» подтолкнула к действию. В комментариях к этой статье упомянули о библиотеке numba и о том, что она магическим образом может приблизить скорость выполнения кода на питоне к скорости на си. В данной статье после небольшого обзора по numba (часть 1) чуть более подробный разбор этой ситуации (часть 2).


Читать дальше →
Total votes 34: ↑32 and ↓2+30
Comments7

Python (+numba) быстрее Си — серьёзно?! Часть 2. Практика

Reading time4 min
Views20K

Это вторая часть статьи про numba. В первой было историческое введение и краткая инструкция по эксплуатации numba. Здесь я привожу слегка модифицированный код задачи из статьи про хаскелл «Быстрее, чем C++; медленнее, чем PHP» (там сравнивается производительность реализаций одного алгоритма на разных языках/компиляторах) с более детальными бенчмарками, графиками и пояснениями. Сразу оговорюсь, что я видел статью Ох уж этот медленный C/C++ и, скорее всего, если внести в код на си эти правки, картина несколько изменится, но даже в этом случае то, что питон способен превысить скорость си хотя бы в таком варианте, само по себе является примечательным.


Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments17

Автоматное программирование. Часть 4. Эффективность автоматно-спроектированных программ

Reading time16 min
Views9.1K
В предыдущих двух статьях речь шла о диаграмме состояний и переходов, используемой для описания динамических процессов в автоматном стиле, и о том, что диаграмма состояний и переходов даёт наилучшее понимание таких процессов. Также были рассмотрены базовые методы реализации автоматов, заданных диаграммой состояний, и были очерчены артефакты автоматной схемотехники, доставшиеся от неё автоматному программированию. Но, до сих пор совершенно не затронут вопрос: насколько эффективны автоматно-реализованные программы?

Я бы сформулировал вопрос иначе: насколько эффективны автоматно-спроектированные программы? Такая формулировка вопроса намекает, что автоматное проектирование — источник высокой эффективности программ. Я ещё практически не касался столь важной темы как эффективность, и пример «Дисплей» идеально подходит для иллюстрации эффективности автоматного проектирования. В первой статье я познакомил читателей с «лабораторной» версией этого модуля, но тестировать я буду «боевой» вариант, процесс проектирования которого я приведу в следующей статье. Исследование эффективности будет выполнено для платформ msp430 и CortexM3.

Чтобы не быть субъективным, оценивая эффективность, нужно с чем-то сравнивать результаты. Поэтому я проведу тот же комплекс испытаний для неавтоматной реализации примера «Дисплей» любезно предоставленной michael_vostrikov, за что ему огромная благодарность и плюсы в карму.

Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments12

Автоматный практикум — 1. Пример «Дисплей», разработка ОА и УА

Reading time28 min
Views6.4K
Тесты в предыдущей статье убедительно показали высокую эффективность «автоматной» реализации примера «Дисплей» по сравнению с условно названной «неавтоматной» версией. Вкратце итог: обе реализации автоматные, но разница в эффективности многократна и глубинная причина видится в том, что вариант А1 («автоматный») изначально проектировался как автомат, а вариант А2 («неавтоматный») нет. Не столько автоматная реализация, сколько автоматное проектирование является основой высокой эффективности. Для простых алгоритмов автоматные реализации получаются сами собой. Есть смысл говорить о том, что автоматное программирование, это не столько реализация программы в виде конечного автомата, сколько автоматное проектирование, фундаментом которого является конструктивная декомпозиция. Я несколько раз касался темы автоматного проектирования и конструктивной декомпозиции, но чтобы раскрыть эту тему нужны практические примеры. В этой и следующих нескольких статьях я проведу практикум, покажу процесс автоматного проектирования, пытаясь по возможности приводить ход рассуждений присущих автоматному проектированию.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments24

Как мы разогнали САПР КОМПАС-3D → Часть 2

Reading time8 min
Views11K
В прошлой части мы рассказывали о зарождении КОМПАС-3D v18, кое-что о выборе критериев и моделей для тестирования новых функций, а также затронули тему отрисовки в варианте «Базовый».
Продолжим рассказом о варианте отрисовки «Улучшенный».

Total votes 13: ↑13 and ↓0+13
Comments21

Как мы разогнали САПР КОМПАС-3D → Часть 3

Reading time8 min
Views13K
Это заключительная часть статьи об ускорении КОМПАС-3D v18 (Часть 1, Часть 2). Она посвящена доработкам в расчетах массо-центровочных характеристик и тому, что сделано для ускорения КОМПАСа на стороне нашего геометрического ядра C3D. И еще немного расскажем о том, какое железо позволит максимально ощутить ускорение.


Total votes 13: ↑13 and ↓0+13
Comments11

Как оценить компьютеры, которые пока ещё не совсем существуют

Reading time5 min
Views4.6K


Для оценки быстродействия суперкомпьютера специалисты по информатике обращаются к стандартному инструменту: набору алгоритмов LINPACK, помогающему проверить, как машина способна решать задачи с огромным количеством переменных. Но для квантовых компьютеров, которые однажды смогут решать задачи, недоступные обычным компьютерам, такого стандарта по измерению быстродействия не существует.

Одна из причин состоит в том, что компьютеры, которые должны будут задействовать законы квантовой механики для ускорения определённых вычислений, пока что находятся в рудиментарном состоянии, а различные возможные схемы устройства таких компьютеров конкурируют между собой. В некоторых из них квантовые биты, или кубиты, используемые для вычисления, заключены в спины последовательности «пойманных» ионов, другие же полагаются на кусочки сверхпроводящих металлов, резонирующих в ответ на микроволновое излучение. Сравнение зачаточных архитектур похоже на то, «как если бы мы отправились в ясли, чтобы решить, какие из младенцев станут известными баскетболистами», говорит Скотт Ааронсон, специалист по информатике из Техасского университета в Остине.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments5

Насколько быстры компьютеры

Reading time3 min
Views42K

Время для компьютеров течет не так, как для людей. То, что человеческим мозгом воспринимается как мгновение, для компьютеров растягивается на долгие эпохи. Данная статья — это метафора, в попытке осознать это простой и в общем-то очевидный факт.

Читать далее
Total votes 152: ↑151 and ↓1+150
Comments60

Переизобретаем сжатие в распределенной базе данных

Reading time4 min
Views2.4K

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

Но рост объема хранимых данных — не единственный возможный выигрыш от применения сжатия, поэтому мы задумались о разработке собственного решения.

В этой статье расскажу, как мы изменили подход к сжатию данных, чем пришлось пожертвовать и почему менее эффективное «на бумаге» решение в результате превзошло наши ожидания.

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments1

Мгновенное заполнение последовательности выбранных ячеек физической памяти

Level of difficultyEasy
Reading time4 min
Views994

(продолжение работы над своим процессором, и в заголовке про физическую память так как везде поисковиком находится про ячейки Excell).

Сначала думал - да ну какая мелочь для процессора, но потом подумал - многие пишут о мелочах и даже получают плюсы, почему не написать о мелочи, если чип создаётся новый.

Сразу говорю, что роль памяти в данной схеме играют SR триггеры предполагаемого FPGA и процедура заполнения любого числа цепи ячеек (или даже одной) выполняется за два рабочих такта проектируемого процессора, независимо от числа выбранных ячеек. Над этой задачкой пришлось немного пломать голову, и нужно было понять что такое управляемый буфер (в данном случае это для Logisim Evolution).

После того, как составил рабочую схему кэша мостов, для работы процессора в режиме без счётчика команд, приступил к схеме управления кэшом мостов. Кэш мостов - это кэш обеспечивающий выполнение команд без счётчика команд, и позволяющий выполнять только команды в обозначенных ячейках памяти. По сути управление кэшем мостов сводится к мгновенному заполнению групп выбранных ячеек. И вот для того чтобы обеспечить бесперебойную работу управляемых буферов в сложной цепи (множество ячеек и множество источников сигнала) пришлось пойти на Хитрость с ИСКЛЮЧАЮЩИМ ИЛИ.

Триггеры группы Last - нижний ряд триггеров на данном изображении, служит для обозначения последнего триггера данной группы для конкретной ячейки, в который запишется единица и заблокирует прохождение сигнала по верхнему проводнику, через который подряд записывается единица в сами эти ячейки памяти механизма управления кэшем мостов - в триггеры группы Memo (незаконченное слово, так как по сути всё это является устройством для управления памятью, а не ей самой).

Читать далее
Total votes 1: ↑2 and ↓-1+3
Comments7

Сложные цепи из последовательных звеньев и параллельных шин — согласование цифрового сигнала внутри таких схем

Level of difficultyMedium
Reading time8 min
Views2K

Нет согласующих резисторов в FPGA - что мешает реализовать целый ряд схем, но зато есть чем заменить их для цифрового сигнала внутри таких схем. Пытался найти в сети альтернативу согласующему резистору для применения внутри синтезируемой схемы, поисковик выдал скромный результат поиска, содержанием которого оказалось ничего по существу - категоричное нет на всех форумах, и иногда что-то близкое, но моей задачи не решающее. Да и собственно в схеме развёрнуты две задачи - некоторый кэш нового типа и механизм управления таким кэшем, по сути - часть процессора нового типа.

Тут нужно много вникать. И если Вы не верите IDE Logisim Evolution - можете просто пройти мимо и не принимать тут изложенный материал во что-то нужное и полезное. Тем более что это в общем-то работа новичка, который просто развивает свой проект и взгляды в новых областях, сталкивается с новыми задачами и решает их новыми способами.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments14

JavaScript: ограничение частоты исполнения функции

Reading time3 min
Views15K
JavaScript — удивительный язык, с которым порой удаётся вытворять неожиданно классные вещи. Хочу познакомить вас с немножко нестандартным решением одной проблемы быстродействия, с которой я недавно столкнулся. Предупреждение: не для новичков.

Исходные данные: ресурсоёмкая функция, обновляющая определённые элементы на экране по наступлению определённых событий (движение мышки, например).
Проблема: когда события, вызывающие функцию, происходят слишком часто за короткий промежуток времени, интерфейс может начать серьёзно тормозить. Скажем, если событие произойдёт 1000 раз за несколько секунд, то и обновление — столько же. Для интерфейса молниеносная скорость отрисовки изменений может быть не так важна, а вот общее быстродействие, которое в данном случае страдает — очень даже.
Задача: ограничить функцию таким образом, чтобы она исполнялась не чаще, чем раз за определённый промежуток времени. При достаточном малом таком промежутке визуально задержки не будут заметны, зато кол-во вызовов может сократиться в несколько раз, что в свою очередь очень сущесвенно сократит нагрузку и поможет избавиться от торможения.

Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments14

Ускорение Оперы, часть 1

Reading time1 min
Views2.8K
  • Flash часто загружает всю виртуальную машину Java из-за технологии Live Connect (она часто бывает совершенно лишней);
    Также очень увеличивает использование памяти Оперой.
    (Как отключить: operawiki.info/FlashBlock)
    Попробуйте «Удалить личные данные», если вы считаете это оправданым для повышения произвдительности (действительно хорошо помогает в большинстве случаев)
    Если ваши оптимизаторские наклонности достигают маниакальной степени, отключите JavaScript
    (попробуйте нажать F12 и вы увидите удобную менюшку, где можете сделать еще много всякого)
    Включите «Принимать все Cookies» (Это также повлияет на вашу безопасность, www.opera.com/support/tutorials/security/privacy) (лично я не знаю, как это влияет на производительность, но на официальной wiki так пишут)
    Отключите FavIcons ( Prefs » Advanced » Browsing » Page Icons )
    Отключите спец.эффекты UI и используйте родной скин (он потребляет меньше ресурсов)
    Храните кэш на диске отличном от того, куда установлена ось, делайте иногда дефрагментацию этого диска
    Вы можете распаковать исполнимые файлы (http://operawiki.info/PackedExecutables)
    Если у вас кроме Опервы не открты другие программы, задайте приоритет процесса Opera в 'High' через диспетчер задач

    Материал по operawiki.info/OperaPerformance (EN) и с множества форумов.
    Завтра читайте продолжение, если в комментариях будут интересные заметки на тему — я их учту, так что пишите.
    Спасибо за внимание, это пока только общие рекомендации, в продолжении будет больше, надеюсь, кому-то это окажется полезным.
Total votes 19: ↑10 and ↓9+1
Comments13

Ускорение Оперы, часть 1

Reading time1 min
Views659
  • Flash часто загружает всю виртуальную машину Java из-за технологии Live Connect (она часто бывает совершенно лишней);
    Также очень увеличивает использование памяти Оперой.
    (Как отключить: operawiki.info/FlashBlock)
    Попробуйте «Удалить личные данные», если вы считаете это оправданым для повышения произвдительности (действительно хорошо помогает в большинстве случаев)
    Если ваши оптимизаторские наклонности достигают маниакальной степени, отключите JavaScript
    (попробуйте нажать F12 и вы увидите удобную менюшку, где можете сделать еще много всякого)
    Включите «Принимать все Cookies» (Это также повлияет на вашу безопасность, www.opera.com/support/tutorials/security/privacy) (лично я не знаю, как это влияет на производительность, но на официальной wiki так пишут)
    Отключите FavIcons ( Prefs » Advanced » Browsing » Page Icons )
    Отключите спец.эффекты UI и используйте родной скин (он потребляет меньше ресурсов)
    Храните кэш на диске отличном от того, куда установлена ось, делайте иногда дефрагментацию этого диска
    Вы можете распаковать исполнимые файлы (http://operawiki.info/PackedExecutables)
    Если у вас кроме Опервы не открты другие программы, задайте приоритет процесса Opera в 'High' через диспетчер задач

    Материал по operawiki.info/OperaPerformance (EN) и с множества форумов.
    Завтра читайте продолжение, если в комментариях будут интересные заметки на тему — я их учту, так что пишите.
    Спасибо за внимание, это пока только общие рекомендации, в продолжении будет больше, надеюсь, кому-то это окажется полезным.
Rating0
Comments0

Ускорение Оперы, часть 1

Reading time1 min
Views4.2K
  • Flash часто загружает всю виртуальную машину Java из-за технологии Live Connect (она часто бывает совершенно лишней);
    Также очень увеличивает использование памяти Оперой.
    (Как отключить: operawiki.info/FlashBlock)
    Попробуйте «Удалить личные данные», если вы считаете это оправданым для повышения произвдительности (действительно хорошо помогает в большинстве случаев)
    Если ваши оптимизаторские наклонности достигают маниакальной степени, отключите JavaScript
    (попробуйте нажать F12 и вы увидите удобную менюшку, где можете сделать еще много всякого)
    Включите «Принимать все Cookies» (Это также повлияет на вашу безопасность, www.opera.com/support/tutorials/security/privacy) (лично я не знаю, как это влияет на производительность, но на официальной wiki так пишут)
    Отключите FavIcons ( Prefs » Advanced » Browsing » Page Icons )
    Отключите спец.эффекты UI и используйте родной скин (он потребляет меньше ресурсов)
    Храните кэш на диске отличном от того, куда установлена ось, делайте иногда дефрагментацию этого диска
    Вы можете распаковать исполнимые файлы (http://operawiki.info/PackedExecutables)
    Если у вас кроме Опервы не открты другие программы, задайте приоритет процесса Opera в 'High' через диспетчер задач

    Материал по operawiki.info/OperaPerformance (EN) и с множества форумов.
    Завтра читайте продолжение, если в комментариях будут интересные заметки на тему — я их учту, так что пишите.
    Спасибо за внимание, это пока только общие рекомендации, в продолжении будет больше, надеюсь, кому-то это окажется полезным.
Total votes 8: ↑2 and ↓6-4
Comments3

Архитектура YASS. Часть 3: проблема выбора

Reading time4 min
Views859
Это третья статья из цикла, посвященного разбору практических методов, заложенных в основу YASS. Первая статья была про модульное построение, вторая — про логику выбора CSS-селектора и организацию циклов.

Условное ветвление



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

var a = 1,
	b = 2,
	c = 3;
if(a == 1) {
	if (b == 2) {
		if (c == 3) {
			...
		}
	}
}

Читать дальше →
Total votes 35: ↑29 and ↓6+23
Comments33

Маленькая хитрость для отображения большого объёма данных в ListView

Reading time4 min
Views41K


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

Проблема


Стандартный механизм отображения списков из базы данных в Android выглядит примерно так:
  • Activity содержит ListView
  • ListView обращается к экземпляру CursorAdapter
  • CursorAdapter получает данные из объекта, реализующего интерфейс Cursor
  • Cursor получен либо из ContentProvider, либо сразу из SQLiteDatabase


Всё работает нормально ровно да тех пор, пока количество строк в Cursor сравнительно небольшое. Но если в нём 50 тысяч, 100 тысяч и более строк (хотя дело не только в количестве строк, но об этом чуть позже), время от времени список будет притормаживать. Особенно это заметно при «быстрой прокрутке», если у ListView установлено в true свойство fastScrollEnabled.
Читать дальше →
Total votes 49: ↑46 and ↓3+43
Comments26

Насколько плохим код должен быть?

Reading time6 min
Views73K
Эрик Липперт — ветеран Microsoft, проработавший в компании 16 лет и стоящий за разработкой VBScript, JScript и C#.

На прошлой неделе в комментариях к одной из статей разгорелся спор о роли низкоуровневой оптимизации в программировании, и я вспомнил относящуюся к этому статью Эрика. Она была написана в конце 2003, и хотя реалии с тех пор несколько изменились — принципы остались теми же самыми. Можете мысленно заменить ASP и VBScript на PHP, JavaScript, или на другой скриптовый язык по вашему вкусу.

Эту статью я уже пытался перевести в 2005, но русский текст тогда получился неуклюжий, так что этот перевод — новый и ранее не публиковался, в соответствии с требованиями НЛО. В Переводе блога Эрика Липперта этого текста тоже нет — наверное, для них он слишком стар.


Я уже много писал о быстродействии скриптов, но до сих пор я не высказывался по поводу того, что многие советы об их оптимизации я считаю как минимум бестолковыми, а то и откровенно вредными.

Например, за семь лет в Microsoft я получил десятки вопросов, аналогичных по своей сути этому, заданному в конце 1990-х:
У нас есть код на VBScript, и в одной часто вызываемой функции мы определяем оператором Dim несколько переменных, которые нигде в функции не используются. Не замедляется ли каждый вызов функции из-за объявления этих переменных?
Какой интересный вопрос! В компилируемом языке, таком как Си, объявление локальных переменных общим размером n байт всего лишь вычитает n из указателя стека при входе в функцию. Если n будет чуть больше или чуть меньше, затраты времени на вычитание никак не изменятся. Наверное, в VBScript точно так же? Оказалось, что нет! Вот что я написал автору вопроса:
Читать дальше →
Total votes 171: ↑146 and ↓25+121
Comments246

Почему Windows XP в 2019 году по-прежнему рулит, или ЧЯДНТ?

Reading time9 min
Views171K
На Хабре в комментариях к статьям о выходе новых версий операционных систем, выпуске новых моделей ноутбуков, накопителей данных, модулей памяти и т.п. регулярно высказывается мнение о том, что только наипоследнейшая версия операционной системы известного вендора даёт возможность современному гику не скатиться в унылое г… очувствовать себя человеком, и только тот, у кого стоитустановлена Windows 8, 10, 11, 9000 (нужное подчеркнуть), будет пользоваться популярностью у девушекработодателей и клиентов. По причинам изложенным ниже я полагаю таковое мнение глубоко ошибочным и даже ущербным, показывающем неспособность владельца компьютера оптимально использовать имеющиеся в его распоряжении аппаратные и программные ресурсы.
Читать дальше →
Total votes 168: ↑100 and ↓68+32
Comments543
1