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: Lun 11 Mar - 16:26 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

J'ai l'impression que j'ai les fonctions définies dans cl_gl.h à porté plus celle de spoc.h . Mais c'est plutôt du bricolage mes makefile...

Revenir en haut
Publicité






MessagePosté le: Lun 11 Mar - 16:26 (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 17 Mar - 18:08 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Bonjour, j'ai fait un programme OpenCL pour voir de quoi j'avais besoin en interop, mais
dès le premier apel j'ai une erreur de segmentation.

...
    cl_uint numPlatforms;
    cl_platform_id firstPlatformId;
    clGetPlatformIDs(Val_int(1), &firstPlatformId, &numPlatforms);
...

Je penses que vous aviez raison la dernière fois au sujet des valeurs que je passe en arguments...

Cl_Gl_Sharing:

http://www.sendspace.com/file/y3nr4e

test interop OpenCL:

http://www.sendspace.com/file/tzlw70


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Lun 18 Mar - 07:37 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

La ligne     
clGetPlatformIDs(Val_int(1), &firstPlatformId, &numPlatforms);
a peu de sens.


Val_int "transforme" un entier en valeur caml, Int_val transforme une valeur caml en entier.
Ici la fonction à besoin d'un entier. soit vous utilisez IntVal en lui passant une valeur caml (1 est un entier C), soit vous utiliser directement l'entier C.


Par ailleurs, vous devriez pouvoir passer directement le device depuis caml vers C sans avoir besoin de récupérer la platform etc.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

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

J'ai tout essayer pour faire disparaitre l'erreur de segmentation, d'où la présence de choses bizarre comme Val_int (dsl).

J'ai utiliser gdb et pour lui l'erreur de segmentation vient de clGetPlatformIDs.

 
Code:

(gdb) r
Starting program: /home/ran/Bureau/PSTL/SPOC-121217_modified/Cl_Gl_Sharing/Samples/SphereSpocVBO/sphere_spoc.nat
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffeeaaf700 (LWP 5130)]
[New Thread 0x7fffed3a6700 (LWP 5131)]
[New Thread 0x7fffebe9d700 (LWP 5132)]
[New Thread 0x7fffeb69c700 (LWP 5133)]
[New Thread 0x7fffeae9b700 (LWP 5134)]
[New Thread 0x7fffea69a700 (LWP 5135)]
[New Thread 0x7fffe9e99700 (LWP 5136)]
Will use device : GeForce GTX 675M
début

Program received signal SIGSEGV, Segmentation fault.
0x00000000004f5fe0 in clGetPlatformIDs ()
(gdb) 


Or dans mon code en C il n'y à pas de problème donc je pense que l'erreur vient d'autre part. Et je ne vois pas du tout où.

Je vais utiliser le device depuis caml vers C mais j'ai peur que les erreur de segmentation restent quand même.


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Mar 19 Mar - 07:05 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

En effet ça fait l'erreur même sans le Val_int.
Le problème peut venir du fait que vous utilisez une fonction "clGetPlatformIDs" qui est définie dans la bibliothèque avec laquelle vous linkez le programme mais aussi par Spoc (dans Opencl_dynlink.h/.c) .


Essayez d'éviter d'utiliser ces fonctions là (en fait vous devriez probablement utiliser Spoc.h et vous faire un .h qui contient ce qui vous manque plutôt que d'utiliser celui d'OpenCL).
Par ailleurs, vous n'avez vraiment pas besoin de ces fonctions normalement pour faire l'interop. Comme dit plus haut, vous devriez pouvoir faire ça sans récupérer la platform. Le contexte opencl est déjà associé à chaque device. Il n'y a qu'à le récupérer (il y a même une macro pour ça dans Spoc.h normalement).


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Mer 20 Mar - 12:33 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Effectivement quand j'utilise seulement Spoc.h l'erreur de segmentation disparaît.


J'essaye de récupérer le context pour le passer par valeur à clCreateFromGLBuffer.
Il m'a sembler que OPENCL_GET_CONTEXT dans "Spoc.h" faisait tout ce qu'il fallait au niveau de ctx.





Code:
  //CL Buffer Objects > GL Buffer Objects
  CAMLprim value
  spoc_clCreateFromGLBuffer(value _bufobj,
                value _errcode_ret,
                value gi) {
    CAMLparam3(_bufobj, _errcode_ret, gi);
    
    printf("début\n");

    OPENCL_GET_CONTEXT;
    GLuint bufobj = Int_val(_bufobj);
    cl_int errcode_ret = Int_val(_errcode_ret);
   
    clCreateFromGLBuffer( ctx, CL_MEM_READ_WRITE, bufobj, &errcode_ret);
   
    OPENCL_RESTORE_CONTEXT;

    printf("fin\n");

    CAMLreturn(Val_unit);
  }
 




