Описание тега bounds-check-elimination

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

Границы массива проверяют оптимизацию в цикле for

var ar = new int[500000000]; var sw = new Stopwatch(); sw.Start(); var length = ar.Length; for (var i = 0; i < length; i++) { if (ar[i] == 0); } sw.Stop(); sw.ElapsedMilliseconds: ~2930 мс var ar = new int[500000000]; var sw = new Stopwatch(); s…
3 ответа

Почему проверка границ не устраняется?

Я написал простой бенчмарк, чтобы выяснить, можно ли устранить проверку границ, когда массив вычисляется по битам и. Это в основном то, что делают почти все хеш-таблицы: они вычисляют h & (table.length - 1) в качестве индекса в table, где h это …
1 ответ

Устранение проверки массивов в CLR?

Недавно я читал эту статью Дэйва Детлефса, в которой он представляет несколько случаев, когда CLR выполняет исключение проверки границ массива. Я решил проверить это сам, поэтому я сделал следующее: Открыт Visual Studio 2010 Ultimate SP1 Создан новы…
4 ответа

Проверка границ массива в.net 4 и выше

Меня интересует, насколько эффективными могут быть низкоуровневые алгоритмы в.net. Я хотел бы дать нам возможность в будущем писать больше нашего кода на C#, а не на C++, но одним камнем преткновения является проверка границ в.net, которая возникает…
23 май '13 в 11:45
4 ответа

Как я могу кодировать Java, чтобы разрешить использование SSE и устранение проверки границ (или другие дополнительные оптимизации)?

Ситуация: Я оптимизирую реализацию алгоритма сжатия LZF на чистой Java, которая включает в себя множество байтов [] и базовых математических методов для хеширования и сравнения. Производительность действительно имеет значение, потому что цель сжати…
2 ответа

Проверка границ массива в DynamicAssembly работает только тогда, когда стек оценки пуст

У меня есть простой цикл с доступом к массиву, написанный с использованием ILGenerator. Когда метод создается с этим точным кодом, я открываю дизассемблирование, и все в порядке, без проверки границ массива. Но когда я сначала помещаю экземпляр друг…
5 ответов

Что особенного в цикле foreach, который устраняет проверку границ?

Каков особый случай с циклом foreach/for, который устраняет проверку границ? Кроме того, какие границы проверки это?
2 ответа

Проверка границ в Java

"Hotspot может удалить проверку границ в Java". Кто-нибудь может объяснить это, пожалуйста? На самом деле я анализирую различия между C++ и Java. Это не домашняя работа, и я анализирую свои собственные интересы.
1 ответ

Устранить проверку границ массива Haskell для ограниченного типа?

Я делаю достаточно много массивов, чей тип индекса Bounded и чей диапазон индекса (minBound, maxBound), Для такого массива проверка границ должна быть ненужной. Как я могу убедить GHC отменить проверку границ? Мое конкретное приложение использует ка…
10 июл '12 в 10:54
2 ответа

Пример оптимизации проверки границ Java

Я читал, что некоторые из JVM могут оптимизировать выполнение кода, удалив проверку границ. Я пытаюсь понять, какая техника кодирования будет работать лучше. В методе example1 ниже JVM когда-нибудь выяснит это и исключит проверку границ ссылки на ис…
03 июл '11 в 15:58
1 ответ

Почему JIT так плохо справляется с устранением связанных проверок?

Я тестирую возможности исключения HotSpot JIT для связанных проверок. Вот две версии одной и той же реализации heapsort, одна использует обычное индексирование массива, другая sun.misc.Unsafe API, без обязательных проверок: public class HeapSort { /…
1 ответ

Реализация проверки границ цикла через прерывание переполнения

Сегодня у меня была идея, что можно реализовать цикл с проверкой границ для массива, построив счетчик итераций, который будет переполняться на последнем приращении и останавливать выполнение на основе сгенерированного прерывания переполнения. Итак, …
1 ответ

Устранение проверки пропущенных границ в конструкторе String?

Изучая производительность декодирования UTF8, я заметил, что производительность protobuf лучше, чем для следующей строки, отличной от ascii: "Quizdeltagerne spiste jordb\u00e6r med fl\u00f8de, mens cirkusklovnen". Я попытался выяснить, почему, поэто…
1 ответ

Может ли Hotspot устранить проверки границ, когда диапазон индекса ограничен с помощью и?

Рассмотрим следующую функцию: int foo(int[] indices) { int[] lookup = new int[256]; fill(lookup); // populate values, not shown int sum = 0; for (int i : indices) { sum += lookup[i & 0xFF]; // array access } return sum; } Может ли современный Ho…
2 ответа

Убрать проверку границ в цикле Rust в попытке достичь оптимального вывода компилятора

В попытке определить, могу ли я использовать Rust вместо C/C++ по умолчанию, я рассматриваю различные крайние случаи, в основном имея в виду следующий вопрос: в 0,1% случаев, когда это имеет значение, всегда ли я могу получить вывод компилятора так …
09 дек '20 в 12:53