/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package rnaopencl;
import com.nativelibs4java.opencl.CLBuffer;
import com.nativelibs4java.opencl.CLContext;
import com.nativelibs4java.opencl.CLDevice;
import com.nativelibs4java.opencl.CLEvent;
import com.nativelibs4java.opencl.CLKernel;
import com.nativelibs4java.opencl.CLMem;
import com.nativelibs4java.opencl.CLPlatform;
import com.nativelibs4java.opencl.CLProgram;
import com.nativelibs4java.opencl.CLQueue;
import com.nativelibs4java.opencl.JavaCL;
import com.nativelibs4java.util.IOUtils;
import com.nativelibs4java.util.NIOUtils;
import java.io.File;
import java.io.IOException;
import java.nio.ByteOrder;
import java.nio.DoubleBuffer;
import java.nio.FloatBuffer;
/**
*
* @author mcas
*/
public class Testes {
public static void main(String[] args) throws IOException {
double v1[] = FuncoesCPU.gerarVetorAleatorio(12, -30, 30);
double v2[] = FuncoesCPU.gerarVetorAleatorio(144, -1, 1);
double v3[] = FuncoesCPU.gerarVetorAleatorio(12, 0, 0);
//calcula "normal"
double[] temp = new double[v1.length];
for(int i = 0; i < v1.length; i++){
temp[i] = v2[i];
}
v3[0] = FuncoesCPU.produtoEscalar(v1, temp);
//for(int i = 0; i < v3.length; i++){
System.out.print(v3[0]);
System.out.print(",");
for(int i = v1.length; i < (v1.length*2); i++){
temp[i%12] = v2[i];
}
v3[1] = FuncoesCPU.produtoEscalar(v1, temp);
System.out.print(v3[1]);
System.out.print(",");
//}
System.out.println("");
System.out.println("");
int dataSize = v1.length;
CLContext context = JavaCL.createBestContext();
CLQueue queue = context.createDefaultQueue();
ByteOrder byteOrder = context.getByteOrder();
DoubleBuffer v1_b = NIOUtils.directDoubles(dataSize, byteOrder);
DoubleBuffer v2_b = NIOUtils.directDoubles(v2.length, byteOrder);
FuncoesGPU.preencheBuffer(v1_b, v1);
FuncoesGPU.preencheBuffer(v2_b, v2);
CLBuffer<Double> buffer_v1 = context.createDoubleBuffer(CLMem.Usage.Input,v1_b, true);
CLBuffer<Double> buffer_v2 = context.createDoubleBuffer(CLMem.Usage.Input,v2_b, true);
CLBuffer<Double> buffer_v3 = context.createDoubleBuffer(CLMem.Usage.Output, dataSize);
String src = IOUtils.readText(new File("matvec.cl"));
CLProgram program = context.createProgram(src);
CLKernel prod_escalar = program.createKernel("prod_escalar");
prod_escalar.setArgs(buffer_v1, buffer_v2, buffer_v3, dataSize, dataSize);
CLEvent prodEvt = prod_escalar.enqueueNDRange(queue, new int[] { dataSize });
DoubleBuffer buffer_v4 = buffer_v3.read(queue,prodEvt);
for(int i = 0; i < dataSize;i++){
System.out.print(buffer_v4.get(i));
System.out.print(",");
}
}
}