Est-ce selon vous la bonne macro à utiliser? Avez vous une idée de l'erreur de segmentation (j'ai enlever les includes CL) ?


Pour l'argument "gi" il ma semblé qu'il fallait passé le device par valeur.

Code:
(gdb) r
Starting program: /home/ran/Bureau/PSTL/SPOC-121217_modified/Cl_Gl_Sharing/Samples/SphereSpocVBO/sphere_spoc.nat
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffeeaae700 (LWP 8489)]
[New Thread 0x7fffed3a5700 (LWP 8490)]
[New Thread 0x7fffebe9c700 (LWP 8491)]
[New Thread 0x7fffeb69b700 (LWP 8492)]
[New Thread 0x7fffeae9a700 (LWP 8493)]
[New Thread 0x7fffea699700 (LWP 8494)]
[New Thread 0x7fffe9e98700 (LWP 8495)]
Will use device : GeForce GTX 675M
début

Program received signal SIGSEGV, Segmentation fault.
0x0000000000442f29 in spoc_clCreateFromGLBuffer (_bufobj=1, _errcode_ret=1,
    gi=140737247640176) at Spoc_Sharing_c.c:32
32        OPENCL_GET_CONTEXT;
 


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Mer 20 Mar - 12:36 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

C'est en effet la bonne macro.Regardez bien dans le code de Spoc comment elle est utilisée et surtout comment l'argument gi est créé (en particulier au niveau de lappel de la fonction caml).

Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

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

 J'ai beaucoup de mal à décollé dans l'interop...


Dans ma fonction ML je lance :

Code:

clCreateFromGLBuffer 0 0 (!dev1).Devices.general_info;  




Dans mon Stubs.c j'ai ceci:



Code:

  //CL Buffer Objects > GL Buffer Objects 
  CAMLprim value
  spoc_clCreateFromGLBuffer(value _bufobj, value _errcode_ret, value gi) {
    
    CAMLparam3(_bufobj, _errcode_ret, [b]gi[/b]);
    
    printf("début\n");

    cl_mem d_A;
    int type_size;
    int size;
    GLuint bufobj = Int_val(_bufobj);
    int errcode_ret;
    
    [b]OPENCL_GET_CONTEXT;[/b]
    OPENCL_CHECK_CALL1(errcode_ret, clCreateFromGLBuffer( ctx, CL_MEM_READ_WRITE, bufobj, &errcode_ret));
    OPENCL_RESTORE_CONTEXT;
    
    printf("fin\n");

    CAMLreturn(Val_unit);
    
  }



OPENCL_GET_CONTEXT fait une erreur de segmentation que je n'arrive pas à dépasser...je n'ai pas l'erreur avec CUDA_GET_CONTEXT, mais le programme se fige.
Est-ce que d'après vous j'utilise convenablement la macro?


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

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

Je veux bien le code complet pour y jeter un oeil et pourquoi pas tester.

Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

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

Cl_Gl_Sharing:
http://www.sendspace.com/file/iy1w9t

PS:
Les fichier concernés sont:
Stub: Spoc_Sharing_c.c
ML: Sharing.ml
main test: sphere_spoc.ml


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

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

touche 'v' pour lancer VBO

Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

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

touche 'b' pour lancer VBO CPU (vous m'aviez que le FPS devait rester inchangé il me semble, je ne croit pas que ca soit le cas)

Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

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

Bug corrigé... ca vient de Spoc.h je pense.
Récupérez celui du dossier de SPOC et ça devrait mieux marcher.


Si vous voulez  plus d'info dans OPENCL_GET_CONTEXT que vous utilisiez il y avait :
spoc_ctx = (spoc_cl_context*)Field(gi, 9); \





Dans le bon il y a
spoc_ctx = (spoc_cl_context*)Field(gi, 8); \


et si on regarde le type GeneralInfo


type generalInfo = {
  name: string;
  totalGlobalMem: int;
  localMemSize: int; (* corresponding cuda name : shared mem per block *)
  clockRate: int;
  totalConstMem: int; (* corresponding OpenCL name : MAX_CONSTANT_BUFFER_SIZE *)
  multiProcessorCount: int; (* corresponding OpenCL name : MAX_COMPUTE_UNIT *)
  eccEnabled: bool; (* corresponding OpenCL name : ERROR_CORRECTION_SUPPORT *)
  id: int;
  ctx: context;
}



le context est le 9e element donc le champ 8.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

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

D'accord, j'ai bien compris le problème qu'il y avait.
Ca fonctionne.
Merci.
Il me semble que l'erreur n'était pas présente dans SPOC à la base?


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

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

L'erreur est dans le code de la bibliothèque Cublas (qui n'utilise qu'OpenCL donc ça ne se "voyait" pas). 
Dans SPOC,  elle n'y est pas.


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 07:31 (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 4 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