2012-09-08 11 views
5

Estoy un poco confundido sobre cómo funciona CUDA, ¿los subprocesos ejecutan cada uno la misma instrucción (SIMT) pero usando datos únicos accedidos con diferentes índices? ¿O se considera "datos diferentes" (por lo que también es SIMD)?CUDA hilos, SMX, SP y bloques, ¿cómo funcionan?

¿El SMX es todo el chip GPU? Un SMX debe consistir en varios SP cada uno ejecutando un hilo a la vez, ¿es un bloque de hilos asignados a un solo SP?

estoy un poco confundido ahora

Respuesta

12

Un lanzamiento rejilla es 1-3 lanzamiento dimensiones del hilo se bloquea. Un bloque de hilos es un grupo de hilos de 1-3 dimensiones. El distribuidor de trabajo CUDA distribuye bloques de hilos a unidades SMX. Un dispositivo de gama baja puede tener 1 unidad SMX. Un dispositivo de gama alta puede tener> 10 unidades SMX.

La unidad SMX rompe bloques de hilos en grupos de 32 hilos llamados warps. La unidad SMX puede tener como máximo 64 warps o 16 bloques asignados a la vez. Debido a limitaciones de recursos (bloques, urdimbres, registros por hilo, memoria compartida por bloque o barreras), el número puede ser menor.

Cada unidad SMX tiene 4 planificadores warp cada uno responsable de un subconjunto de warps. En cada ciclo, el programador de warp seleccionará un warp elegible y emitirá instrucciones 1 o 2. Para una emisión dual, las dos instrucciones deben ser independientes y deben usarse diferentes unidades de ejecución. Por ejemplo, una instrucción puede enviarse a una unidad de punto flotante y la segunda a la unidad de almacenamiento de carga.

Además de la emisión dual, un planificador de warp puede emitir instrucciones independientes de ida y vuelta a una urdimbre. Cuando se detecta una dependencia, o la unidad de ejecución de la siguiente instrucción está ocupada, o la urdimbre no tiene una instrucción (espera de recuperación), entonces el planificador de distorsión elegirá una distorsión diferente si es elegible.

Cada subproceso tiene su propio conjunto de registros de propósito general, códigos de condición, códigos de predicados y memoria local. Cada hilo es un miembro de un bloque de hilos. Todos los hilos pueden acceder a los recursos del bloque de hilos que incluyen memoria compartida y barreras. Todos los hilos en un lanzamiento de cuadrícula pueden acceder a los recursos de la cuadrícula que incluyen memoria constante, enlaces de textura y enlaces de superficie. Todos los hilos pueden acceder a la memoria global.

+0

Excelente resumen. Entonces, ¿las barreras son un recurso limitado? ¿Porqué es eso? –

+0

La instrucción de barras PTX admite 16 barreras por bloque de hilos (CTA). Para ser eficientes, estos son recursos de hardware limitados. La mayoría de los programas de cómputo usan 1 barrera (__syncthreads()). La ventaja de admitir 16 para MAX_BLOCKS_PER_SM es extremadamente pequeña y no es probable que suceda con CUDA C/C++. –