Генерируют ли JIT-компиляторы JVM код, использующий векторизованные инструкции с плавающей запятой?

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

Работа, по сути, состоит из скалярных произведений. Например, у меня есть два float[50], и мне нужно вычислить сумму попарных произведений. Я знаю, что существуют наборы команд процессора для быстрого и массового выполнения таких операций, как SSE или MMX.

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

Я знаю, что вы не можете гарантировать, что JIT скомпилирует или не скомпилирует. Кто-нибудь когда-либослышал о JIT-генерирующем коде, который использует эти инструкции? и если да, то есть ли что-то в коде Java, что помогает компилировать его таким образом?

Вероятно, «нет»; стоит спросить.

91
задан Sean Owen 28 May 2012 в 12:48
поделиться