当前位置: 首页 > 工具软件 > JavaCL > 使用案例 >

java cl_采用JavaCL快速进行异构开发 | 学步园

卓雅达
2023-12-01

JavaCL是一个封装了OpenCL的Java类库,提供了更多的基于openCL的实现,能够快速进行异构开发。

JavaCL项目地址

http://code.google.com/p/javacl/

API接口地址如下

http://nativelibs4java.sourceforge.net/sites/javacl/apidocs/

基于AMD显卡的环境配置:

1)首先需要安装AMD APP,配置好openCL开发环境

2)在运行->cmd中键入clinfo,查看环境是否配置完成

3)在java中编写代码,并调用JavaCL库,即可进行快速开发。

以下为一个简单的FFT范例(来自JavaCL范例)

int n = 1024; // power-of-two

float[] complexInput = new float[2 * n]; // interleaved real and imag values

for (int i = 0; i < n; i++) {

complexInput[i * 2] = i; // pure-real input

}

//初始化环境

CLContext context = JavaCL.createBestContext(); // use createBestContext(DoubleSupport) for doubles

CLQueue queue = context.createDefaultQueue();

FloatFFTPow2 fft = new FloatFFTPow2(context); // use default OpenCL context

//傅立叶变换

float[] transformed = fft.transform(queue, complexInput, false);

//傅立叶逆变换

float[] transformedBack = fft.transform(queue, transformed, true);

以下为调用自己编写的kernel函数进行异构开发

Kernel函数(myKernel.cl):

__kernel void myKernel(__global const float* input, __global float* output, float multFactor) {

int i = get_global_id(0);

output[i] = input[i] * multFactor;

}

//Java中生成并编译kernel

String source = IOUtils.readText(sample.class.getResource("myKernel.cl"));

program = context.createProgram(source);

myKernel= program.createKernel("myKernel");

//调用kernel

synchronized (kernel) {

// setArgs will throw an exception at runtime if the types / sizes of the arguments are incorrect

myKernel.setArgs(input, output, multFactor);

// Ask for 1-dimensional execution of length dataSize, with auto choice of local workgroup size :

kernelCompletion = myKernel.enqueueNDRange(queue, new int[] { dataSize }, null);

}

这样就完成了kernel的调用。

非常简单,值得一试

 类似资料: