pstlspoc Index du Forum

pstlspoc
SPOC

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Intéropérabilité SPOC - OpenGL
Aller à la page: <  1, 2, 3, 4, 5, 6, 7, 8  >
 
Poster un nouveau sujet   Répondre au sujet    pstlspoc Index du Forum -> pstlspoc -> pstlspoc
Sujet précédent :: Sujet suivant  
Auteur Message
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Sam 23 Mar - 23:41 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Ok, je croyais que j'avais rajouté l'erreur moi même...en parcourant le fichier ( pageUp (touche 9) pageDown (touche 8) )
mais comme il y a le probleme egalement dans restore il me semble, je me suis dit que c'était trop de coincidences...

#define OPENCL_GET_CONTEXT \
    {cl_context ctx; \
    cl_command_queue queue[2]; \
    spoc_cl_context *spoc_ctx; \
    cl_int opencl_error = 0; \
    spoc_ctx = (spoc_cl_context*)Field(gi, 9); \
    ctx = spoc_ctx->ctx; \
    queue[0] = spoc_ctx->queue[0];\
    queue[1] = spoc_ctx->queue[1];\
    caml_enter_blocking_section();



#define OPENCL_RESTORE_CONTEXT \
    caml_leave_blocking_section();        \
    spoc_ctx->queue[0] = queue[0]; \
    spoc_ctx->queue[1] = queue[1]; \
    spoc_ctx->ctx = ctx;\
    Store_field(gi,9, (value)spoc_ctx);}


Revenir en haut
Publicité






MessagePosté le: Sam 23 Mar - 23:41 (2013)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Dim 31 Mar - 21:52 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

J'ai un problème similaire à la dernière fois (fuite de mémoire OpenCL)

le programme tourne puis s'arrete :



Erreur:

IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_cpu_to_device@ 548
Fatal error: exception OpenCL.MEM_OBJECT_ALLOCATION_FAILURE
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).





Opencl_dynlink.h: 


...
/* cl_context_info  */
#define CL_CONTEXT_REFERENCE_COUNT                  0x1080
#define CL_CONTEXT_DEVICES                          0x1081
#define CL_CONTEXT_PROPERTIES                       0x1082
 
/* cl_context_info + cl_context_properties */
#define CL_CONTEXT_PLATFORM                         0x1084
#define CL_GL_CONTEXT_KHR                             0x1085
#define CL_GLX_DISPLAY_KHR                             0x1086
 
/* cl_command_queue_info */
#define CL_QUEUE_CONTEXT                            0x1090
#define CL_QUEUE_DEVICE                             0x1091
...


Spoc_c.c:
value spoc_getOpenCLDevice(value relative_i, value absolute_i) {
...
        OPENCL_TRY("clGetDeviceInfo", clGetDeviceInfo ( device_ids[device_id], CL_DEVICE_ERROR_CORRECTION_SUPPORT , sizeof(infoBool), &infoBool, &infoLen ));
        Store_field(general_info,6, Val_bool(infoBool));
        Store_field(general_info,7, absolute_i);
       
        properties[0] = CL_CONTEXT_PLATFORM;
        properties[1] = (cl_context_properties) platform_ids[platform_id];
       
        properties[2] = CL_GL_CONTEXT_KHR;
        properties[3] = (cl_context_properties)glXGetCurrentContext();
       
        properties[4] = CL_GLX_DISPLAY_KHR;
        properties[5] = (cl_context_properties)glXGetCurrentDisplay();

       
        properties[6] = 0;

        dev_id[0] = device_ids[device_id];
        printf("HERE 1 \n");  
        OPENCL_CHECK_CALL1(ctx, clCreateContext(properties, 1, dev_id, pfn_notify, NULL, &opencl_error));
...
}

J'ai mis en gras ce que j'ai ajouter, pensez que j'enrichisse dynlink correctement?


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Dim 31 Mar - 22:35 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Je veux bien une archive complète.
Sinon avez vous bien pensé a aggrandir properties:
cl_context_properties properties[3];

qui doit devenir
cl_context_properties properties[7];


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Dim 31 Mar - 23:21 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Effectivement je n'avais pas pensé à cela, maintenant l'erreur à changé
le programme ne se lance même plus:

IN: spoc_getOpenCLDevice@ 231
Fatal error: exception OpenCL.INVALID_VALUE



Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Dim 31 Mar - 23:23 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Je joins tout de même une archive:
http://www.sendspace.com/file/rgkq88


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Dim 31 Mar - 23:26 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Dans mon exemple de Code OpenCL je n'utilisais pas votre fonction:
cad clCreateContext mais plutôt clCreateContextFromType je ne sais pas si pour l'interop je peux garder la votre


