¿Cuándo usar los tipos de datos escalares de la API OpenCL?

He tenido problemas para entender cuándo usar los tipos de datos de la API OpenCL como cl_float, cl_uchar, etc., que se pueden encontrar aquí:

http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/scalarDataTypes.html

Los ejemplos que he visto que implican copiar un búfer al dispositivo se ven así:

float data[DATA_SIZE];              // original data set given to device

//Create the input and output arrays in device memory for our calculation
input = clCreateBuffer(context,  CL_MEM_READ_ONLY,  sizeof(float) * count, NULL,

// Write our data set into the input array in device memory
err = clEnqueueWriteBuffer(commands, input, CL_TRUE, 0, sizeof(float) * count, data, 0, NULL, NULL);
if (err != CL_SUCCESS)
{
    printf("Error: Failed to write to source array!\n");
    exit(1);
}

Este código fue tomado directamente de una muestra de código de Apple disponible aquí:https://developer.apple.com/library/mac/samplecode/OpenCL_Hello_World_Example/Listings/ReadMe_txt.html

Notará en el código anterior que se copia una matriz de flotadores en el dispositivo. ¿Por qué esto no necesita ser una matriz de cl_floats? La memoria se copia directamente, ¿verdad? ¿Qué sucede si su flotante de host y la flotante del dispositivo no son del mismo tamaño?

¿Podría explicar por qué no es necesario usar cl_float? Si no es necesario en este caso, entonces cuandodebería se utilizarán los tipos opencl?

Respuestas a la pregunta(1)

Su respuesta a la pregunta