1. 서 론
2. 모형 이론 및 GPU 가속기법 개발
2.1 모형 이론
2.2 GPU 가속기법 개발
3. 대상 지역 및 적용자료
3.1 연구 대상 지역 및 지형자료
3.2 수문자료
4. 적용 및 평가
4.1 모형 보정
4.2 모의결과
4.3 실행시간 평가
5. 결 론
1. 서 론
지표면 흐름해석에서 2차원 모형은 주로 비교적 평평한 지형에서의 흐름해석이나 예상되는 침수범위를 계산하기 위해서 이용되고 있다. 특히 강우 발생 시 유역내 임의 지역에서 어느 정도의 침수위험이 있을지를 판단하기 위해서는 홍수를 모의할 하천 구간을 특정할 수 없으며, 유역내에서 발생하는 강우를 생성항으로 적용하여 유역 전체를 대상으로 홍수를 모의해야 한다.
지표면의 흐름은 지형의 기복에 지배적인 영향을 받는다. 그러므로 상세한 지표면 홍수모의를 위해서는 도로, 제방 등과 같이 물의 흐름에 직접적인 영향을 미치는 지형의 기복을 잘 반영할 수 있도록 도메인을 구축해야 하며, 넓은 지역에 대해 공간적으로 더 상세한 도메인을 구축한다는 것은 모의대상 제어체적의 개수가 많아진다는 것을 의미한다. 물리적인 방정식을 이용하는 홍수모의에서 제어체적의 개수가 증가하는 것은 홍수모의 실행시간을 크게 증가시키는 원인이 되며, 이를 해결하기 위해 모형의 실행시간 단축이 중요한 문제로 다루어진다(Echeverribar et al., 2020).
모형의 실행시간을 단축하기 위해서는 일반적으로 병렬계산이 적용된다. 홍수해석 모형의 전체 과정은 우선 순차계산을 기반으로 작성될 수 있으며, 이 중 제어체적 간에 상호 독립적인 계산이 가능한 부분에 대해서는 병렬로 계산함으로써 모형의 전체 실행시간을 단축시킬 수 있다. 그러므로 병렬계산이 적용된 모형의 실행 과정은 순차계산과 병렬계산의 조합에 의해서 구성된다. 병렬계산은 다수의 계산처리 코어를 탑재한 하나의 장비 혹은 여러 개의 분산된 장비에 작업을 분산시킴으로써 구현될 수 있다(Chung et al., 2010; Kim et al., 2014). 사용되는 전체 코어의 수는 병렬계산의 효율에 영향을 미치며, 일반적으로 제어체적과 같은 계산 대상의 개수가 많아질수록 더 많은 코어가 필요하다.
병렬계산은 사용되는 계산 프로세서에 따라서 크게 CPU를 이용한 병렬계산과 GPU를 이용한 병렬계산으로 구분할 수 있다(Echeverribar et al., 2020). CPU를 이용한 병렬계산은 CPU 집적도의 한계로 인해서 하나의 CPU에 담을 수 있는 코어의 개수가 제한적이다(Kim et al., 2014, 2019; Echeverribar et al., 2020). 이에 따라 제어체적의 개수가 많아질수록 하나의 장비에서는 병렬계산의 효과를 충분히 기대하기 어렵게 되며, 이를 극복하기 위해서는 다수의 분산된 장비를 이용해야 한다(Kim et al., 2014). GPU는 CPU에 비해서 다수의 코어를 포함하고 있으며, 대용량의 병렬계산에서 CPU에 비해 더 높은 성능을 나타낼 수 있다(Kalyanapu et al., 2011; Park, 2014; Kim et al., 2019).
수많은 코어를 포함하고 있는 GPU의 장점을 이용한 병렬계산은 기존의 연구를 통하여 운동파 방정식(Kim et al., 2019), 확산파 방정식(Kim, 2019; Park et al., 2019), 동역학파 방정식(Hong et al., 2012; Liang et al., 2016; Liu et al., 2018; Aureli et al., 2020) 등 다양한 지배방정식에 적용된바 있고, CPU에 비해서 빠른 실행시간을 나타냄으로써 그 효과가 입증되고 있다. 이러한 연구에서는 주로 GPU 가속기법의 효과를 CPU를 이용한 순차계산의 실행시간과 비교 평가함으로써, 동일한 구조와 프로세스를 가지는 모형에서 CPU를 이용한 병렬계산과는 비교평가가 부족한 실정이다. 또한 기존 연구에서 GPU 가속기법은 시간차분 방법에 있어서는 음해법보다는 주로 양해법에 적용되었다. 양해법에서는 안정적인 흐름계산을 위해서 주로 계산 시간 간격을 짧게 부여하며, 이는 흐름계산에서 실행시간이 길어지는 원인 중 하나이다. 음해법에서는 계산 시간 간격은 양해법에 비해서 크게 부여할 수 있으나, 계산 값의 수렴을 위해서 반복계산을 수행하며 이는 역시 흐름계산에서 실행시간이 길어지는 원인으로 작용한다.
본 연구에서는 동역학파 방정식에서 이송가속도 항을 제외한 지배방정식을 음해적으로 해석하고 있는 Grid based 2-Dimensional land surface flood model (G2D; Choi et al., 2019) 모형에서 GPU 가속기법을 개발하였으며, 이를 광역 고해상도 홍수모의에 적용하였다. 이를 통해서 본 연구의 목적은 (1) 2차원 침수모의 모형에서 GPU 가속기법의 프로세스를 제시하고, (2) 음해법을 적용하는 하나의 모형에서 CPU를 이용한 순차계산, CPU를 이용한 병렬계산, GPU 가속기법의 3가지 방법의 효과를 비교 평가하고자 한다.
2. 모형 이론 및 GPU 가속기법 개발
2.1 모형 이론
G2D 모형은 광역 지표면에서의 흐름현상을 주요 모의 대상으로 한다. 토양으로의 침투와 증발산, 차단 등과 같은 지표면에서의 손실은 모의하지 않으며, 강우자료를 적용할 경우에는 강우의 초기손실을 고려할 수 있다. 지배방정식은 확산파 방정식에서 국지가속도항을 추가로 포함하는 확산파(+) 방정식(혹은 동역학파(-) 방정식)을 이용하며, Eqs. (1)~(5)와 같다(Choi et al., 2019).
여기서, 와 는 각각 와 방향의 단위 폭 당 유량, 는 시간, 는 생성 항, 는 중력가속도, 는 수심, 와 는 각각 와 방향의 지면경사, 와 는 각각 와 방향의 마찰경사, 는 방향 유속, 는 방향 유속, 은 조도계수를 나타낸다.
G2D 모형은 정형 사각형 격자를 이용해서 계산의 공간적 최소 단위인 제어체적을 구성하며, DEM (Digital Elevation Model)을 이용하여 도메인을 구축한다. 시간차분은 음해법을 적용하며, 수치해 계산을 위한 시간 간격()은 Courant-Friedrich-Lewy (CFL) 조건(Courant et al., 1956; Scott and Brett, 2002)을 이용하여 모형 내부에서 자동으로 계산된다(Eq. (6)).
여기서, 는 제어체적의 방향 길이(), 는 전체 제어체적에서의 최대 유속을 나타낸다.
G2D 모형의 입력자료는 도메인을 구성하는 DEM 파일과 토지피복도를 ASCII 래스터 파일로 사용하고, 특정 셀에 부여되는 유량, 수위, 수심 등의 경계조건은 텍스트로 작성된 시계열 자료를 사용한다. 강우자료는 도메인 전체에서 격자별로 분포된 강우인 ASCII 래스터 파일 혹은 전체 도메인의 평균 강우량을 시계열 자료로 사용할 수 있다. 모의결과는 도메인 전체 격자에서의 수심, 수위 등을 ASCII 래스터 파일로 출력하며, 특정 격자에서의 계산결과를 텍스트 파일로 출력할 수도 있다. G2D 모형의 구조, 이론적 배경, 입출력 자료 등의 상세사항은 매뉴얼(Choi and Kim, 2022)을 참고할 수 있다.
2.2 GPU 가속기법 개발
넓은 지역에서의 침수모의는 공간적 해상도가 높아질수록 제어체적의 개수가 많아지고, 계산 시간이 많이 소요되어 신속한 모의결과의 산출이 어렵게 된다. 기존의 G2D 모형은 OpenMP를 이용해서 CPU 기반의 병렬계산이 가능하나, 본 연구에서는 광역 고해상도 침수모의에서 더 빠른 실행시간을 확보하기 위해 GPU 가속기법을 개발하였다. G2D 모형의 소스코드는 C/C++로 작성되어 있다. 그러므로 본 연구에서는 NVIDIA의 그래픽 카드를 수치계산에 이용하기 위해 CUDA C를 이용하였다.
기존의 OpenMP를 이용한 CPU 병렬계산과 CUDA를 이용한 GPU 병렬계산을 선택적으로 적용할 수 있도록 모형을 구성하였으며, 흐름계산 모듈의 구조는 Fig. 1과 같다. CPU에서만 사용되는 함수(Host function)와 GPU에서만 사용되는 함수(Global function)를 작성하고, 함수의 기능적 중복을 최소화하기 위해서 CPU와 GPU 모두에서 사용되는 함수는 ‘Host and device function’으로 구분하여 작성하였다.
GPU를 이용한 흐름계산 모듈의 구조 및 모의 진행 과정은 Fig. 2와 같다. Fig. 2에서 ‘Device’는 그래픽 카드를 의미하고, ‘Host’는 데스크탑 PC와 같이 그래픽 카드가 장착되어 있는 장비를 의미한다. ‘Time Loop’는 모의 기간 동안에 0에서부터 시작하여 만큼씩 시간 전진하는 과정을 나타낸 것이다. GPU를 이용한 흐름계산 모듈에서는 우선 GPU에서 사용될 변수의 메모리를 Device에 할당하고(cudaMalloc( )), Host 메모리에서 저장되어 있던 흐름계산에 사용되는 모든 변수의 값들을 Device로 복사한다(cudaMemcpy( ))(ⓐ). 다음은 Device에서 흐름계산 초기상태에 맞게 각 변수를 설정한 후, 모든 CUDA core의 계산이 완료 될 때까지 기다린다(cudaDeviceSynchronize( )). 흐름계산은 동일 시간에서 임의 제어체적의 계산결과가 다른 제어체적의 계산에 영향을 미치고, 현재 시간의 계산결과가 다음 시간의 계산에 영향을 미치기 때문에 상호 독립적인 계산과정이 끝나는 부분에서는 모든 제어체적의 계산이 완료되게 해야 한다. 이 과정은 GPU를 이용한 병렬 계산에서 순차적 계산의 특성을 부여하게 됨으로써 전체 계산에 필요한 시간이 늘어나는 문제가 있으나, 흐름모의와 같이 상호 독립적이지 않는 계산이 포함되어 있을 경우에는 반드시 거쳐야하며, 양해적 기법과 음해적 기법에 상관없이 모두 필요한 과정이다.
시간 전진 루프에서는 먼저 Host에서 현재의 시간에 해당하는 경계조건과 생성항 데이터를 추출하여 Device로 복사한다(cudaMemcpy( )). Device에서는 복사된 흐름변수를 이용하여 Device 메모리에 있는 모든 변수를 업데이트 한 후 cudaDeviceSynchronize( )를 호출한다. Device에서는 모형의 지배방정식을 이용하여 모든 제어체적에서 흐름을 계산한 후 다시 cudaDeviceSynchronize( )를 호출한다. 각 제어체적에서 계산된 값들에서 수심, 유속 등의 최댓값과 최솟값을 추출하며, 이때는 GPU에서의 reduction 과정을 통해서 연산 속도를 향상시킨다. 현재 시간에서의 계산이 완료되면, 모의결과를 출력할 경우에는 모든 제어체적에서 계산된 흐름 값을 Device에서 Host 메모리로 복사한다(cudaMemcpy( ))(ⓑ). 모의결과를 출력하지 않을 경우에는 다음 계산에서의 시간 간격()을 설정하기 위해서 관련된 변수를 Device에서 Host 메모리로 복사한다(cudaMemcpy( )). GPU를 이용한 계산에서 비교적 많은 시간이 소요되는 Device와 Host 간의 대용량 메모리 복사는 Fig. 2에서 시간 전진 루프 밖에 위치한 ⓐ와 루프 안에 포함된 ⓑ 단계에서 이루어진다.
3. 대상 지역 및 적용자료
3.1 연구 대상 지역 및 지형자료
본 연구에서 개발된 GPU 가속기법의 적용성을 평가하기 위해서 진주시를 대상으로 흐름모의를 수행하였다(Fig. 3). 대상 지역의 상류부는 남강댐 본류 수문인 일류문과 남강댐의 지류인 영천강에 있는 진주시(옥산교) 수위관측소를 경계로 하였다. 하류부는 남강댐 본류에 있는 진주시(월강교) 하류 약 18.6 km 지점을 경계로 하여 이 구간으로 유입되는 유역 전체를 모의하였으며, 전체 면적은 약 509 km2 이다. 침수모의시 남강댐(일류문)과 진주시(옥산교)에서는 관측 유량을 상류단 경계조건으로 적용하였으며, 진주시(덕오리)와 진주시(월강교)에서 모의된 수위자료를 계측된 수위자료와 비교하여 모의결과를 검토하였다.
도메인 구축을 위해서 국토지리정보원에서 제공하는 10 m × 10 m 공간해상도의 DEM을 이용하였고, 위성영상 및 수치지도 하천망과 비교하여 DEM의 지형기복을 수정하였다. G2D 모형 구축에 적용된 공간해상도는 DEM의 해상도와 같은 10 m × 10 m으로 하였으며, 모의 영역 바깥쪽에 있는 NULL 격자를 제외한 계산 대상 격자는 총 5,090,611개 이다. 격자별 조도계수 설정을 위해서 환경부의 대분류 토지피복도를 이용하였으며, 10 m × 10 m 공간해상도를 가지도록 resampling 하여 적용하였다.
3.2 수문자료
본 연구에서는 2019년 태풍 미탁에 의해서 발생한 10월 2일 00시~10월 6일 00시의 홍수사상을 대상으로 흐름해석을 수행하였다. 이를 위해서 상류단 경계조건인 남강댐(일류문)의 방류량과 진주시(옥산교)의 계측 유량자료를 구축하였다. 또한 해당 기간에서의 강우자료는 환경부의 강우레이더 자료를 이용하여 구축하였다. 원시 강우레이더 자료는 전국 범위에서 250 m × 250 m 공간해상도로 제공되므로, 이를 모형 도메인 영역에 맞게 클리핑하고, 10 m × 10 m 해상도를 가지도록 resampling하여 적용하였다. Fig. 4는 본 연구에서 적용한 상류단 경계조건과 유역 평균강우량 그래프를 나타낸 것이다. 이때 모든 자료의 시간 간격은 10분이며, 유역 평균강우량은 도메인 영역에 포함된 모든 셀의 강우량의 평균값을 시계열로 나타낸 것이다.
4. 적용 및 평가
4.1 모형 보정
진주시에 대해서 구축된 DEM과 토지피복도를 적용하고, 모의 기간에 해당하는 상류단 경계조건과 강우를 적용하여 흐름모의를 수행하였다. 모형의 하류단은 자유수면 유출 조건을 적용하였다. 모형의 보정은 시행착오법으로 수행되었다. 주요 보정대상 매개변수는 토지피복도의 지표면 조도계수, 도메인 외부로 유출되는 셀에서의 지면경사(DomainOutBedSlope)이며, 이를 제외한 모든 매개변수는 모형에서 제시하고 있는 기본 값을 적용하였다(Choi and Kim, 2022). 또한 모의결과에 따라서 DEM을 추가로 수정하였다. 보정결과 토지피복 특성별 조도계수는 시가화/건조지역에서 0.015, 농업지역은 0.04, 산림지역은 0.11, 초지는 0.15, 습지, 0.07, 나지는 0.02, 수역은 0.032이며, DomainOutBedSlope는 0.00001을 적용하였다.
4.2 모의결과
진주시에 대한 모의결과에서 진주시(덕오리) 지점과 진주시(월강교) 지점의 수위를 계측된 수위와 비교하면 Fig. 5 및 Table 1과 같다. Fig. 5에서 계산된 수위는 계측된 수위의 상승과 하강을 잘 모의할 수 있는 것으로 나타났다. Table 1에서 Nash–Sutcliffe efficiency 계수(NSE), 상관계수(CC), 정규평균제곱근오차(n RMSE)는 Eqs. (7)~(9)를 이용하여 계산하였다.
Table 1.
Simulation results for water level
| Water level station | NSE | CC | nRMSE |
| Jinju-si (Deoko-ri) | 0.99 | 1.00 | 0.04 |
| Jinju-si (Woelgang-gyo) | 0.99 | 1.00 | 0.03 |
여기서, N은 전체 자료의 수, 는 계측된 값, 는 계산 값, 는 계측된 값의 평균, 는 계산 값의 평균, 는 계측된 값의 표준편차, 는 계산 값의 표준편차, 와 는 계측된 값의 최댓값과 최솟값을 각각 나타낸다. Table 1에서 계산된 수위를 계측된 수위와 비교했을 때 두 수위관측소 지점 모두에서 NSE 0.99, CC 1.00, nRMSE 0.04 이하를 나타내어 계측된 수위가 적절히 재현 된 것으로 나타났다.
4.3 실행시간 평가
본 연구에서는 진주시 지역에 대해서 유효 제어체적 5,090,611개로 구축된 모형의 모의결과를 모의기간 30분마다 출력하는 조건으로 실행시간을 비교 평가하였다. 전체 모의기간은 10월 2일 00시~10월 6일 00시의 96시간 동안이며, 비교 대상은 CPU를 이용한 순차계산에 소요된 실행시간과 OpenMP를 이용한 CPU 병렬계산 및 GPU 가속기법을 적용했을 경우의 실행시간이다. 흐름계산 실행시간과 적용된 장비의 사양을 나타내면 Table 2와 같다. CPU를 이용한 병렬계산과 GPU에서의 Speed up는 각각의 실행시간을 분모로 하고, CPU 순차계산의 실행시간을 분자로 하여 계산된 비율로서, 모의시간 0에서 각 모의기간까지의 누적 실행시간을 이용하여 계산된 것이다. CPU 병렬계산은 순차계산에 비하여 7.10~10.81 배의 빠른 실행시간을 보였으며, GPU 가속기법은 36.57~83.85 배의 빠른 실행시간을 나타내었다. 홍수모의가 종료된 96시간을 기준으로 했을 때 CPU 병렬계산과 GPU 가속기법은 순차계산에 비하여 각각 10.62 배와 64.21 배 빠르게 계산되었다.
Fig. 6은 모의기간 30분마다 사용된 실행시간과 이를 이용하여 계산된 Speed up을 그래프로 표시하고, 강우 및 진주시(월강교)에서의 모의된 수위와 비교한 것이다. G2D 모형에서는 수심이 있는 제어체적과 그 인근의 제어체적(유효 셀)에 대해서만 흐름을 계산한다. 그러므로 강우를 적용할 경우에는 하천내에서의 흐름만 모의하는 경우에 비해서 계산량이 많아지며, 강우가 종료된 후에는 유효 셀의 개수가 점차적으로 줄어들고, 그에 따라 계산량도 줄어들게 된다. 또한 홍수시 하천 수심이 깊고 유속이 빨라지게 되면, G2D 모형에서는 계산시간 간격(dt)이 작아지고, 이에 따라 계산량이 많아지게 된다. Fig. 6(a)에서 강우가 있고 하천 수위가 상대적으로 높은 기간에서는 유효 셀 개수가 많고, 계산시간 간격이 작게 설정됨으로 인해서 흐름 계산에 많은 시간이 사용되었으며, Fig. 6(b)에서는 이 기간 동안에 GPU에 의한 계산 효율이 더 좋아지는 것으로 나타났다.
Table 2.
Cumulative simulation run time and speed up during 96 hours
5. 결 론
본 연구에서는 정형 사각형 격자를 제어체적으로 사용하는 광역 지표면 2차원 침수해석 모형인 G2D에서 GPU 가속기법을 개발하고 실행시간을 평가하였다. 본 연구의 결론을 정리하면 다음과 같다.
1) 본 연구에서는 2차원 침수모의에서 GPU 가속기법의 구현을 위한 모듈의 구조와 프로세스를 제시하였다. 흐름계산에서는 제어체적의 간의 계산 결과가 서로 영향을 미치고, 시간 전진에 의한 계산 결과도 서로 의존되어 있기 때문에 상호 독립적인 계산과정이 끝나는 부분에서 모든 제어체적의 계산이 완료되게 하는 절차(cudaDeviceSynchronize( ))가 중요하다. 또한 GPU 가속기법의 효과를 높이기 위해서는 cudaDeviceSynchronize( )의 호출과 Host와 Device간의 대용량 메모리 복사를 최소화 할 수 있도록 개발되어야 한다.
2) 음해적 기법을 이용하고 있는 2차원 침수모의에서 GPU 가속기법의 실행시간을 평가하였다. 음해법에서는 해의 수렴을 위한 반복계산으로 인해서 실행시간이 길어질 수 있다. 그러나 반복계산은 GPU 내부에서 독립적으로 수행되는 과정이기 때문에 GPU를 이용한 계산에서 시간이 많이 소요되는 cudaDeviceSynchronize( )의 호출이나 대용량의 메모리 복사 없이 수행 가능하였으며, 음해법에서도 충분한 실행시간 단축 효과를 얻을 수 있었다.
3) 동일한 구조와 프로세스를 가지는 2차원 침수모의 모형에서 CPU를 이용한 순차계산, CPU를 이용한 병렬계산, GPU 가속기법의 실행시간을 비교 평가하였다. 본 연구에서 사용한 장비에서는 CPU를 이용한 병렬계산이 순차계산에 비하여 7.10~10.81 배 빠른 실행시간을 보였다. GPU 가속기법을 적용하였을 경우에는 순차계산에 비하여 36.57~83.85 배 빠른 실행시간을 나타내었다. 그러므로 동일한 침수모의 모형에서도 GPU 가속기법의 도입만으로도 CPU를 이용한 병렬계산에 비해서 더 빠른 침수모의가 가능한 것으로 나타났으며, 계산량이 많을수록 GPU 가속기법의 효과는 크게 나타났다.
4) 본 연구에서 제시된 각 경우에서의 실행시간은 사용되는 장비, 모의 도메인, 수리 및 수문학적 조건에 의해서 달라질 수 있다. 특히 사용되는 CPU와 GPU의 사양에 따라서 Speed up 값 또한 달라 질 수 있음을 주지해야 한다.








