KR20190029124A - 최적 gpu 코딩 방법 - Google Patents
최적 gpu 코딩 방법 Download PDFInfo
- Publication number
- KR20190029124A KR20190029124A KR1020170116279A KR20170116279A KR20190029124A KR 20190029124 A KR20190029124 A KR 20190029124A KR 1020170116279 A KR1020170116279 A KR 1020170116279A KR 20170116279 A KR20170116279 A KR 20170116279A KR 20190029124 A KR20190029124 A KR 20190029124A
- Authority
- KR
- South Korea
- Prior art keywords
- gpu
- cpu
- operations
- data transfer
- data
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Advance Control (AREA)
Abstract
GPU 효율을 극대화한 모든 연산이 GPU에서 처리되는 방법이 개시된다. 대규모 연산에서 GPU를 사용하는 일반적인 방법은 CPU-GPU간의 데이터 전송에 많은 리소스가 소요되어 전체적인 성능 효율이 크게 낮은 반면, CPU-GPU간의 데이터 전송을 최소화하고 모든 연산을 GPU가 담당하며 CPU는 입출력 및 프로그램 제어만 담당하는 방법은 전체적인 성능을 극대화하기에 매우 유리하다.
Description
본 발명은 SPH와 같이 주로 인접한 요소들 간에 연산이 많은 대규모 연산이 요구되는 과학/공학 계산에서 모든 연산을 GPU에서 최적화하여 수행하는 CPU는 제어, 입출력만을 수행하고, GPU만을 연산에 활용하는 최적 GPU 코딩 방법에 관한 것이다.
CPU는 SISD 구조이거나 이를 병렬화한 MIMD의 구조를 가지며, 일부 최신 CPU 프로세서는 성능을 향상하기 위하여 ALU에 vector engine을 적용하였는데 이는 기계적 성능은 높으나 실제 프로그래밍에서는 계산 성능의 효율을 높이기 매우 어렵다. 특히 프로세서 코어가 많아질 경우 성능 효율을 높이기 더욱 어렵다.
GPU는 SIMD 구조인 기존의 vector 프로세서를 유연하게 개선하여 MIMD와 유사하게 운영이 가능하게 한 고효율의 프로세서로 SPMD로 부르기도 한다. CPU보다는 월등히 정교한 프로그래밍이 가능하여 월등히 높은 성능효율을 구현할 수 있다.
일반적으로 대규모 연산이 요구되는 과학/공학 계산에서 GPU의 활용한 연산 방법은 필요에 따라 GPU를 연산가속기로 이용하는 GPU Accelerating Computing 방법이다. GPU Accelerating Computing은 처리량이 많은 일부 연산을 GPU에서 처리하여 CPU-GPU 간의 데이터 전송에 많은 리소스가 소요되어 전체적인 성능 효율이 크게 낮다. 이는 GPU의 사용 효율이 크게 낮을 뿐만 아니라 CPU만을 사용한 연산보다 성능 효율이 더 낮게 나오는 경우가 발생하기도 한다.
본 발명의 목적은 대규모 연산에서 효과적인 GPU 사용을 위해 CPU-GPU 간의 데이터 전송을 최소화하고 성능 효율을 극대화할 수 있도록 모든 연산은 GPU가 담당하고, CPU는 입출력 및 프로그램 제어만 담당하는 최적 GPU 코딩 방법에 관한 것이다.
모든 연산을 GPU가 처리하는 방법에서 CPU는 입출력과 프로그램제어 기능만 담당하고, 모든 연산은 GPU가 담당하도록 프로그램의 구조를 변경하는 단계, CPU-GPU간 혹은 GPU-GPU간의 데이터 전송을 최소화하고 전송 성능을 극대화하도록 변수의 구조를 최적화하는 단계를 포함할 수 있다.
연산되어 나온 결과를 출력하기 위한 CPU-GPU간의 데이터 전송은 GPU의 Page Memory 혹은 Pinned Memory를 사용할 수 있다. Page Memory를 사용한 데이터 전송 속도는 5~6GB/s, Pinned Memory를 사용한 데이터 전송은 12GB/s로 Pinned Memory를 사용하는 코드 구성을 포함한다.
GPU-GPU 간의 데이터 전송은 PCIe 버스를 통하여 각 GPU간에 직접적으로 데이터를 전송하는 P2P Direct Transfer 방법을 포함한다.
데이터 전송을 위한 변수 구조는 여러 개의 단일 혹은 배열 변수를 여러 번 전송하기보다 하나의 배열 변수로 재구성하여 한 번에 많은 용량을 전송하는 것이 더 효율적이다.
모든 연산을 GPU가 담당하는 방법론과 다수의 GPU 간에 직접적으로 데이터를 전송하는 방법론을 사용하여 대규모 연산이 요구되는 과학/공학용 소프트웨어의 성능을 기존에 비해 100배 이상 개선된 성능으로 구현할 수 있다.
도 1은 GPU를 연산 가속기로써만 사용하는 방법론을 나타내는 흐름도이다.
도 2는 모든 연산을 GPU가 담당하고 CPU는 관리적인 역할만 수행하는 방법론을 나타내는 흐름도이다.
도 2는 모든 연산을 GPU가 담당하고 CPU는 관리적인 역할만 수행하는 방법론을 나타내는 흐름도이다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명하며, GPU 사용 함수들은 NVIDIA의 CUDA Library를 참조한다.
도 2를 참조하면, 모든 연산을 GPU에서 담당하기 위하여 먼저 CPU는 CPU-GPU간의 전송을 위한 데이터와 GPU 연산에서만 사용되는 데이터를 구분하여 메모리를 할당한다(초기화). CPU-GPU간의 전송을 위한 데이터의 메모리 할당은 일반적인 malloc이 아닌 cudaHostAlloc으로 할당하여 GPU의 Pinned Memory로 전송이 되도록 한다. GPU 연산에서만 사용되는 데이터의 메모리 할당은 cudaMalloc으로 CPU-GPU 간의 데이터 전송이 없이 GPU 내에서 메모리만 할당한다. CPU-GPU간의 데이터 전송을 위한 함수로는 cudaMemcpyAsync로 일반적인 cudaMemcpy와 달리 GPU의 Pinned Memory로 전송이 가능하다.
데이터 전송과 연산을 위한 변수 구조는 매크로 함수(define)를 사용하여 최소한의 배열 변수로 구성한다. 초기 값이 주어지는 모든 단일변수들은 각 변수의 타입에 따라 매크로 함수를 사용하여 하나의 배열 변수로 묶어줄 수 있다. CPU-GPU간의 데이터 전송을 위한 변수구조로는 한 번에 많은 양의 데이터를 전송하여 전송 성능을 극대화하기 위해 하나의 큰 배열 변수를 생성하고 쉬프트 연산자를 사용하여 배열 변수 내에서 각기 다른 배열 변수들을 매크로 함수를 사용하여 묶어줄 수 있다. 코드 내의 가독성과 수정을 최소화하기 위해 매크로 함수를 사용한다.
Claims (2)
- 대규모 연산이 요구되는 과학/공학 계산에 있어서, 모든 연산은 GPU가 담당하고, CPU는 입출력 및 프로그램 제어 기능만을 담당하는 것을 특징으로 하는 최적 GPU 코팅 방법.
- 제 1항에 있어서,
CPU-GPU 간의 데이터 전송 성능을 극대화하기 위해 매크로 함수를 사용하여 배열 변수를 단일화하는 것을 특징으로 하는 최적 GPU 코딩 방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170116279A KR20190029124A (ko) | 2017-09-12 | 2017-09-12 | 최적 gpu 코딩 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170116279A KR20190029124A (ko) | 2017-09-12 | 2017-09-12 | 최적 gpu 코딩 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20190029124A true KR20190029124A (ko) | 2019-03-20 |
Family
ID=66036315
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170116279A KR20190029124A (ko) | 2017-09-12 | 2017-09-12 | 최적 gpu 코딩 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20190029124A (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022001141A1 (zh) * | 2020-06-29 | 2022-01-06 | 苏州浪潮智能科技有限公司 | 一种gpu通信方法、设备以及介质 |
-
2017
- 2017-09-12 KR KR1020170116279A patent/KR20190029124A/ko not_active Application Discontinuation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022001141A1 (zh) * | 2020-06-29 | 2022-01-06 | 苏州浪潮智能科技有限公司 | 一种gpu通信方法、设备以及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Park et al. | Scale-out acceleration for machine learning | |
CN104536937B (zh) | 基于cpu‑gpu异构集群的大数据一体机实现方法 | |
CN105487838A (zh) | 一种动态可重构处理器的任务级并行调度方法与系统 | |
Bosilca et al. | Performance portability of a GPU enabled factorization with the DAGuE framework | |
CN112446471B (zh) | 基于异构众核处理器的卷积加速方法 | |
CN114201287B (zh) | 一种基于cpu+gpu异构平台协同处理数据的方法 | |
Behrens et al. | Efficient SIMD Vectorization for Hashing in OpenCL. | |
Gwennap | Groq rocks neural networks | |
Sunitha et al. | Performance improvement of CUDA applications by reducing CPU-GPU data transfer overhead | |
Maroosi et al. | Parallel and distributed computing models on a graphics processing unit to accelerate simulation of membrane systems | |
Chitty | Faster GPU-based genetic programming using a two-dimensional stack | |
Vasiljevic et al. | Compute substrate for software 2.0 | |
Cardellini et al. | Heterogeneous sparse matrix computations on hybrid GPU/CPU platforms | |
US10255070B2 (en) | ISA extensions for synchronous coalesced accesses | |
KR20190029124A (ko) | 최적 gpu 코딩 방법 | |
CN105446733A (zh) | 分离核 | |
CN110704193B (zh) | 一种适合向量处理的多核软件架构的实现方法及装置 | |
Lin et al. | swFLOW: A dataflow deep learning framework on sunway taihulight supercomputer | |
Charlton et al. | Two-dimensional batch linear programming on the GPU | |
de Dinechin et al. | Deep learning inference on the mppa3 manycore processor | |
CN103995725A (zh) | 在cpu上执行像素着色器的程序转换方法及装置 | |
Rajeswar et al. | Scaling up the training of deep CNNs for human action recognition | |
US7472392B2 (en) | Method for load balancing an n-dimensional array of parallel processing elements | |
Yamazaki et al. | Tridiagonalization of a symmetric dense matrix on a GPU cluster | |
TWI845081B (zh) | 圖形處理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |