Cada dispositivo GPU (AMD, NVidea o cualquier otro) se divide en varias Unidades de cálculo (MultiProcessors), cada una de las cuales tiene un número fijo de núcleos (VertexShaders/StreamProcessors). Entonces, uno tiene (Compute Units) x (VertexShaders/compute unit)
procesadores simultáneos para calcular, pero solo hay una pequeña cantidad fija de memoria __local
(generalmente 16KB o 32KB) disponible por MultiProcessor. Por lo tanto, importa el número exacto de estos multiprocesadores.Tamaño de memoria local OpenCL y número de unidades de cálculo
Ahora mis preguntas:
- (a) ¿Cómo puedo saber el número de multiprocesadores en un dispositivo? ¿Es esto lo mismo que
CL_DEVICE_MAX_COMPUTE_UNITS
? ¿Puedo deducirlo de hojas de especificaciones como http://en.wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units? - (b) ¿Cómo puedo saber la cantidad de memoria
__local
por MP que hay disponible en una GPU antes de comprarla? Por supuesto, puedo solicitarCL_DEVICE_LOCAL_MEM_SIZE
en una computadora que lo ejecute, pero no veo cómo puedo deducirlo ni siquiera de una hoja de especificaciones detalladas como, por ejemplo, http://www.amd.com/us/products/desktop/graphics/7000/7970/Pages/radeon-7970.aspx#3. - (c) ¿Cuál es la tarjeta con actualmente la mayor
CL_DEVICE_LOCAL_MEM_SIZE
? El precio realmente no importa, pero 64KB (o más) daría un beneficio claro para la aplicación que estoy escribiendo, ya que mi algoritmo es completamente paralelizable, pero también requiere mucha memoria con un patrón de acceso aleatorio dentro de cada MP (iterando sobre los bordes de gráficos).
Intente ejecutar la consulta del dispositivo en las muestras proporcionadas por AMD/NVIDIA en el SDK. Si desea conocer las consultas de dispositivos específicos del dispositivo, hay muchos que lo han puesto en línea. – nouveau