Представлен Aparapi - API для написание OpenCL-ядер на Java
Aparapi - новое API языка программирования JAVA для написания и выполнения OpenCL-ядер на графических акселераторах компании AMD. Если целевая платформа поддерживает OpenCL, то байткод будет проанализирован "на лету" и в случае отсутствия неконвертируемого в OpenCL кода, он транслируется в OpenCL, компилируется и запускается на GPU (если подходящий GPU присутствует). В противном случае, код будет запущен как обычный байткод на CPU.
На данный момент для использования Aparapi требуется:
- ATI Stream SDK версии 2.2 и выше;
- Microsoft Windows 7, Windows Vista SP2 или Windows XP SP3 (все пока что только 32-битные);
- JDK (32-битный ввиду 32-битной платформы);
- GPU от AMD из данного списка.
Для написания Java-ядра с использованием Aparapi создается класс, наследуемый от специального класса Kernel. Данный класс инкапсулирует алгоритмы параллелизма по данным, которые будут выполняться либо на GPU (в результате конвертации в OpenCL-код), либо на CPU посредством Java Thread Pool.
Далее показан пример такого класса-ядра для вычисления квадратов чисел из некоторого множеста.
class SquareKernel extends Kernel { private int values[]; private int squares[]; public SquareKernel(int values[]){ this.values = values; squares = new int[values.length]; } public void run() { int gid = getGlobalID(); squares[gid] = values[gid]*values[gid]; } public int[] getSquares(){ return(squares); } }
Для выполнения этого ядра создается экземпляр данного класса и вызывается метод execute().
int[] values = new int[1024]; // Здесь инициализируются значения массива ... SquareKernel kernel = new SquareKernel(values); kernel.execute(values.length);
Метод execute() неявно вызовет run() и к моменту завершения execute() ядро будет уже рассчитано. Результаты можно получить так:
int[] squares = kernel.getSquares(); for (int i=0; i< values.length; i++){ System.out.printf("%4d %4d %8d\n", i, values[i], squares[i]); }
Ссылки по теме новости:
- Официальная страница Aparapi на developer.amd.com
- ATI Stream SDK
- Форум на amd.com, посвященный применению OpenCL