[Java] CPU plus rapide que le GPU
Bonjour j'ai trouver un bot de code sur internet pour utiliser OpenCl avec java mais parament mon GPU est plus lent que mon CPU (j'ai essayer c avec diférents ordinateurs sans sucsées)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| import com.amd.aparapi.Kernel;
import com.amd.aparapi.Range;
public class App
{
static final int size = 50000000;
static final float[] a = new float[size];
static final float[] b = new float[size];
static final float[] sum = new float[size];
public static void main( String[] args )
{
System.out.println("test CPU");
CPU();
System.out.println("test GPU");
GPU();
System.out.println("test GPU2");
GPU1();
}
static void GPU() {
for (int i = 0; i < size; i++) {
sum[i] = (float)(Math.cos(Math.sin(a[i])) + Math.sin(Math.cos(b[i])));
}
Kernel kernel = new Kernel() {
@Override
public void run() {
int gid = getGlobalId();
sum[gid] = (float)(Math.cos(Math.sin(a[gid])) + Math.sin(Math.cos(b[gid])));
}
};
long t1 = System.currentTimeMillis();
kernel.execute(Range.create(size));
long t2 = System.currentTimeMillis();
System.out.println("Execution mode = "+kernel.getExecutionMode());
kernel.dispose();
System.out.println(t2-t1);
t1 = 0;
t2 = 0;
}
static void GPU1() {
for (int i = 0; i < size; i++) {
sum[i] = (float)(Math.cos(Math.sin(a[i])) + Math.sin(Math.cos(b[i])));
}
Kernel kernel = new Kernel(){
@Override public void run() {
int gid = getGlobalId();
sum[gid] = a[gid] + b[gid];
}
};
long t1 = System.currentTimeMillis();
kernel.execute(Range.create(size));
long t2 = System.currentTimeMillis();
System.out.println("Execution mode = "+kernel.getExecutionMode());
kernel.dispose();
System.out.println(t2-t1);
t1 = 0;
t2 = 0;
}
static void CPU() {
for (int i = 0; i < size; i++) {
sum[i] = (float)(Math.cos(Math.sin(a[i])) + Math.sin(Math.cos(b[i])));
}
long t1 = System.currentTimeMillis();
for(int i=0;i<size;i++) {
sum[i]=a[i]+b[i];
}
System.out.println("Execution mode = normal");
long t2 = System.currentTimeMillis();
System.out.println(t2-t1);
t1 = 0;
t2 = 0;
} |
resultat :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
test CPU
Execution mode = normal
105
test GPU
Check your environment. Failed to load aparapi native library aparapi_x86_64 or possibly failed to locate opencl native library (opencl.dll/opencl.so). Ensure that both are in your PATH (windows) or in LD_LIBRARY_PATH (linux).
Execution mode = JTP
5693
test GPU2
Execution mode = JTP
1907 |
c'est quoi ce mode d'éxecution en jtp et sur tout pour quoi le "Failed to load aparapi native library" ?
et c'est quoi la diference entre GPU et GPU1?
je ne comprend absolument rien a opencl alors c'est quoi le lien entre opencl et opengl?
merci d'avence pour vos reponces qui sans doute serons trez utiles.