Описание тега micro-optimization

Микрооптимизация - это процесс тщательной настройки небольших участков кода с целью устранения видимых недостатков в некоторых аспектах его работы (чрезмерное использование памяти, низкая производительность и т. Д.).
1 ответ

Почему циклы всегда компилируются в стиле "do...while" (прыжок с хвоста)?

При попытке понять сборку (с включенной оптимизацией компилятора) я вижу это поведение: Очень простой цикл, как это outside_loop; while (condition) { statements; } Часто компилируется в (псевдокод) ; outside_loop jmp loop_condition ; unconditional l…
1 ответ

Каково минимальное количество цепочек зависимостей, чтобы максимизировать производительность?

Данная цепочка инструкций связана истинными зависимостями и периодически повторяется (то есть цикл), например (a->b->c)->(a->b->c)->... Предполагая, что он может быть разбит на несколько более коротких и независимых цепочек зависимостей, чтобы получ…
3 ответа

Оптимизация кода Java

Как я могу оптимизировать этот код? Я сделал IPFilter и мне нужно его оптимизировать. package com.ipfilter; import java.util.HashMap; import java.util.Map; /** * IPFilter * * Loads given IP addresses to memory, so you can easily check if ip addres h…
3 ответа

Определить переменную внутри против снаружи в Java?

Предположим, у нас есть двойной цикл с большим количеством итераций. Должны ли мы определить переменную вне цикла для ускорения? Просто для примера: for(int i=0;i<2000;i++) for(int j=0;j<1000;j++) System.out.println(i+j); Поскольку мы инициали…
23 ноя '13 в 23:37
1 ответ

JavaScript: более быстрый выбор рулетки

Я реализую алгоритм выбора, который выбирает объект на основе вероятности, пропорциональной его score значение. Это повышает вероятность выбора объектов с более высокой оценкой. Моя реализация выглядит следующим образом: var pool = []; for (var i = …
02 авг '18 в 16:20
4 ответа

Оптимизировать фрагмент кода C#

Я профилирую код C#. Метод ниже является одним из самых дорогих. Для целей этого вопроса предположим, что микрооптимизация является правильным решением. Есть ли подход для повышения производительности этого метода? Изменение входного параметра на p …
12 ноя '11 в 01:39
1 ответ

Какой оператор является самым быстрым в Javascript, чтобы проверить, равны ли 2 значения 0?

Что из нижеперечисленного является самым быстрым и каково оправдание почему? (1) if (x == 0 and y == 0) (2) if ((x | y) == 0) (3) Другое (пожалуйста, укажите. Если есть)
4 ответа

Различия между операциями Mult и Div для чисел с плавающей запятой

Есть ли разница в точности вычислений для этих двух случаев:1) x = y / 1000d; 2) x = y * 0.001d; Изменить: не добавлять тег C#. Вопрос только с точки зрения "плавающей точки". Я не хочу знать, что быстрее, мне нужно знать, какой случай даст мне "луч…
1 ответ

x86 декодирование многопользовательских команд

Агнер Фог в своем microarch.pdf говорит: Декодирование становится более эффективным, потому что команда, которая генерирует один объединенный моп, может входить в любой из трех декодеров, в то время как команда, которая генерирует два мопа, может и…
25 апр '16 в 09:40
2 ответа

Производительность локальной переменной и доступа к массиву

Я проводил сравнительный анализ производительности Perl и столкнулся с делом, которое мне показалось странным. Предположим, у вас есть функция, которая использует значение из массива несколько раз. В этом случае вы часто видите некоторый код как: su…
1 ответ

Выступление делегата ()

Я использую $("body").delegate(".selector", "click", function() { ... }); некоторое время, и мне было интересно: если я делегировать click событие для содержащего элемента ближе к фактическому элементу, например table полный кнопок, это будет быстре…
11 сен '11 в 13:03
1 ответ

Передача нулевого указателя на размещение нового

Размещение по умолчанию new Оператор объявлен в 18.6 [support.dynamic] ¶1 с ненулевой спецификацией исключения: void* operator new (std::size_t size, void* ptr) noexcept; Эта функция не делает ничего, кроме return ptr; поэтому разумно noexceptоднако…
10 июл '13 в 12:50
2 ответа

JavaScript не работает стабильно (V8)

У меня есть следующий JavaScript, который выполняет выбор Турнира среди группы результатов. // Benchmark Tests benchmark( 1e2 ); benchmark( 1e3 ); benchmark( 1e4 ); benchmark( 1e6 ); benchmark( 1e4, 50, 20 ); // Selection Function function tournamen…
10 авг '18 в 23:43
1 ответ

Великолепный разрыв в производительности между len(arr) и arr.shape[0]

Я нашел это len(arr) почти в два раза быстрее, чем arr.shape[0] и мне интересно, почему. Я использую Python 3.5.2, Numpy 1.14.2, IPython 6.3.1 Код ниже демонстрирует это: arr = np.random.randint(1, 11, size=(3, 4, 5)) %timeit len(arr) # 62.6 ns ± 0.…
1 ответ

x86 - параллелизм на уровне инструкций - оптимальный порядок инструкций

Какой из следующих двух фрагментов кода x86_64 должен быть самым быстрым? Или вообще никакой разницы? ; #1 bsf rax, rdi mov rdx, -1 cmove rax, rdx против ; #2 mov rdx, -1 bsf rax, rdi cmove rax, rdx (Или альтернатива №1, более экономичная с регистра…
15 авг '16 в 06:49
0 ответов

Запрос страницы и оптимизация памяти в PHP/APACHE

Допустим, на моем сайте у меня есть пользователь и администратор .php страницы. страница пользователя принимает запросы пользователей, которые могут быть 5000 просмотров в день, но моя страница администратора получает только 100 просмотров страниц (…
25 ноя '13 в 15:38
2 ответа

Эффективность: объекты внутри массивов или массивы внутри объектов?

При одинаковом количестве слоев массивов / объектов, каждый индекс указывает на одно и то же, каков наилучший порядок размещения массивов и объектов? Я делаю игру на основе сетки, и мне нужно хранить несколько частей информации о каждом квадрате. Я …
15 дек '15 в 02:54
3 ответа

Могут ли компиляторы C оптимизировать адреса в встроенных функциях?

Допустим, у меня есть следующий код: int f() { int foo = 0; int bar = 0; foo++; bar++; // many more repeated operations in actual code foo++; bar++; return foo+bar; } Абстрагируя повторяющийся код в отдельные функции, получаем static void change_loc…
05 апр '11 в 05:43
3 ответа

Как переместить 3 байта (24 бита) из памяти в регистр?

Я могу переместить элементы данных, хранящиеся в памяти, в регистр общего назначения по своему выбору, используя MOV инструкция. MOV r8, [m8] MOV r16, [m16] MOV r32, [m32] MOV r64, [m64] Не стреляйте в меня, но как добиться следующего: MOV r24, [m24…
2 ответа

Насыщенный короткий (int16) в C++

Я оптимизирую код узкого места: int sum = ........ sum = (sum >> _bitShift); if (sum > 32000) sum = 32000; //if we get an overflow, saturate output else if (sum < -32000) sum = -32000; //if we get an underflow, saturate output short resu…