LINUX.ORG.RU

История изменений

Исправление AntonI, (текущая версия) :

Потому что гладиуолус ветвления.

Рассмотрим произвольный json файл. Я не делал профилирование разбора, тем более на яве, но могу предположить что основные ресуры уйдут на:

  1. преобразование строк в числа

  2. набивку ассоциативных массивов, если там есть словари

  3. работу с менеджером памяти.

Если мы говорим про аппаратную реализацию SIMD на основе SSE/AVX, то ни один из этих пунктов толком ускорен быть не может - потому что входные данные в общем случае произвольны, и ветвления сьедят весь профит. Если мы говорим про SIMD как про реализацию какой то явовской конструкции в виде обычного цикла, даже развернутого, то тем более не понятно как здесь можно обогнать те же плюсы - в плюсах компилятор такие вещи делает по умолчанию.

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

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

Исправление AntonI, :

Потому что гладиуолус ветвления.

Рассмотрим произвольный json файл. Я не делал профилирование разбора, тем более на яве, но могу предположить что основные ресуры уйдут на:

  1. преобразование строк в числа

  2. набивку ассоциативных массивов, если там есть словари

  3. работу с менеджером памяти.

Если мы говорим про аппаратную реализацию SIMD на основе SSE/AVX, то ни один из этих пунктов толком ускорен быть не может - потому что входные данные в общем случае произвольны, и ветвления сьедят весь профит. Если мы говорим про SIMD как про реализацию какой то явовской конструкции в виде обычного цикла, даже развернутого, то тем более не понятно как здесь можно обогнать те же плюсы - в плюсах компилятор такие вещи делает по умолчанию.

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

Да и сама постановка задачи звучит двольно смешно - мы хоти ускорить парсинг джисона! Блджад, нормальные люди не хранят большие обьемы данных в джисоне - большие обьемы данных хранятся в бинарных форматах допускающих мапирование в память. SIMD используется для обработки этих обьемов, и то это не всегда возможно, есть целая куча ограничений. Собственно из всех видов параллелизма сейчас векторизацию использовать сложнее всего, скажем даже для stencil вычислений, где данные уже подготовены и лежат в упорядоченной струкутре стройными рядами, векторизацию использовать ой как непросто…

Исходная версия AntonI, :

Потому что гладиуолус ветвления.

Рассмотрим произвольный json файл. Я не делал профилирование разбора, тем более на яве, но могу предположить что основные ресуры уйдут на:

  1. преобразование строк в числа

  2. набивку ассоциативных массивов, если там есть словари

  3. работу с менеджером памяти.

Если мы говорим про аппаратную реализацию SIMD на основе SSE/AVX, то ни один из этих пунктов тольком ускорен быть не может - потому что входные данные в общем случае произвольны, и ветвления сьедят весь профит. Если мы говорим про SIMD как про реализацию какой то явовской конструкции в виде обычного цикла, даже развернутого, то тем более не понятно как здесь можно обогнать те же плюсы - в плюсах компилятор такие вещи делает по умолчанию.

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

Да и сама постановка задачи звучит двольно смешно - мы хоти ускорить парсинг джисона! Блджад, нормальные люди не хранят большие обьемы данных в джисоне - большие обьемы данных хранятся в бинарных форматах допускающих мапирование в память. SIMD используется для обработки этих обьемов, и то это не всегда возможно, есть целая куча ограничений. Собственно из всех видов параллелизма сейчас векторизацию использовать сложнее всего, скажем даже для stencil вычислений, где данные уже подготовены и лежат в упорядоченной струкутре стройными рядами, векторизацию использовать ой как непросто…