🎯 실험 목적
- CPU 메모리에서 생성한 데이터를 GPU로 전송하여 연산하는 경우와
- 처음부터 GPU 메모리에 생성하여 연산하는 경우의 성능 차이를 비교
🧪 실험 항목 및 결과 (단위: 초)
0 | NumPy 행렬 생성 (CPU) | 0.198 |
1 | NumPy → CuPy 전송 (H2D) | 0.150 |
2 | CuPy 행렬 곱 (H2D 이후) | 0.090 |
3 | CuPy 직접 생성 (GPU) | 0.046 |
4 | CuPy 행렬 곱 (직접 생성) | 0.028 |
5 | PyTorch CPU 텐서 생성 | 0.126 |
6 | PyTorch → GPU 전송 (H2D) | 0.047 |
7 | Torch GPU 연산 (H2D 이후) | 0.035 |
8 | PyTorch 직접 CUDA 텐서 생성 | 0.012 |
9 | Torch 행렬 곱 (직접 생성) | 0.024 |
🔍 분석 요약
💡 1. 전송 비용은 연산보다 크다
- NumPy나 Torch에서 CPU 메모리에 생성한 후 GPU로 복사할 경우, 복사 자체가 상당한 비용을 유발
- 특히 NumPy → CuPy (H2D)는 연산보다도 느림
💡 2. GPU에서 직접 생성이 훨씬 효율적
- CuPy, PyTorch 모두 GPU에 직접 생성한 경우 메모리 전송 비용이 없으므로 전체 연산 시간이 대폭 단축
💡 3. PyTorch가 가장 효율적
- GPU 텐서 직접 생성 시간: 0.012s (가장 빠름)
- GPU 행렬 곱 수행 시간: 0.024s (성능 최적화 상태)
✅ 결론
GPU 직접 생성 후 연산 | 전송 비용 제거, 속도 최대 |
PyTorch (GPU 생성) | 생성 + 연산 속도 모두 최적 |
NumPy → CuPy 방식 지양 | 전송 비용이 크고 비효율적 |
'dev_AI_framework' 카테고리의 다른 글
딥러닝 모델에서 CUDA 를 활용한 연산을 수행할 때의 메모리 배치 전략, shared Memory vs Global Memory 전략 (0) | 2025.05.23 |
---|---|
GPU 연산 시 메모리 주소 설정을 통한 빠른 접근, 행렬 곱으로의 확장 (0) | 2025.05.23 |
레이어 단위 실행의 수정 및 보완, Graph-level Fusion (0) | 2025.05.21 |
실행 방법 수정 했음, layer 별 cuda 호출 하는 방식으로 구현 (0) | 2025.05.21 |
계산 그래프를 디테일하게 구성 및 저장할 필요가 없어졌네... (0) | 2025.05.20 |