Skip to content

Latest commit

 

History

History
84 lines (74 loc) · 5.23 KB

README.md

File metadata and controls

84 lines (74 loc) · 5.23 KB

Vector Add

Build

make
nvcc -o vector_add  main.cu

Run

./vector_add

Vector length: 50000
Copy: host to device
CUDA kernel: 196 blocks x 256 threads
Copy: device to host
Result verification: OK
Program completed successfully.

Figure


               CPU (Host)
─────────────────────────────────────────────────────
 1. Allocate Memory (Host)
 ┌─────────────────────────────────────────────────┐
 │ h_a[LENGTH]                                     │
 │ h_b[LENGTH]                                     │
 │ h_c[LENGTH]                                     │
 └─────────────────────────────────────────────────┘
          ↓
 2. Allocate Memory (Device)
 ┌─────────────────────────────────────────────────┐
 │ d_a[LENGTH] (on GPU)                            │
 │ d_b[LENGTH] (on GPU)                            │
 │ d_c[LENGTH] (on GPU)                            │
 └─────────────────────────────────────────────────┘
          ↓
 3. Copy Data (Host → Device)
 ┌─────────────────────────────────────────────────┐
 │ memcpy(h_a → d_a)                               │
 │ memcpy(h_b → d_b)                               │
 └─────────────────────────────────────────────────┘
          ↓
 4. Kernel Launch
 ┌────────────────────────────────────────────────────────────────────┐
 │ CUDA Grid Configuration                                            │
 │ ┌──────────────────┬──────────────────┬──────────────────┬───┐     │
 │ │ Block 0          │ Block 1          │ Block 2          │...│     │
 │ │ ┌───┬───┬───┬─   │ ┌───┬───┬───┬─   │ ┌───┬───┬───┬─   │   │     │
 │ │ │ T │ T │ T │    │ │ T │ T │ T │    │ │ T │ T │ T │    │   │     │
 │ │ │ h │ h │ h │    │ │ h │ h │ h │    │ │ h │ h │ h │    │   │     │
 │ │ │ r │ r │ r │    │ │ r │ r │ r │    │ │ r │ r │ r │    │   │     │
 │ │ │ e │ e │ e │    │ │ e │ e │ e │    │ │ e │ e │ e │    │   │     │
 │ │ │ a │ a │ a │    │ │ a │ a │ a │    │ │ a │ a │ a │    │   │     │
 │ │ │ d │ d │ d │    │ │ d │ d │ d │    │ │ d │ d │ d │    │   │     │
 │ │ └───┴───┴───┴─   │ └───┴───┴───┴─   │ └───┴───┴───┴─   │   │     │
 │ └──────────────────┴──────────────────┴──────────────────┴───┘     │
 │ Each thread computes: c[i] = a[i] + b[i]                           │
 └────────────────────────────────────────────────────────────────────┘
          ↓
 5. Copy Data (Device → Host)
 ┌─────────────────────────────────────────────────┐
 │ memcpy(d_c → h_c)                               │
 └─────────────────────────────────────────────────┘
          ↓
 6. Result Verification
 ┌─────────────────────────────────────────────────┐
 │ Check if h_c[i] == h_a[i] + h_b[i]              │
 └─────────────────────────────────────────────────┘
          ↓
 7. Free Memory
 ┌─────────────────────────────────────────────────┐
 │ Free d_a, d_b, d_c on GPU                       │
 │ Free h_a, h_b, h_c on CPU                       │
 └─────────────────────────────────────────────────┘