Рубрика «оптимизация кода» - 2
Сложно ли генерировать 1024-битные простые числа?
2024-05-31 в 8:13, admin, рубрики: rsa, криптографические ключи, оптимизация кода, параллелизация, простые числа, тест простотыБыстрый двоичный поиск без ветвления
2023-08-23 в 13:00, admin, рубрики: binary search, ruvds_статьи, ветвление, двоичный поиск, кэш процессора, оптимизация кода
Мои читатели — занятые люди, поэтому сразу перейду к делу. Вот она, самая быстрая обобщённая (и простая) реализация двоичного поиска на C++:
template <class ForwardIt, class T, class Compare>
constexpr ForwardIt sb_lower_bound(
ForwardIt first, ForwardIt last, const T& value, Compare comp) {
auto length = last - first;
while (length > 0) {
auto rem = length % 2;
length /= 2;
if (comp(first[length], value)) {
first += length + rem;
}
}
return first;
}
Тот же интерфейс функции, что и у std::lower_bound
, но вдвое быстрее и короче. «Без ветвления», потому что if
компилируется в команду условной передачи, а не в ветвление/условный переход. Ближе к концу статьи мы изучим опции компилятора и даже более быстрые версии полностью без ветвления. Для понимания этой статьи не нужны особые знания в C++. Достаточно понимать, что итераторы (first
и last
) по сути являются указателями на элементы массива, хотя могут указывать на один элемент дальше, чем последний элемент массива. Можете не обращать внимания на template
, class
, constexpr
и &
. Вот если бы существовал быстрый и чистый язык, работающий на уровне железа...1 2Читать полностью »
PHP. Как увеличить потребление памяти в 3 и более раз при работе с массивами
2023-07-09 в 13:26, admin, рубрики: php, оптимизация кода, потребление памяти, Серверная оптимизацияСодержание
-
Общие сведения.
-
Увеличиваем потребление памяти вдвое.
-
Увеличиваем потребление памяти втрое.
-
Ещё раз увеличиваем потребление памяти на ровном месте.
-
Заключение.
Общие сведения
Известно, что PHP активно использует механизм copy-on-write. Это означает, что при попытке внутри функции что-то записать в переданные ей параметры вначале будет сделана копия этой переменной, а уж затем в неё что-то запишется. Такая же ситуация наблюдается с итерацией массива с помощью foreachЧитать полностью »
Укрощение имен. Как нейминг помогает оптимизировать код
2023-05-04 в 9:32, admin, рубрики: ruby, ruby on rails, Блог компании МойОфис, именование, мойофис, нейминг, оптимизация кода, Программирование, разработка, Совершенный код, Софт
Что такое имя? Имя — это ярлык, дескриптор, указатель в вашей памяти. Это краткое изложение сложной идеи. Оно позволяет ссылаться на «экономику» или «догфудингЧитать полностью »
Как оценить реальную производительность своего кода
2022-11-21 в 9:00, admin, рубрики: C, c++, Compiler Explorer, gcc, godbolt, il, Intermediate Language, LLVM, objdump, ruvds_статьи, Sharplab, uiCA, анализатор кода, ассемблер, бенчмарк кода, Блог компании RUVDS.com, декомпиляция, дизассемблер, Компиляторы, межпроцедурная оптимизация, оптимизация кода, Программирование, промежуточный язык
Код, который мы пишем, и который будет исполнен процессором, — две разные вещи. На уровне ассемблера существует миллион вариантов, в каком виде интерпретировать и запустить высокоуровневые команды. Более того, современные компиляторы сильно оптимизируют код, а результат этой оптимизации похож на магию.
Читать полностью »
Как сделать программу на Go быстрее на 42%, изменив один символ
2022-11-16 в 5:13, admin, рубрики: allocation, Go, Клиентская оптимизация, Компиляторы, куча, оптимизация кода
Если вы прочитали заголовок и подумали «ну, ты, наверно, сделал сначала что-то глупое», то вы правы! Но что такое программирование, как не упражнения в глупых ошибках? Поиск глупых ошибок — это и есть самое большое удовольствие!
Также стоит заранее сделать оговорку о бенчмаркинге: ускорение на 42% было замерено при выполнении программы с моими данными и на моём компьютере, поэтому относитесь к этому результату с долей скепсиса.
Что делает программа?
codeowners — это программа на Go, выводящая владельцев каждого из файлов в репозитории согласно набору правил, указанному в файле GitHub CODEOWNERS
. Правило может гласить, что всеми файлами с расширением .go
владеет команда @gophers
, или что всеми файлами в папке docs/
владеет команда @docs
.
Читать полностью »
Ускоряем pow
2021-10-20 в 22:15, admin, рубрики: ASP, C#, c++, java, Алгоритмы, высокая производительность, оптимизация кода, оптимизация программ, приближëнные алгоритмы, приближенное решение, приближённые вычисления, ускорение кодаВ этой статье я хочу поделиться несколькими нестандартными алгоритмами для быстрого возведения числа в степень, а также продемонстрировать их реализацию и сравнить их быстродействие в C++, C# и Java.

Сравнить точность алгоритмов можно прямо сейчас на этой странице.
Неожиданные причины торможения программ и систем
2021-08-17 в 8:16, admin, рубрики: Клиентская оптимизация, компиляция, компоновка, Накопители, оптимизация кода, Программирование, Серверная оптимизация, сжатие данных, торможение
Я одержим оптимизацией производительности и максимальным повышением эффективности программ. За многие годы я сталкивался с конкретными случаями и распространёнными паттернами, замедляющими работу ПО или компьютеров. В этом посте я расскажу о некоторых из них.
Я назвал пост Surprisingly Slow потому, что замедление было для меня неожиданным, или неоптимальные практики, ведущие к замедлению, настолько распространены, что многие программисты будут удивлены их существованию.
Разделы поста чаще всего никак не связаны друг с другом, поэтому можете выбирать самые интересные для вас.
Читать полностью »
Ускоряем на 70% игру на процессоре в 1 МГц
2020-10-29 в 7:48, admin, рубрики: 6809, ассемблер, Игры и игровые приставки, оптимизация кода, разработка игр, старое железо, старые компьютеры, хаки
Давным-давно, во времена студенчества в колледже я немного занимался разработкой компьютерных видеоигр. Это была эпоха 8-битных PC, когда игровое оборудование по современным стандартам было почти невозможно медленным.
Поэтому вас не должно удивлять, что программисты игр придумывали всевозможные безумные трюки, чтобы их игры работали с приемлемой скоростью. Безумные, безумные трюки.
Это история об одном из таких трюков.
Я постараюсь припомнить все важные подробности, однако в чём-то могу ошибиться. Если так случится, простите меня, это было очень давно.
Исходные данные
Мой друг, одарённый программист, почти закончил свою новую игру. Каким-то образом ему удалось почти без изменений уместить в компьютер эпохи 1980-х довольно впечатляющую графически на то время игру, популярную на аркадных автоматах.
Единственная проблема заключалась в том, что его версия игры оказалась неиграбельной. Она работала слишком медленно, а дёрганые движения мешали вовлечённости игрока, ведь игра была сайд-скроллером.
Мой друг, работавший над игрой параллельно с учёбой в колледже, начал уже ощущать себя немного вымотанным. Опасаясь, что мог упустить какую-нибудь простую оптимизацию, он попросил посмотреть код меня.
Я посмотрел. Но там нельзя было найти никакой простой оптимизации.Читать полностью »