OpenCL: Stocker le pointeur sur la mémoire globale dans la mémoire locale?

des solutions?

Est-ce que c’est possible?

__global *float abc; // pointer to global memory stored in private memory 

Je veux abc être stocké dans la mémoire locale au lieu de la mémoire privée.

Je pense que ceci est clarifié ici Liste 5.2:

 __global int global_data[128]; // 128 integers allocated on global memory __local float *lf; // pointer placed on the private memory, which points to a single-precision float located on the local memory __global char * __local lgc[8]; // 8 pointers stored on the local memory that points to a char located on the global memory 

Si je comprends bien les pointeurs: [où ils pointent] tapez * [où stocker] nom;

Eh bien, j’ai également rencontré un problème similaire au vôtre, comme je l’ai déjà expliqué: je pense que cela fonctionne de la manière suivante: dans le kernel OpenCL, les variables d’un kernel ne comportant pas de qualificateur d’adresse (__local, __global, etc.) seront automatiquement sockets en compte. être stocké dans __ espace mémoire privé. Pour les pointeurs qui ne sont pas déclarés avec un qualificateur d’espace, il sera également considéré de pointer sur un espace __private. Voici un exemple d’extrait de code:

 __kernel void foo(__global uint *ptr) { uint tid = get_global_id(0); uint * localPtr = ptr; uint var= *(localPtr + tid); ... ... } 

Dans l’extrait de code ci-dessus, localPtr est un pointeur de type uint qui n’a pas de qualificateur d’espace mémoire. Il sera donc automatiquement considéré comme pointant sur _ espace mémoire privé. Dans OpenCL, un pointeur sur l’espace adresse A ( _global, par exemple) ne peut être affecté qu’à un pointeur sur le même espace adresse (__global). Ainsi, dans l’exemple ci-dessus, un pointeur sur l’espace d’adressage __private ne peut pas être affecté d’un pointeur (ptr) qui pointe sur une adresse __global. (Pour ce faire, vous pouvez également vous référer à OpenCL Spec dans la section “Qualificateurs d’espace d’adressage”). J’espère que cela peut être utile!

C’est légal:

 global uint *globalPtr=&ptr[tid]