Научная новизна. Исследование и разработка соглашений о вызовах

Исследование и разработка соглашений о вызовах. Для успешного использования кода Fortran 08 должны быть приняты и учтены в платформе Java правила для присваивания имен переменным и процедурам, для использования стека и для передачи

параметров между процедурами. Все вместе эти правила составляют соглашения о вызовах (calling convention) и включают в себя:

организацию стека (stack considerations):

· фиксированное или переменное число параметров получает функция;

· вызывающий или вызываемый код очищает стек после вызова;

соглашения по присваиванию имен (naming conventions):

· значим ли верхний или нижний регистр;

· изменяются ли внешние имена с помощью различных префиксов;

протокол передачи параметров (argument passing):

· параметры передаются по значению или по ссылке;

· какие типы данных и типы структур эквивалентны среди Fortran 08 и платформой Java.

Проблемы поддержки многомерных массивов. В Fortran размещение массивов в памяти (развертывание) проводится по столбцам (column-major order), когда как в платформе Java — по строкам (row-major order). Для реализации собственного интерфейс Java для процедур Fortran, содержащих многомерные массивы, предлагается использовать дополнительный параметр, который будет вызывать метод, работающий с матрицей как с транспонированной матрицей. При таком подходе не будет тратиться время на транспонирование матрицы при вызове процедур.

Использование современных методов оптимизации. Основным подходом является использование разработанного кода на Fortran 2008 в виде динамических и разделяемых библиотек (DLL, Shared Library) и разработка к нему собственного (native) интерфейса для вызовов в коде Java.

Кода на современном диалекте Fortran позволит значительно поднять уровень абстракции, а значит увеличит возможности по оптимизации библиотек, недоступные на платформе Java. Одним из способов ускорения является векторизация.

Векторизация. Векторизатор увеличивает скорость выполнения кода с помощью создания автоматического кода Single-Instruction Multiple-Data (SIMD) для циклов с указателями. Современные компиляторы Fortran 2008 поддерживают генерацию команд SIMD процессоров с технологией Intel MMX, а также с набором команд Streaming SIMD Extensions: SSE, SSE2, SSE3, SSE4, SSE4.1, SSE4.2, AVX. Векторизатор имеет и ряд ограничений. Он требует независимости итераций и устранения противоречий памяти. Из-за использования специального набора команд (SSEx), машинный код будет исполняться только на поддерживающих эти инструкции процессорах.

Оптимизация высокого уровня. Она ориентирована на максимальную скорость работы, может переписать алгоритм, чтобы максимально увеличить количество успешных обращений к кэш-памяти, осуществляя более агрессивный анализ зависимости по данным. На оптимизацию высокого уровня тоже накладывается ряд ограничений. Циклы должны удовлетворять тем же требованиям для использования в оптимизаторе, что и для векторизации. Оптимизация высокого уровня необязательно повысит производительность некоторых приложений.

OpenMP. OpenMP (Open Multi Processing) является спецификацией для набора директив компилятора, библиотечных методов и переменных окружения, которые могут быть использованы для задания параллелизма программ при разделяемой памяти. Многие современные компиляторы поддерживают последнюю спецификацию OpenMP API версии 3.2 для Fortran 2008. Они выполняют трансформацию кода для автоматического создания многопоточного кода. Все преимущества доступны только при условии правильного использования директив OpenMP и наличии возможностей поддержки параллельной обработки. Циклы должны удовлетворять следующим требованиям: независимость итераций и устранение противоречий памяти.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: