J'essaie d'utiliser une structure de données personnalisée avec le noyau OpenCL. Je défini dans mon programme hôte une structure simple comme:Utilisation de la structure personnalisée dans opencl
struct myStruct{
cl_ulong n_occ;
cl_ulong start_time;
cl_ulong end_time;
cl_ulong exec_time;
cl_ulong total_time;
cl_float avg_time;
} myStruct_t;
L'équivalent définition de la structure de données personnalisée est également fait dans mon noyau OpenCL.
struct myStruct{
unsigned long n_occ;
unsigned long start_time;
unsigned long end_time;
unsigned long exec_time;
unsigned long total_time;
float avg_time;
} myStruct_t;
La fonction du noyau est la suivante:
__kernel void process_data(__global myStruct_t* input, __global myStruct_t* output){
output->start_time = input->start_time;
output->end_time = input->end_time;
output->exec_time = input->end_time - input->start_time;
output->total_time = input->total_time + output->exec_time;
output->n_occ = input->n_occ + 1;
output->avg_time = output->total_time/output->n_occ;
}
J'utilise une carte Nvidia en tant que périphérique de GPU. Après l'exécution du code du noyau, j'ai obtenu des résultats incorrects. Je ne comprends pas la raison. est-ce qu'il manque quelque chose?
Merci d'avance pour votre aide.
Qu'entendez-vous par "résultats incorrects"? Quelle était l'entrée, quelle est la sortie? –
Travaillez-vous seulement sur une entrée et une sortie? Si oui, quelle est la raison de l'exécuter sur un noyau? Si vous le faites sur plusieurs entrées/sorties, votre code ne devrait-il pas être comme 'output [id] .start_time = input [id] .start_time;' dans votre noyau? – dkg
C'était juste une simple initiation sur l'utilisation de la structure personnalisée dans OpenCL. L'étape suivante consistera à donner un grand vecteur de structure personnalisée à un noyau OpenCL. – semteu