{ "@context": "https://schema.org", "@type": "Organization", "name": "Brainscape", "url": "https://www.brainscape.com/", "logo": "https://www.brainscape.com/pks/images/cms/public-views/shared/Brainscape-logo-c4e172b280b4616f7fda.svg", "sameAs": [ "https://www.facebook.com/Brainscape", "https://x.com/brainscape", "https://www.linkedin.com/company/brainscape", "https://www.instagram.com/brainscape/", "https://www.tiktok.com/@brainscapeu", "https://www.pinterest.com/brainscape/", "https://www.youtube.com/@BrainscapeNY" ], "contactPoint": { "@type": "ContactPoint", "telephone": "(929) 334-4005", "contactType": "customer service", "availableLanguage": ["English"] }, "founder": { "@type": "Person", "name": "Andrew Cohen" }, "description": "Brainscape’s spaced repetition system is proven to DOUBLE learning results! Find, make, and study flashcards online or in our mobile app. Serious learners only.", "address": { "@type": "PostalAddress", "streetAddress": "159 W 25th St, Ste 517", "addressLocality": "New York", "addressRegion": "NY", "postalCode": "10001", "addressCountry": "USA" } }

Programación CUDA Flashcards

(13 cards)

1
Q

Device

A
  • Coprocesador de la CPU (host)
  • Posee su propia memoria DRAM
  • Ejecuta “muchos” threads en paralelo
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Diferencias entre threads GPU y CPU

A
  • Los threads de GPU son extremadamente livianos (muy poco overhead para crearlos)
  • La GPU necesita 1000s de threads para alcanzar la eficiencia
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Algoritmo básico

A
  1. Instrucciones en el host
  2. Envío de datos de host a device
  3. Se procesa en device
  4. Se recuperan los datos
  5. Continúan instrucciones en el host
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Array de threads y SPMT

A
  • Un kernel es ejecutado por un array de threads todos corriendo el mismo código (SPMT)
  • Cada thread tiene un ID que se puede utilizar para computar direcciones de memoria y tomar decisiones de control
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Bloques de threads

A
  • Permite dividir un array en multiples bloques
  • Threads de un mismo bloque cooperan via shared, operaciones atomic y barrier de sync.
  • Threads de diferentes bloques no pueden cooperar directamente (atomic en global)
  • Los bloques son ejecutados en cualquier orden y en diferentes MPs
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Tipos de funciones

A

__device__: device a device
__global__: host a device
__host__: host a host

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Lanzamiento de kernels

A
  • Para invocar un kernel es necesario determinar “una configuración de ejecución”
  • Las llamadas a kernel son asincrónicas. Es necesario usar sincronizaciones explícitas
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Keywords

A
  • threadIdx
  • blockIdx
  • blockDim
  • gridDim

Todos se eacceden con .x/.y/.z
Generalmente int idX = threadIdx.x + blockDim.x * blockIdx.x

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Algunas funciones

A
  • cudaDeviceSynchronize()
  • _ _syncthreads
  • cudaMalloc(*var, size)
  • cudaFree(*var)
  • cudaMemcpy(*dest, *orig, bytes, tipo)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Acceso Coalesced

A
  • El acceso a memoria global es por segmentos de 128bytes
  • Si no se usan todos los datos del segmento, se desperdicia ancho de banda
  • El acceso no alineado es más costoso que el alineado
  • Cada solicitud de acceso de un warp se parte en varias solicitudes. Si todas las solicitudes acceden al mismo segmento, se hace una sola y se usan todos los datos
  • Si los accesos están distribuidos entre distinto segmentos se realizan multiples solicitudes y hay datos transferidos que no son usados
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Memoria compartida

A
  • Cientos de veces más rápida que la global
  • Hay una en cada MP
  • Alcance a nivel de bloque
  • El uso y contenido se define explícitamente por el programador
  • El puede definir en forma dinámica con extern
  • Se suele utilizar como una especie de caché para reducir los accesos a global mem
  • Permite evitar accesos no coalesced a mem glob (mediante tiling)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Conflicto de bancos

A
  • Memoria compartida se divide en módulos del mismo tamaño llamados bancos
  • Palabras de 32 bits contiguas, están en bancos contiguos
  • Bancos pueden ser accedidos simultáneamente a nivel de warp
  • Lecturas o escrituras en bancos distintos pueden ser atendidas simultáneamente
  • Cada banco puede atender una solicitud por ciclo por warp
  • Si dos solicitudes caen en el mismo banco, se produce un conflicto
  • No hay conflicto si todos los hilos acceden a distintos bancos, o si todos acceden a la misma palabra (broadcast)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Recomendaciones

A
  • Evitar divergencia entre hilos de un warp
  • Número de bloques mayor al número de MPs
  • Número de hilos por bloque múltiplo de 32
How well did you know this?
1
Not at all
2
3
4
5
Perfectly