IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCL Discussion :

OpenCL dans le JAVA


Sujet :

OpenCL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut OpenCL dans le JAVA
    Salut.

    j'ai un projet de le faire, mais je suis bloquer avec OpenCL.
    La plupart des documentations sans pour C++ mais il faut que je l’implémente en JAVA

    il y-a 2 partes de mon code :

    l'une parallélisme normale des opérations sur des matrices dans java.
    l'autre est d’implémenter les même opération dans GPU avec OpenCL .

    mon code de parallélisme normale dans le CPU est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package matr;
     
    import java.util.Random;
    import java.util.Scanner;
     
    /**
     *
     * @author mehrez
     */
    public class moi extends Thread {
     
        private int[][] AA, BB;
        public int[][] CC; // 
        private int debut, fin; // 
        private Trieur parent;  // 
        private int nbNotify = 0; // 
     
        public moi(int[][] A, int[][] B, int[][] C, int d, int f) {
            this.AA = A;
            this.BB = B;
            this.CC = C;
            this.debut = d;
            this.fin = f;
            System.out.println("kjdqgvqkvq  fin MOI(A,B) : ");
            System.out.println("A.length =  " + A.length);
            System.out.println("AA.length =  " + AA.length);
     
     
            System.out.println("B.length =  " + B.length);
            System.out.println("BB.length =  " + BB.length);
     
     
            start();
        }
     
        public void run() {
            System.out.println("run : ");
            for (int i = this.debut; i < this.fin; i++) {
                System.out.println("for 1 : ");
                for (int j = 0; j < BB.length; j++) {
                    System.out.println("for 2 : ");
                    for (int k = 0; k < AA.length; k++) {
     
                        CC[i][j] += AA[i][k] * BB[k][j];
                        System.out.println("for 3 : ");
     
                    }
     
                }
     
            }
     
        }
     
        public static void main(String[] args) {
            int m, n, d, f;
     
            Scanner input = new Scanner(System.in);
            System.out.print("Entrez le nombre de rangées : ");
            m = input.nextInt();
            Random r = new Random();
            System.out.print("Entrez le nombre de colonnes : ");
            n = input.nextInt();
     
     
            int[][] A = new int[m][n];
            int[][] B = new int[m][n];
            int[][] C = new int[m][n];
            int[][] Cs = new int[m][n];
     
            for (int i = 0; i < A.length; i++) {
                for (int j = 0; j < A[i].length; j++) {
                    A[i][j] = r.nextInt(10) + 1;
                }
            }
            for (int i = 0; i < B.length; i++) {
                for (int j = 0; j < B[i].length; j++) {
                    B[i][j] = r.nextInt(10) + 1;
                }
            }
            System.out.println("Matrice A : ");
            for (int i = 0; i < A.length; i++) {
                System.out.println();
                for (int j = 0; j < A[i].length; j++) {
                    System.out.print(A[i][j] + " ");
                }
            }
            System.out.println();
            System.out.println();
            System.out.println("Matrice B : ");
            for (int i = 0; i < B.length; i++) {            
                System.out.println();
                for (int j = 0; j < B[i].length; j++) {
                    System.out.print(B[i][j] + " ");
                }
            }
            System.out.println();
            System.out.println();
     
     
     
            d = 0;
            f = A.length / 2;
            moi mo = new moi(A, B, C, d, f);
            d = A.length / 2;
            f = A.length;
            moi mo1 = new moi(A, B, C, d, f);
     
            try {
                mo.join();
                mo1.join();
            } catch (InterruptedException e) {
            }
     
     
            System.out.println("Le résultat est: ");
            for (int i = 0; i < A.length; i++) {
                for (int j = 0; j < B.length; j++) {
                    System.out.print(+C[i][j] + " ");
                }
                System.out.println();
            }
        }
    }

    si quelqu'un pouvez m'aide de l’implémente avec OpenCL, j'avais aucune information comment ça fonctionne

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    j'ai fait quelque recherche et j'ai trouver un Kernel pour le traitement , mais maintenant il me reste de faire passer les matrice au Kernel .
    même pour ce probleme j'ai trouver une méthode mais j'arrive pas de le comprendre ( comme j'ai dit j'avais aucune information pour OpenCL ).
    cette méthode est par l’utilisation de CL_MEM_READ_ONLY, es que quelqu'un peux m'aide

    le code de Kernel est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    /**
     * @author zerhem
     */
    kernel void matrix_mult( global float4 *a_mat,
      global float4 *b_mat,  global float *c_mat) {
     
        float sum;
     
        int num_rows = get_global_size(0);
        int vectors_per_row = num_rows/4;
     
        int start = get_global_id(0) * vectors_per_row;
        a_mat += start;
        c_mat += start*4;
     
        for(int i=0; i<num_rows; i++) {
            sum = 0.0f;
            for(int j=0; j<vectors_per_row; j++) {
                sum += dot(a_mat[j], b_mat[i*vectors_per_row + j]);
     
            }
            c_mat[i] = sum;
        }
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    quand je lance le programme, bloque ici, dans cette première ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String src = IOUtils.readText(JavaCLTutorial1.class.getResource("ClKernels.cl"));
            CLProgram program = context.createProgram(src);
    mon kernel code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    kernel void matrix_mult( global float4 *a_mat,
      global float4 *b_mat,  global float *c_mat) {
     
        float sum;
     
        int num_rows = get_global_size(0);
        int vectors_per_row = num_rows/4;
     
        int start = get_global_id(0) * vectors_per_row;
        a_mat += start;
        c_mat += start*4;
     
        for(int i=0; i<num_rows; i++) {
            sum = 0.0f;
            for(int j=0; j<vectors_per_row; j++) {
                sum += dot(a_mat[j], b_mat[i*vectors_per_row + j]);
     
            }
            c_mat[i] = sum;
        }

    mon code java est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import com.nativelibs4java.opencl.CLBuffer;
    import com.nativelibs4java.opencl.CLContext;
    import com.nativelibs4java.opencl.CLEvent;
    import com.nativelibs4java.opencl.CLKernel;
    import com.nativelibs4java.opencl.CLMem;
    import com.nativelibs4java.opencl.CLProgram;
    import com.nativelibs4java.opencl.CLQueue;
    import com.nativelibs4java.opencl.JavaCL;
    import com.nativelibs4java.util.IOUtils;
    import java.io.IOException;
    import java.nio.ByteOrder;
    import java.nio.IntBuffer;
    import org.bridj.Pointer;
     
     
    /**
     *
     * @author mehrez
     */
    public class Cl {
        public static void main(String[] args) throws IOException {
            CLContext context = JavaCL.createBestContext();
            CLQueue queue = context.createDefaultQueue();
            ByteOrder byteOrder = context.getByteOrder();
            int n = 1024;
            // create memory for a 4x4 matrix
            Pointer<Float> AmatrixPtr=Pointer.allocateFloats(4*4).order(context.getByteOrder());
            Pointer<Float> BmatrixPtr=Pointer.allocateFloats(4*4).order(context.getByteOrder());
            Pointer<Float> OutmatrixPtr=Pointer.allocateFloats(4*4).order(context.getByteOrder());
     
            // write the matrix elements
            AmatrixPtr.setFloats(new float[]{
                1, 0, 0, 1,
                2, 1, 2, 0,
                1, 0, 1, 1,
                0, 0, 1, 2});
            BmatrixPtr.setFloats(new float[]{
                1, 0, 0, 1,
                2, 1, 2, 0,
                1, 0, 1, 1,
                0, 0, 1, 2});
     
     
     
        // create a GPU buffer for the matrix
            CLBuffer<Float> OutmatrixGpu=context.createBuffer(CLMem.Usage.Output, OutmatrixPtr, true);
            CLBuffer<Float> AmatrixGpu=context.createBuffer(CLMem.Usage.Input, AmatrixPtr, true);
            CLBuffer<Float> BmatrixGpu=context.createBuffer(CLMem.Usage.Input, BmatrixPtr, true);
     
     
            String src = IOUtils.readText(JavaCLTutorial1.class.getResource("ClKernels.cl"));
            CLProgram program = context.createProgram(src);
     
            // Get and call the kernel :
            CLKernel addFloatsKernel = program.createKernel("matrix_mult");
            addFloatsKernel.setArgs(AmatrixGpu, BmatrixGpu, OutmatrixGpu);
            }
     
     
     
        }

    quelqu'un il peut m'aider ?

Discussions similaires

  1. [Appel URL] appel d'une page web dans 1 Java
    Par c4cf6 dans le forum Applets
    Réponses: 3
    Dernier message: 17/03/2006, 14h13
  2. Des vidéos dans du java ?
    Par pugnator dans le forum Multimédia
    Réponses: 2
    Dernier message: 06/11/2005, 16h36
  3. [Struts] request dans classes java
    Par mlequim dans le forum Servlets/JSP
    Réponses: 24
    Dernier message: 27/10/2005, 13h52
  4. [Java-Swing][HTML] Page html à inclure dans application Java
    Par terminagroo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/07/2005, 10h04
  5. Réponses: 8
    Dernier message: 19/01/2005, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo