Il codice OpenCl funziona su una macchina ma sto ottenendo CL_INVALID_KERNEL_ARGS su un’altra macchina

Ho avuto il seguente codice, che funziona bene su una macchina, ma quando provo a eseguirlo su un’altra macchina con una migliore scheda grafica sto ricevendo errori:

global[0] = 512; global[1] = 512; local [0] = 16; local [1] = 16; ciErrNum = clEnqueueNDRangeKernel(commandQueue, myKernel, 2, NULL, global, local, 0, NULL, &event); 

Errori:

 Error @ clEnqueueNDRangeKernel: CL_INVALID_KERNEL_ARGS Error @ clWaitForEvents: CL_INVALID_KERNEL_ARGS 

Qualche idea di qual è il problema?

Quanto sono grandi gli oggetti buffer che stai passando? __constant argomenti __constant sono allocati dallo spazio di memoria separato e non dalla memoria globale quindi è probabile che tu abbia esaurito la memoria costante.

La specifica impone che nel profilo completo il dispositivo debba supportare almeno 4 __constant argomenti __constant con 64 kB di dimensioni totali. Nel profilo incorporato è sceso a 1kB.

È ansible interrogare la quantità di memoria costante disponibile controllando CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE utilizzando clGetDeviceInfo . Molto probabilmente i tuoi dispositivi supportano molto più di questo requisito minimo.

Nella maggior parte dei casi dovresti usare il buffer costante se sei in grado, come in generale, di essere molto più veloce della memoria globale.

In futuro dovresti fornire maggiori informazioni sulla tua domanda. Perché se l’errore è CL_INVALID_KERNEL_ARGS è davvero necessario sapere quali sono gli argomenti del tuo kernel.