cl_context creerContexte() {
  cl_int errNum;
  cl_uint numPlatforms;
  cl_platform_id firstPlatformId;
  cl_context context = NULL;
 
  //selection OpenCL platforme
  clGetPlatformIDs(1, &firstPlatformId, &numPlatforms);
  
  cl_context_properties contextProperties[] =  {
    CL_CONTEXT_PLATFORM,
    (cl_context_properties)firstPlatformId,
    CL_GL_CONTEXT_KHR,
    (cl_context_properties)glXGetCurrentContext(),
    CL_GLX_DISPLAY_KHR,
    (cl_context_properties)glXGetCurrentDisplay(),
    0
  };
  
  //creer contexte OpenCL pour périph. GPU
  context = 
    clCreateContextFromType(contextProperties, CL_DEVICE_TYPE_GPU,
                NULL, NULL, &errNum);
  
  return context;
}


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Lun 1 Avr - 01:39 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

J'ai corriger mes valeurs par rapports à celles que vous avez mis dans vos includes,
l'erreur INVALID_VALUE est partie.

#define CL_GL_CONTEXT_KHR                             0x2008
#define CL_GLX_DISPLAY_KHR                             0x200A

Cependant j'ai l'erreur suivante à présent.

IN: spoc_getOpenCLDevice@ 231
Fatal error: exception OpenCL.OPENCL_ERROR_UNKNOWN


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Lun 1 Avr - 11:35 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Normalement vous pouvez garder  clCreateContext 


Encore une fois, je veux bien l'archive pour tester directement tout le code.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Lun 1 Avr - 12:12 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Cette archive est à jour:
http://www.sendspace.com/file/eems2a

J'ai modifier:
Spoc_c.c      spoc_getOpenCLDevice   l.221
Spoc_c.h     l.268   (modifier selon vos includes mais je suis pas sûr de bien m'en servir)

Il n'y a plus d'erreur de VALUE donc je pense que je passe les bon arguments à clCreateContext.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Lun 1 Avr - 12:14 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

J'ai aussi modifier dans sphere_spoc.ml le device par défault, j'ai mis OpenCL plutôt que Cuda.

Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Mar 2 Avr - 16:25 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Je pense que j'ai résolu mon problème ci-dessous
Code:

IN: spoc_getOpenCLDevice@ 231
Fatal error: exception OpenCL.OPENCL_ERROR_UNKNOWN
 
Je demandais: 

CL_GL_CONTEXT_KHR,
    (cl_context_properties)glXGetCurrentContext(),

ansi que

 CL_GLX_DISPLAY_KHR,
    (cl_context_properties)glXGetCurrentDisplay(),

alors que je n'étais pas encore entrée dans la boucle OpenGL. Mon argument "properties" était érroné...




Cependant j'ai toujours une erreur:

Code:


IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

Fatal error: exception OpenCL.MEM_OBJECT_ALLOCATION_FAILURE
 

Cette erreur me fait penser à la fuite de mémoire que l'on avait eu.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Dim 7 Avr - 17:35 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Bonjour,

Je n'arrive vraiment pas à décoller de mes problèmes d'interop.

c: CPU
g: GPU Cuda
o: GPU OpenCL
b: CPU -> VBO (RAM -> VRAM)
v: CPU -> GPU -> VBO




J'ai un problème avec l'interop :
v: CPU -> GPU -> VBO

si je déplace la ligne suivante l'erreur change, malgré mes recherches je ne vois pas le problème.
    clCreateFromGLBuffer !!vboId 0 (!dev1).Devices.general_info !pts_sphere;



placé après run (kernel#run)

Code:
IN: spoc_opencl_custom_device_to_cpu@ 707
IN: spoc_opencl_custom_device_to_cpu@ 707
IN: spoc_opencl_custom_device_to_cpu@ 707
Fatal error: exception OpenCL.INVALID_VALUE
 
placé avant run (kernel#run)

Code:

IN: spoc_opencl_alloc_vect@ 427
IN: spoc_opencl_custom_cpu_to_device@ 577
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_custom_cpu_to_device@ 577
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_custom_cpu_to_device@ 577
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

Fatal error: exception OpenCL.MEM_OBJECT_ALLOCATION_FAILURE
 


J'ai également un problème qui vient de surgir avec la sphère sans VBO GPU :
o: GPU OpenCL

 
Code:

IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

Fatal error: exception OpenCL.MEM_OBJECT_ALLOCATION_FAILURE


Est-ce que le fait d'avoir modifier le contexte (CL GL Sharing) peut en être la cause?
J'ai aussi le problème avec GPU VBO (opencl) mais pas avec CPU VBO bizarrement.


PS:
Vous aviez raison Jeudi dernier l'affectation du VBO se fait bien dans le kernel (c'est aussi ce qu'il fait dans mon exemple C).
Je devrais aviser pour ce problème. Notament pour le passage par valeur du vertex array.
Code:

let to_ba = Bigarray.Array1.of_array Bigarray.float32 Bigarray.c_layout ;;
(* vertex coords array *)
let vertices = ref (Array.make (!taille*1100) 0.0);;
let verticesBA = ref (to_ba !vertices);;
 


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Dim 7 Avr - 17:43 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

CL_GL_Sharing + Spoc_modifié :
http://www.sendspace.com/file/dcxww7

Sample
sphere_spoc.ml : dessine_sphereVBO_GPU

SPOC
Spoc_c.c : spoc_getOpenCLDevice modifié

Spoc_Sharing_c.c :
spoc_clCreateFromGLBuffer: cause du problème? (d_A et value A)
spoc_clEnqueueAcquireGLObjects : probleme segmentation pr l'instant en commentaire
spoc_clEnqueueReleaseGLObjects   probleme segmentation pr l'instant en commentaire


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Lun 8 Avr - 13:31 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

plusieurs problèmes que je vois assez vite dans le programme envoyé.


1 . l'ordre des fonctions n'est pas bons.
Il faut clcreate, acquire, kernel#run, release...


2. il faut que acquire et release fonctionnent pour tester le reste


3. Il y a plein de choses qui ne vont pas dans l'interop:
exemple:
vous écrivez :
Store_field(A, 1, Val_cl_mem(d_A));


avec A un vecteur spoc
le champ1 du vecteur spoc contient le vecteur CPU (et il faut préciser si c'est un Custom ou un Vector normal. Comme vous mettez n’importe quoi dans ce champ (un cl_mem, cad un vecteur GPU) il croit que c'est un custom et déclenche des erreurs qui n'ont aucun sens.
le cl_mem doit être mis dans un tableau a la case correspondant au device avec lequel vous appelez l fonction.


regardez 




CAMLprim value spoc_opencl_alloc_vect(value vector, value nb_device, value gi){
CAMLparam3(vector, nb_device, gi);
CAMLlocal3(bigArray, dev_vec_array, dev_vec);
void* h_A;
cl_mem d_A;
int size;
cl_device_id device_id;
int type_size;
int tag;
bigArray = Field (Field(vector, 1), 0);
h_A = (void*)Data_bigarray_val(bigArray);
dev_vec_array = Field(vector, 3);
dev_vec =Field(dev_vec_array, Int_val(nb_device));
d_A = Cl_mem_val(Field(dev_vec, 1));
size =Int_val(Field(vector, 4));
//if (d_A){ clReleaseMemObject(d_A);}
OPENCL_GET_CONTEXT;
GET_TYPE_SIZE;


OPENCL_CHECK_CALL1(d_A, clCreateBuffer(ctx, CL_MEM_READ_WRITE, size*type_size, NULL, &opencl_error));
OPENCL_RESTORE_CONTEXT;


Store_field(dev_vec, 1, Val_cl_mem(d_A));
CAMLreturn(Val_unit);
}


dans Mem.c  qui devrait vous montrer un peu mieux la marche a suivre.


Ah et n’hésitez pas si besoin a écrire des fonctions caml qui utilisent vos externals, vous n'êtes pas obligé de tout faire en C, par exemple si vous voulez mettre a jour un champ pour informer qu'un vecteur a être déplacé du CPU au GPU (regarder to_device dans Mem.ml.


Bon courage, on peut skyper si certaines choses ne sont pas claires.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Lun 8 Avr - 22:09 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

J'ai du mal à comprendre.

J'avais vu ce code mais je ne le comprends vraiment pas:
dev_vec_array = Field(vector, 3);
dev_vec =Field(dev_vec_array, Int_val(nb_device));
d_A = Cl_mem_val(Field(dev_vec, 1));


CL_GL_Sharing V2.0:
http://www.sendspace.com/file/wxzmi4

CreateFromGLBuffer Ocaml     passe
EnqueueAcquireGLObjects       passe
Run Kernel                             passe
EnqueueReleaseGLObjects       erreur segmentation.


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 05:03 (2018)    Sujet du message: Intéropérabilité SPOC - OpenGL

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    pstlspoc Index du Forum -> pstlspoc -> pstlspoc Toutes les heures sont au format GMT + 1 Heure
Aller à la page: <  1, 2, 3, 4, 5, 6, 7, 8  >
Page 5 sur 8

 
Sauter vers:  

Index | Panneau d’administration | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com