DOI QR코드

DOI QR Code

An Efficient Graph Algorithm Processing Scheme using GPUs with Limited Memory

제한된 메모리를 가진 GPU를 이용한 효율적인 그래프 알고리즘 처리 기법

  • 송상호 (충북대학교 정보통신공학부) ;
  • 이현병 (충북대학교 정보통신공학부) ;
  • 최도진 (창원대학교 컴퓨터공학과) ;
  • 임종태 (충북대학교 정보통신공학부) ;
  • 복경수 (원광대학교 SW 융합학과) ;
  • 유재수 (충북대학교 정보통신공학부)
  • Received : 2022.06.03
  • Accepted : 2022.07.26
  • Published : 2022.08.28

Abstract

Recently, research on processing a large-capacity graph using GPUs has been conducting. In order to process a large-capacity graph in a GPU with limited memory, the graph must be divided into subgraphs and then processed by scheduling subgraphs. In this paper, we propose an efficient graph algorithm processing scheme in GPU environments with limited memory and performance evaluation. The proposed scheme consists of a graph differential subgraph scheduling method and a graph segmentation method. The bulk graph segmentation method determines how a large-capacity graph can be segmented into subgraphs so that it can be processed efficiently by the GPU. The differential subgraph scheduling method schedule subgraphs processed by GPUs to reduce redundant transmission of the repeatedly used data between HOST-GPUs. It shows the superiority of the proposed scheme by performing various performance evaluations.

최근 대용량 그래프의 반복 처리를 위하여 GPU를 이용하는 연구가 진행되고 있다. 메모리가 제한된 GPU를 이용하여 대용량 그래프를 처리하기 위해서는 그래프를 서브 그래프로 분할한 후 서브 그래프들을 스케줄링해서 처리해야 한다. 그러나 활성 정점에 따라 서브 그래프가 처리되기 때문에 그래프 처리 과정 속에서 불필요한 데이터 전송이 반복된다. 본 논문에서는 메모리가 제한된 GPU 환경에서 효율적인 그래프 알고리즘 처리 기법을 제안하고 성능 평가를 수행한다. 제안하는 기법은 그래프 차등 서브 그래프 스케줄링 방법과 그래프 분할 방법으로 구성된다. 대용량 그래프 분할 방법은 GPU에서 효율적으로 처리할 수 있도록 대용량 그래프를 서브 그래프로 분할할 수 있는 방법을 결정한다. 차등 서브그래프 스케줄링 방법은 GPU에서 처리하는 서브그래프를 스케줄링하여 반복적으로 사용되는 HOST-GPU 간의 데이터 중복 전송을 줄인다. 다양한 그래프 처리 알고리즘들의 성능 평가를 수행함으로써 제안하는 기법은 기존 분할 기법 대비 170%, 기존 처리 기법 대비 268% 향상되었다.

Keywords

Ⅰ. 서론

그래프 데이터는 정점과 정점 간의 연결을 구성하는 간선으로 구성된 데이터 구조입니다. 그래프는 객체를 나타내는 정점과 객체 간의 관계를 나타내는 간선, 그리고 간선의 특성과 특성을 나타내는 속성이나 레이블의 집합으로 구성된다. 그래프 처리는 경로 검색, 소셜네트워크 분석 및 기계 학습 알고리즘 등으로 다양한 실제 응용 프로그램에서 사용된다. GPU를 이용한 그래프 처리 시스템은 CPU 기반 시스템과 달리 대규모 병렬 처리를 수행하기 때문에 그래프 처리 알고리즘의 반복 계산에서 우수한 성능을 보인다.

네트워크의 기술 발전과 소셜 네트워크의 활성화로그래프 크기가 점점 커지고 소셜 네트워크 데이터가 테라바이트에 도달하고 있다. 이를 해결하기 위해 기존 CPU 개발 환경에 GPU를 연결해 대용량 그래프 데이터를 처리하는 연구가 진행되고 있다. GPU는 호스트보다 메모리가 작기 때문에 GPU는 대용량 그래프 데이터를 모두 메모리에 저장할 수 없다. GPU를 이용한 그래프 처리를 수행하기 위해 그래프를 서브 그래프로 나눈 다음 분산 컴퓨팅을 위해 다른 기계에 서브 그래프를 할당하는 분산 그래프 시스템이 개발되었다. 그러나 이러한 분산 그래프 시스템은 통신 오버헤드를 유발한다. 따라서 기존 CPU 개발 환경에 GPU를 추가하는 대용량 그래프 처리 방법이 연구되고 있다[1][2].

GPU를 사용하여 그래프를 처리하기 위해 그래프를 서브 그래프로 나눈 다음 서브 그래프를 처리하는 대용량 그래프 처리 방법이 연구되고 있다[1][2]. 정점 중심그래프 처리를 고려한다[1]. 정점 중심 그래프 알고리즘은 수렴할 때까지 그래프 처리를 반복적으로 수행한다. 반복 연산중에 그래프 알고리즘은 각 서브 그래프에서 활성 정점만 처리하고, 인접 정점을 업데이트하여 활성 정점이 수렴 때까지 수행한다.

GPU는 그래픽 처리를 위한 하드웨어이며 그래픽 처리에는 많은 양의 병렬 작업이 수반된다. 따라서 기본적으로 GPU는 SIMD(Single Instruction Multiple Data)를 갖는다. SIMD는 병렬 컴퓨팅의 한 종류로, 하나의 명령어로 여러 값을 동시에 계산하는 방식이다. CPU와 GPU의 구조와 다르기 때문에 GPU에 적합한 데이터 구조와 스케줄링이 필요하다[3-8]. 이를 위해 최신 GPU 구조를 고려한 데이터 구조와 스케줄링 연구를 조사하고 분석하였다.

그래프 알고리즘이 불규칙하고 GPU가 정형화된 구조이기 때문에 GPU를 이용한 그래프 처리는 작업 효율이 낮고 동기화 오버헤드가 높으며 데이터 인접성이 낮은 문제가 있다[1]. 그래프 알고리즘은 정점 값에 대한 랜덤 메모리 액세스로 인해 GPU에 대한 캐시 활용도가 낮다. 서브 그래프가 너무 크면 랜덤 메모리 액세스로 인해 캐시 누락이 발생하고 메모리 액세스 지연시간이 길어진다. 서브 그래프 크기가 너무 작으면 서브 그래프의 수가 많으므로 부분 결과의 병합 작업에 오버헤드가 발생합니다. 서브그래프가 캐시에 들어갈 수 있도록 그래프를 분할하여 인접성을 향상시키는 최적화 기법을 캐시 블로킹(Cache Blocking)이라 하며, 이를 위한 연구가 활발히 진행되고 있다[2].

그래프 처리는 정점 중심 그래프 처리를 고려한다. 여기서 정점 중심 그래프 알고리즘은 그래프의 반복 연산으로 수행된다. 각 반복에서 그래프 알고리즘은 활성정점만 처리하고 인접한 간선과 정점을 업데이트하며 활성화된 정점이 없을 때까지 반복한다. 이때 최근에처리된 서브 그래프는 다음 반복에서 다시 처리한다. 그러나 GPU의 메모리 크기는 제한적이며, 기존의 방법은 활성화된 정점의 전체 서브그래프를 GPU로 전송되기 때문에 데이터의 중복 전송을 포함한 HOST-GPU 대역폭을 낭비한다. 이때, HOST는 GPU를 작동시키는 시스템을 말하고, RAM에서 데이터를 관리하는 시스템을 의미한다. GPU는 전역메모리(Global memory)에서 데이터를 관리합니다. GPU의 메모리에서 제거되기 전에 여러 번 반복될 수 있도록 서브그래프가 재사용되도록 스케줄링하는 연구도 활발히 수행되었다[1].

본 논문에서는 제한된 메모리를 가진 GPU를 사용하는 그래프 알고리즘 처리 시스템을 제안하고 평가한다. 제안된 기법은 GPU의 SIMD를 고려한 캐시 차단 서브그래프 분할 방법을 활용한다. 분할된 서브그래프의 크기는 부하 분산을 위한 실험을 통해 최적의 크기를 갖는 서브 그래프로 구분된다. 또한 가치 중심 스케줄링 방법을 사용하여 서브 그래프의 반복 작업을 관리합니다. 그래프의 값을 고려하여 계산된 서브 그래프를 현재 반복에서 GPU로 전송하고 향후 반복에 사용할 수있는 서브 그래프를 상주시킨다. 값이 높은 서브 그래프는 GPU에 장기간 저장될 수 있어 GPU로의 중복전송을 줄일 수 있다. 그래프 분할 기법에 따른 그래프 알고리즘 처리 시간과 서브그래프 수를 비교하여 GPU의 L2 캐시에 최적화된 서브그래프 크기를 구한다.

본 논문의 구성은 다음과 같다. II장에서는 본 논문과 관련된 연구들을 분석하고 문제점을 기술한다. III장에서는 제안하는 GPU를 이용한 그래프 알고리즘 처리기법의 과정과 특징을 설명한다. IV장에서는 시스템 환경과 성능평가를 통해 제안하는 기법의 우수성을 입증한다. 마지막 V장에서는 결론 및 향후 연구에 대해 기술한다.

Ⅱ. 관련 연구

GPU를 이용한 그래프 알고리즘 처리를 위한 연구가 수행되고 있다. 대표적인 연구로 GPU 처리 구조를 고려한 캐시 차단 분할 기법[2], HOST-GPU 전송량을 고려한 차등 분할 그래프 처리 기법이 있다[2].

Graphcage는 캐시를 고려한 캐시 차단을 통해 랜덤메모리 액세스로 인한 캐시 활용률 감소를 줄이는 기법이다[2]. 랜덤 메모리 액세스는 피할 수 없지만 캐시 차단을 통한 액세스 순서를 변경하여 메모리 액세스 순서를 고려할 수 있습니다. Graphcage에서는 서브그래프를 통합하는 과정이 모두 GPU 메모리에 저장·통합돼제한된 GPU 메모리에 저장하기 어렵고, 캐시 차단만으로는 데이터 재전송량을 고려하지 않기 때문에 HOST-GPU 전송시간을 줄이는 데 역부족이다. Scaph는 그래프를 서브 그래프로 나누고 서브 그래프의 값을 추정하여 서브 그래프의 반복 작업을 스케줄링하는 방법을 제안하는 논문이다[1]. Greedy vertex-cut을 통하여 그래프를 서브 그래프로 분할한다[1]. 서브 그래프의 데이터는 현재 반복에서 사용할간선 데이터를 향후 반복에서도 미래에 잠재적으로 유용한 데이터, 현재와 미래의 반복에서 사용되지 않는 데이터로 구분하여 간선 데이터를 추적하여 서브 그래프 데이터를 GPU 메모리에 저장한다. 그러나 Scaph는 GPU 구조를 고려한 그래프 표현을 보여주지 않는다. 따라서 제한된 메모리 환경과 병렬 구조의 GPU를 고려하여 그래프를 분할하고 효율적으로 스케줄링하는 기술이 필요하다[1].

1. 캐시 블로킹 분할 기법

기존 캐시 차단 기술은 CPU 구조에 맞게 설계되었기 때문에 GPU에서 비효율적이다. 비효율적인 메모리 액세스로 인한 캐시 활용률 감소를 줄이기 위해 GPU의 L2 캐시를 고려한 캐시 차단 분할 기법이 제안되었다 [3]. 기존 CSR로 대표되는 그래프 데이터를 GPU 캐시를 고려해 정점을 기준으로 서브그래프로 분할하면 캐시와 글로벌 메모리 간 동기화 시간을 단축할 수 있어 처리 시간을 단축할 수 있다.

각 서브 그래프가 처리된 후 서브 그래프의 부분 합 결과가 저장되고 통합됩니다. 서브 그래프를 분할할 때 각 서브 그래프의 정점 값이 캐시에 들어갈 수 있도록 분할한다. 부분 결과를 축적하기 위해 정점의 전역 ID 와 로컬 ID의 매핑은 부분 합 배열을 유지하기 위해 유지된다. [그림 1]과 같이 각 서브그래프에 대한 연산의 부분 합은 합계를 직접 기록하지 않고 부분결과 배열에 저장하며, 모든 서브그래프를 처리한 후 모든 부분 합배열을 축소하여 정확한 합을 구한다.

그림 1. 부분적인 연산 결과 배열과 합 배열

2. 차등 분할 그래프 처리기법

HOST-GPU 전송을 고려한 차등 분할 그래프 처리기술에서 그래프는 Greedy vertex-cut으로 분할되어서브 그래프를 생성한다[9]. 계산 과정에서 서브그래프는 1-Hop 단위 반복에 따라 서브그래프의 값에 따라 두 개의 그래프 처리 엔진을 분류하고 전송하여 가치중심 차등 스케줄링으로 관리된다. 그래프 계산은 수렴될 때까지 반복적으로 수행됩니다. 반복적으로 계산된 데이터의 활성 정점에 따라 세 가지 유형의 간선 데이터로 구분한다[10].

서브 그래프는 1-hop 단위로 반복에 사용된 간선 데이터를 측정하여 계산량을 추정할 수 있다. 이는 서브그래프의 값으로 표현될 수 있다. 서브 그래프는 값에 따라 두 가지 처리 엔진으로 나뉘어 전송된다. 높은값 서브 그래프는 전체 서브 그래프를 GPU로 전송하고 GPU 메모리에서 제거되기 전에 여러 번 반복하여 서브 그래프를 계산한다. 낮은 값 서브 그래프는 서브 그래프 내에서 사용할 데이터만을 추출해 GPU로 전송하는 가치 중심 데이터 전송으로 HOST-GPU 대역폭 활용도를 높인다.

III. 제안하는 SSSP 그래프 알고리즘 처리 기법

1. 전체 시스템 구조

본 논문에서는 캐시 차단을 통해 그래프를 분할하고 반복되는 서브 그래프 데이터의 전송을 최소화하기 위해 서브 그래프의 값을 추정한다. 이 그래프는 G(E)로 정의되고 SG : (E, L(SG))로 정의되는 속성을 가진 무방향 그래프를 다룬다. E는 간선 데이터 집합을 나타내며, L(SG)은 서브 그래프의 레이블을 나타낸다. 간선 e 드E 은 정점의 쌍 e = (s, d)으로 표현되고, s는 시작 정점(source vertex), d는 도착 정점(destination vertex)를 의미한다. GPU의 메모리 크기는 전체 그래프 크기의 절반으로 가정한다. 시스템에 사용할 알고리즘은 SSSP(Single Source Shortest Path)을 사용한다. SSSP는 하나의 출발점에서 각 정점까지 도달하는 비용을 계산하여 최단경로를 구하는 알고리즘이다.

[그림 2]는 제안하는 기법의 시스템 구성도를 나타낸 다. 제안하는 시스템은 캐시를 고려하여 그래프를 서브그래프로 분할하는 그래프 분할 모듈(Graph Partitioner Module), 서브 그래프의 값을 계산하여 값에 따라 서로 다른 처리 엔진으로 전송하는 분배 모 둘(Dispatcher Module), 서로 다른 처리 엔진으로 구성된 차등 서브 그래프 스케줄링 모듈(Value-Driven Subgraph Process Engine Module) 으로 구성된다.

그림 2. 제안하는 기법의 구성도

그래프 분할 모듈은 각 서브 그래프에 대해 정점 수를 균등하게 나누어 작업량이 GPU 코어에 균일하게 분산될 수 있도록 한다. 또한 그래프 연산이 연속적으로 발생할 수 있도록 하려면 간선의 시작 정점과 도착정점이 같은 서브 그래프에 존재하는 경우 간선을 해당서브 그래프에 할당한다. 이는 캐시와 GPU 내부의 전역 메모리(Global memory) 사이의 전송 시간을 줄일 수 있다. 각 서브그래프의 값이 캐시에 존재할 정도로 작게 줄어들면 GPU 내부의 계산 속도가 빨라진다. 다만 캐시에 입력되는 서브그래프의 크기가 클수록 메모리 접근 효율이 떨어지고 서브그래프의 크기가 작을수록 각 서브그래프의 부분 결과를 병합하기 위한 오버헤드가 커지므로 캐시의 크기를 신중하게 조정할 필요가 있다. 따라서 L2 캐시 크기에 맞는 서브 그래프 크기로 만들어집니다. 이는 GPU의 SIMD 구조에 적합한 서브그래프로 만들 수 있는 구조이며 그래프 알고리즘 연산과정에서 GPU의 L2 캐시에 저장될 수 있어 GPU 내부연산 시 동기화 시간을 단축할 수 있다. 또한 정점 중심서브그래프는 그래프 알고리즘의 서브그래프 간 동기화 과정을 줄여 불필요한 데이터 전송과 연산을 줄여 효율적인 연산이 가능하다.

분배 모듈은 GPU를 이용한 그래프 처리 알고리즘의 계산 시간의 대부분을 차지하는 HOST-GPU 전송 시간을 줄이기 위해 전송에 적합한 그래프 데이터를 구분해 불필요한 전송을 줄인다. 계산된 서브 그래프의 도착 정점을 확인함으로써, 임계값보다 높은 도착 정점의 수를 가진 서브 그래프는 전송될 서브 그래프로 구성된다. 임계값보다 낮은 서브 그래프는 내부적으로 간선데이터만 전송함으로써 불필요한 데이터 전송을 줄일 수 있고, 후속 작업은 데이터 재전송을 줄일 수 있다.

차등 서브 그래프 분할 모듈은 높은 값 서브 그래프처리 엔진과 낮은 값 서브 그래프 처리 엔진으로 구성된다. 높은 값 서브 그래프 엔진은 전체 서브 그래프를 계산해야 하기 때문에 시작 정점과 서브그래프를 확인하여 전체 서브그래프를 계산하고 GPU 전역 메모리에 서브그래프를 저장하고 그 결과로 서브그래프의 도착정점을 출력하여 CPU로 전송한다. 낮은 값 서브 그래프 엔진은 현재 반복에서 간선 데이터를 한 번만 계산하고 GPU 전역 메모리에 저장하지 않는다.

[그림 3]은 서브 그래프 처리 시스템의 흐름도를 나타낸다. 그래프를 입력하면 그래프 분할 모듈의 캐시블로킹 정점 분할을 통해 그래프가 분할됩니다. 분배모듈은 계산할 서브 그래프를 탐색한 후 서브 그래프의 값을 계산합니다. 서브그래프의 값에 따라 차등 서브그래프 처리 엔진으로 전달된다. 서브 그래프 처리 엔진의 결과는 반복적으로 동기화된다. 모든 정점을 방문한 후 그래프 알고리즘의 결과가 출력된다.

그림 3. 시스템 흐름도

2. 그래프 분할 모듈

GPU 구조에 따라 캐시 차단 분할 기술을 수행하려면 몇 가지 규칙을 설정해야 합니다. 첫째, GPU에는 여러 수준의 캐시가 있지만 최신 GPU 구조의 마지막 수준 캐시(Last Level Cache) 즉 L2 캐시를 고려합니다. 병목 현상을 일으키는 LLC와 DRAM 사이의 지연 시간과 대역폭을 효율적으로 사용하기 위해서입니다.

둘째, 캐시 차단은 2D 분할 대신 1D 분할로 적용됩니다. 그래프가 시작 정점과 도착 정점이 있는 2차원 차단일 경우 너무 많은 블록이 생성되고, 블록이 작을수록 데이터 재사용이 적어 GPU 병렬화가 비효율적으로 처리된다. 따라서 시작 정점을 기준으로 열을 차단하여 서브 그래프를 분할합니다.

셋째, 알고리즘이 실행되기 전에 그래프를 서브 그래프로 나누는 정적 차단을 사용한다. 동적 차단은 중간버퍼를 사용하여 데이터를 저장하는데, 데이터가 서로다른 버퍼에 동적으로 분산되어 각 버퍼가 캐시에 들어갈 수 있기 때문에 부분적인 결과를 축적한다. 동적 차단은 데이터 구조를 거의 수정할 필요가 없지만 중간버퍼를 위한 많은 양의 메모리 공간이 필요할 수 있습니다. 또한 데이터를 버퍼에 삽입하고 버퍼에서 데이터를 다시 읽는 작업으로 인해 동적 로드가 발생할 수 있습니다. 동적 오버헤드를 줄이기 위해 정적 차단을 선택했으며, 그래프 알고리즘이 여러 번 반복되기 때문에전처리로 인한 성능 이득이 상대적으로 크다. GPU의 스레드 블록은 특정 범위의 하위 그래프에서 데이터를 수집하여 공유 메모리에 저장합니다. 모든 공유 메모리의 데이터가 계산되면 최종 결과가 글로벌 메모리에 기록됩니다. 메모리 액세스 효율성을 높이고 GPU에서 효율적으로 작동하는 캐시 차단 시스템을 갖췄다.

[표 1]은 성능 평가에 사용된 모든 데이터를 분할하기 전과 분할 후 그래프의 간선 데이터 분포를 보여준다. 분할 전 서브 그래프의 정점 중 79.1%는 9개 미만의 간선을 가지고 있었고, 20%는 9개 이상의 간선을 가지고 있었다. 분할 후 하위 그래프 정점의 90% 이상이 8개 미만의 간선을 가지며, 100%가 16개 미만의 간선을 가진다.

표 1. 그래프 내정점 당 간선의 개수

만약 서브 그래프의 정점 당 간선이 균등하게 서브그래프의 대부분의 정점을 적은 간선 수로 직렬로 계산하면 성능이 저하될 수 있으므로 서브그래프의 크기에 따른 작업 부하 실험을 통해 서브그래프의 크기를 결정하게 된다.

[그림 4]는 분할 기법에 의해 생성된 서브 그래프를 보여준다. Greedy vertex-cut은 세 가지 규칙을 따른다. 첫째, 간선이 SG(s)와 SG(d)를 교차하는 경우 간선을 교차하는 서브 그래프에 할당해야 한다. 둘째, 두 정점 중 하나만 할당되면 할당된 서브 그래프에서 간선이 할당된다. 셋째, 두 정점이 모두 결정되지 않으면 가장 적게 저장된 서브 그래프에 할당합니다.

그림 4. 분할 기법에 따른 서브 그래프 생성 과정

Greedy vertex-cut 은 그래프 내에서 인접 관계를 우선적으로 분할하기 때문에 [그림 (a)]과 같이 분할됩니다. Greedy vertex-cut으로 나뉜 서브 그래프는 각기 다른 크기의 서브 그래프를 갖게 된다. 특히 [그림(a)]의 서브그래프 3과 같이 다른 서브 그래프보다 크기가 큰 서브그래프가 존재한다. 제안하는 기법은 Greedy Vertex-cut을 통해 분할된 서브 그래프의 평균 크기를 얻고 서브 그래프의 평균 크기보다 큰 서브그래프의 간선을 가장 작은 서브 그래프에 할당한다. 서브 그래프의 간선이 균일하게 분할된 경우 부하 분포가 양호하다. 다음 규칙에 의해 분할된 서브 그래프는 [그림 (b)]와 같이 정점과 인접을 갖는 간선이 있는 동일한 서브 그래프로 구분된다. 위와 같은 규칙을 고려한 서브 그래프 분할은 GPU의 L2 캐시의 활용률을 높일 수 있어 GPU 내부 작업을 가속화할 수 있다. 또한 GPU를 사용한 그래프 알고리즘의 처리 시간은 대부분 HOST-GPU 전송 시간이기 때문에 서브그래프를 연속적으로 구성하여 GPU로 반복되는 서브그래프를 줄일 수 있다.

3. 분배 모듈

트위터 데이터에서 작동하는 그래프 알고리즘의 서브 그래프 내에서 UD, PUD 및 NUD의 양을 나타내는 논문에서 반복적으로 전송되는 NUD 간선 데이터가 많다고 한다[1][2]. 기존의 그래프 처리 시스템은 전송된 데이터를 복제하여 HOST-GPU 대역폭을 낭비한다. 일반적으로 초기 반복에서는 PUD의 중복 전송량이 크고 반복이 진행됨에 따라 NUD가 GPU로 반복적으로 전송된다.

제안하는 기법에서는 간선 데이터를 구별하고 불필요한 간선 데이터의 HOST-GPU 간 전송을 제거할 수 있다. 반복 동작 과정에서 동일한 정점이 여러 번 활성화될 수 있으며, 이에 따라 간선 UD, PUD 및 NUD도 동적으로 변경될 수 있다. 이는 현재 반복에서 사용되지 않지만 잠재적으로 사용되는 데이터인 PUD를 UD 뿐만 아니라 PUD를 고려하여 GPU로 사전 전송하여 전체 그래프 처리 시간을 단축할 수 있다. [그림 5]는 그래프 알고리즘이 반복적으로 처리되는 과정을 보여 준다. 첫 번째 반복에서는 정점 4와 정점 7이 활성화되고, 두 번째 반복에서는 정점 1과 정점 6이 활성화된다. 이때 정점 6에 연결된 간선을 PUD로 간주하여 미리 전송하였으며, 이전에 전송된 서브그래프 2는 전송되지 않아 중복 전송이 감소하였다.

그림 5. 그래프 알고리즘 처리 과정

서브그래프의 값을 결정하는 방정식은 다음과 같다. 식 1에서 D는 v의 나가는 간선의 수를 나타내고, A는 정점의 활성화 여부를 나타낸다. Val(G)은 현재 반복에서 수렴까지의 최대 반복을 통해 생성된 UD의 총량을 나타낸다. 식 1에 따라 서브그래프의 값을 결정한다.

\(\operatorname { Val } ( G ) = \sum _ { i = \text { Curv } \in \text { Gsetof Vertices } } ^ { M A X } D ( v ) ^ { * } A ^ { i } ( v )\)       (1)

4. 차등 서브 그래프 스케줄링 모듈

서브그래프를 스케줄링하기 위해 서브그래프의 계산 결과에 따라 두 개의 그래프 처리 엔진으로 나뉜다. 서브 그래프의 계산 결과는 서브 그래프의 도착 정점과 도착 정점을 시작 정점으로 갖는 서브 그래프를 반환합 니다. 다음 반복에서 서브 그래프는 사용할 서브 그래 프의 정점 포함 비율로 높은 값 서브그래프와 낮은 값 서브그래프로 나뉜다. 높은 값 서브그래프는 모든 에지 데이터로 구성되며, 전체 서브그래프는 GPU로 전송되며, 낮은 값 서브그래프는 대부분 NUD로 구성되므로 CPU에서 UD만 추출하여 GPU로 전송되며, 제안된 기법은 분류된 두 서브그래프의 연산에 필요한 간선 데이 터를 최대화하는 방법을 제안한다.

[그림 6]은 차등 서브 그래프 스케줄링 모듈을 보여준다. GPU로 전송된 UD 및 PUD 간선 데이터로 높은 값 서브그래프를 반복적으로 사용할 수 있는 것이 중요하며, 이를 위해 GPU로 전송된 서브그래프는 GPU의 전역 메모리에 저장된다. 서브 그래프를 GPU로 전송하기 전에 서브 그래프가 전역 메모리에 있는지 확인하고, 전역 메모리에 서브 그래프가 없으면 CPU에서 GPU로 전송하고, 반대로 전역 메모리에 서브 그래프가 있다면 해당 서브 그래프가 대기열에 재할당된다. GPU 에 의해 계산된 서브그래프는 대기열에 저장된다. 자주 사용되는 서브그래프는 GPU에 오랜 시간 저장되며, 이러한 지연된 스케줄링은 반복적인 그래프 처리에서 서브그래프의 UD 및 PUD 사용을 극대화한다.

낮은 값 서브그래프는 UD만 추출해 GPU로 전송해 HOST-GPU 간 데이터 전송량을 줄인다. 다만 서브그래프에서 추출한 UD의 양이 서브그래프마다 다를 수 있어 부하 분산이 어려울 수 있다.

그림 6. 차등 서브 그래프 스케줄링 모듈

IV. 성능 평가

1. 성능 평가 환경

제안된 그래프 분할 기법 및 기존 기법과 성능 비교 를 통해 제안된 기법의 우수성을 입증한다. [표 2]는성 능 평가 환경을 보여준다. OS는 리눅스 계열의 Ubuntu로 하였다. HOST의 성능 평가 환경은 Intel(R) Core(TM) i7-9700KF CPU @ 3.60GHz 64bit 운영체제에서 진행하였다. HOST 메모리는 32GB이다. GPU는 Geforce RTX 3060TI 이고 GPU 메모리는 8GB이다. 그래프 데이터는 간선 데이 터 집합으로 이루어진 그래프 데이터이다. 그래프 데이 터는 sample, karate, p2p-Gnutella04 데이터를 사용하였다. GPU 환경에서 한번에 처리되지 않는 상황을 고려하기 위하여 그래프 데이터에 따라 GPU 메모리 크기가 그래프 크기의 50%인 상황에서 성능 평가한다

표 2.성능 평가 환경

[표 3]은 성능 평가 매개변수를 나타낸다. 우리는 하 위 그래프의 크기를 변경하여 제안된 시스템의 성능에 미치는 영향을 비교한다. 또한 서브 그래프 분할 기법을 변경하여 비교한다. 서브 그래프의 개수를 2개에서 50개로 변경하여 비교한다. 서브그래프가 분할됨에 따라 서브 그래프 당 정점 수는 16~512개로, 정점 당에 지수는 1~32개로 변경된다. 서브 그래프 분할 기법은 Cache, Blocking Greedy Vertex-cut을 바꿔가며 평가한다.

표3. 성능 평가 파라미터

2. 자체 성능 평가

본 성능 평가는 제안된 캐시 블록 그래프 분할 기법 의 최적의 서브 그래프 크기를 찾기 위해 서브 그래프 수를 변경하여 그래프 알고리즘 처리 시간을 비교한다. [표41는 서브그래프 수에 따른 그래프 알고리즘 처리시간을 나타낸다. 가로 축은 분할된 서브그래프의 수이고, 세로 축은 그래프 알고리즘 처리 속도 향상 비율이다. 알고리즘은 SSSP를 사용했고, 그래프는 sample, karate, p2p 데이터 세트를 사용했다. [표 4]는 세가지 데이터 세트를 사용하여 그래프 처리 시간을 비교한 그래프이다. 그래프 처리 시간은 평균 대비 속도 향상 비율로써 비교하였다. 데이터 세트에 따르면 서브 그래프의 수는 2개에서 50개로 구성되었습니다. sample 데이터 세트는 평균 처리 시간에 비해 102%, karate 데이터 세트는 113%, p2p 데이터 세트는 110%의 향상을 보였다. 각 데이터 세트에 대해 서브 그래프의 수가 4, 9, 30인 경우 그래프 알고리즘의 처리 시간이 가장 빨랐다. 각 그래프 데이터 세트는 크기와 특성이 다르기 때문에 데이터의 크기와 특성에 맞는 그래프 분할기법을 적절히 사용하면 최적의 서브 그래프 크기를 찾을 수 있다.

표 4. 분할 기법에 따른 그래프 알고리즘 처리시간

본 성능평가는 최적의 성능 그래프 분할 기법을 찾기 위해 분할 기법에 따른 그래프 처리 시간을 측정하여 성능을 비교한다. [그림 7]은 Greedy vertex-cut 기법, Cache Blocking 분할 기법을 제안하는 분할 기법과 비교 및 평가하였다.

그림 7. 분할 기법에 따른 그래프 알고리즘 처리시간

각 데이터 세트를 서로 다른 분할 기법으로 나눈 다음 제안된 그래프 알고리즘 처리 기법으로 처리하여 그 래프 처리 시간을 측정하였다. 가로축은 데이터 집합이고, 세로축은 Greedy vertex-cut의 처리시간이 1일 때의 처리 시간의 향상 비이다. 성능평가 결과 sample 데이터는 그래프 크기가 매우 작기 때문에 그래프의 처리 시간에 큰 차이를 보이지 않았으나, p2p 데이터 세트의 캐시 차단 및 제안된 분할 기법은 각각 151%, 170%의 성능 향상을 보였다. 인접한 정점과 간선을 동일한 그래프에 배포하는 것이 우선하므로 Greedy vertex-cut 기법은 부하 분산을 수행하지 않는다. 캐시 차단 분할 기법과 제안된 분할 기법은 서브 그래프의 크기가 동일하게 분할되기 때문에 부하 분산을 수행한다. 또한 제안된 분할 기법은 인접한 정점과 에지 데이터를 하나의 서브 그래프에 분산한 다음 균등하게 서브 그래프로 분할하여 GPU의 병렬 작동 효율성을 높이고 각 서브 그래프의 액세스 시간을 단축한다. 이번 성능 평가를 통해 제안된 분할 기법의 성능이 우수한 것으로 입증하였다.

3. 비교 성능 평가

본 평가는 제한된 GPU 메모리의 활용도와 GPU 메모리를 뛰어넘는 데이터 전송 비율을 측정했다. [그림 8]은 그래프 알고리즘 반복 처리 중 GPU 메모리를 초과하는 데이터 전송 속도를 보여준다. GPU 메모리의 크기를 제한하기 위해 GPU 메모리의 크기는 전체 그래프 크기의 절반으로 가정한다. 그래프 알고리즘을 반복적으로 처리하는 동안 GPU로 전송된 서브그래프는 GPU의 전역 메모리에 저장된다. 전역 메모리가 가득찬 경우 전역 메모리에 저장된 처리되지 않은 가장 오래된 서브 그래프를 삭제하고 새로 전송된 서브 그래프를 저장한다.

그림 8. GPU 메모리를 넘어서는 데이터 전송 비율

[그림 8]에서 가로축은 데이터 세트를 나타내고, 세로 축은 GPU의 전역 메모리를 넘어선 그래프 데이터의 전송 비율을 나타낸다. GraphCage는 반복적인 처리가 수행될 때마다 GPU의 전역 메모리 넘어서는 데이터를 전송한다. 매번 반복할 때마다 전역 메모리를 넘어서는 데이터를 전송하면 동기화 오버헤드가 발생하며, 이는 계산하지 않는 대기 시간이 증가하기 때문에 계산 시간이 증가한다. 그러나 Scaph와 제안된 기술은 서브 그래프의 중복 전송을 제거하고 이전에 전송된 서브 그래프를 전역 메모리에 저장하여 반복 작업에서 GPU로 전송되는 데이터를 줄였다.

본 평가는 그래프 알고리즘을 반복적으로 처리하는 동안 GPU로 전송된 데이터의 총량을 측정하고 비교한다. [그림 9]는 GPU로 전송된 서브그래프의 전송량을 비교한 결과이며, [그림 9]의 가로축은 데이터 세트이고 세로축은 그래프 전송량을 나타낸다. 그래프 전송은 전체 그래프 크기의 배수로 표현된다. GraphCage는 반복처리시 전체 그래프를 전송하므로 데이터 전송량은 전체 그래프 크기에 반복 작업 수를 곱한 값과 같다. Scaph와 제안된 기법은 전송된 데이터를 대기열에 저장하여 반복적인 전송을 줄이기 때문에 전송량을 줄일수 있다. 데이터 크기가 작은 sample 및 karate 데이터 셋에서는 데이터 전송량과 기존 기술의 차이가 크지 않지만 p2p 등 실험 데이터의 크기가 커질수록 데이터 전송량의 차이가 133%에 달한다. GPU를 사용하는 그래프 알고리즘의 처리 시간은 대부분 HOST-GPU 간의 데이터 전송 시간이다. 데이터 전송량을 줄이면 그래프 알고리즘의 처리 시간을 단축할 수 있다. 따라서 HOST-GPU 간 데이터 전송량을 줄임으로써 대역폭을 최대까지 사용할 수 있고 그래프 알고리즘 처리 속도를 줄일 수 있다.

그림 9. GPU로 전송하는 데이터의 전송량

[그림 10]은 기존 기법과 제안된 그래프 처리 기법으 로 처리한 그래프 처리 시간의 평균을 비교한다. 가로 축은 실험 그래프 데이터 세트이고, 세로축은 그래프 처리의 향상 비율이다. 데이터 전송량에 비례하여 그래프 처리 속도를 [그림 10]에 나타내었다. sample 데이 터는 동일한 데이터 처리 시간을 보여주었지만 karate 데이터 세트의 경우 그래프 전송이 1.3배 많은 Scaph 를 사용한 처리 시간이 GraphCage 및 제안된 기술보다 더 오래 걸렸다. p2p 데이터 세트의 처리시간에서 도 그래프 전송량은 GraphCage 순으로 전체 그래프 크기의 200%, 170%, 150%였으며 처리시간은 GraphCage 기준으로 100%, 201%, 268%였다.

그림 10. 그래프 처리속도 향상 비율

Ⅴ. 결론

본 논문에서는 제한된 메모리 환경을 가진 GPU를 사용하는 그래프 알고리즘 처리 기법을 제안하고 다양한 성능평가를 수행하였다. 제안하는 기법은 캐시를 고려한 서브 그래프 분할 기법을 통해 부하 분산을 효율적으로 관리하여 병렬 GPU 연산의 효율성을 극대화한다. 또한 차등 서브 그래프 스케줄링 기법은 그래프의 중복 전송을 줄여 그래프 전송을 줄였다. 서브그래프의 크기는 GPU L2 캐시를 고려하여 분할하였으며, 서브 그래프는 활성 정점과 간선의 전송을 효율적으로 처리하기 위해 두 개의 차등 서브 그래프 처리 엔진으로 분할하였다. 그래프 처리량과 그래프 전송을 비교하는 성 능 평가는 서브 그래프의 크기 및 차등 서브 그래프 스케줄링으로 처리량이 개선되고 전송이 감소했음을 보여준다. 제안된 기법은 GPU의 SIMD 구조를 고려한 그래프 표현과 처리를 통해 반복하는 그래프 알고리즘 SSSP 및 BFS를 다루며, 향후에는 다양한 데이터 집합을 이용하여 최신 논문과 비교하여 구체적인 분석을 하기 위한 연구를 진행할 에정이다.

References

  1. Long Zheng, Xianliang Li, Yaohui Zheng, Yu Huang, Xiaofei Liao, and Hai Jin, "Scaph: Scalable GPU-accelerated graph processing with value-driven differential scheduling," In: 2020 {USENIX} Annual Technical Conference ({USENIX}{ATC} 20), pp.573-588, 2020.
  2. X. H. Chen, "GraphCage: Cache Aware Graph Processing on GPUs," arXiv preprint arXiv:1904.02241, 2019.
  3. D. H. Kim, Rakesh NAGI, and D. M. Chen, "Thanos: High-Performance CPU-GPU Based Balanced Graph Partitioning Using Cross-Decomposition," In: 2020 25th Asia and South Pacific Design Automation Conference (ASP-DAC), IEEE, pp.91-96, 2020.
  4. Yu Zhang, Xiaofei Liao, Hai Jin, Bingsheng He, Haikun Liu, and Lin Gu, "DiGraph: An efficient path-based iterative directed graph processing system on multiple GPUs," In: Proceedings of the Twenty-Fourth International Conference on Architectural Support for Programming Languages and Operating Systems, pp.601-614, 2019.
  5. Wentian Guo, Yuchen Li, Mo Sha, Bingsheng He, Xiaokui Xiao, and Kian-Lee Tan, "Gpu-accelerated subgraph enumeration on partitioned graphs," In: Proceedings of the 2020 ACM SIGMOD International Conference on Management of Data, pp.1067-1082, 2020.
  6. Alexander BARVINOK and Pablo SOBERON, "Computing the partition function for graph homomorphisms," Combinatorica, Vol.37, No.4, pp.633-650, 2017. https://doi.org/10.1007/s00493-016-3357-2
  7. B. Goodarzi, F. Khorasani, V. Sarkar, and D. Goswami, "High Performance Multilevel Graph Partitioning on GPU," In: 2019 International Conference on High Performance Computing & Simulation (HPCS), IEEE, pp.769-778, 2019.
  8. Rintu PANJA and Sathish S. VADHIYAR, "HyPar: A divide-and-conquer model for hybrid CPU-GPU graph processing," Journal of Parallel and Distributed Computing, Vol.132, pp.8-20, 2019. https://doi.org/10.1016/j.jpdc.2019.05.014
  9. Joseph E. Gonzalez, Yucheng Low, Haijie Gu, Danny Bickson, and Carlos Guestrin, "Powergraph: Distributed graph-parallel computation on natural graphs," In: 10th {USENIX} Symposium on Operating Systems Design and Implementation ({OSDI} 12), pp.17-30, 2012.
  10. H. W. Kwak, C. H. Lee, H. S.Park, and Sue Moon, "What is Twitter, a social network or a news media?," In: Proceedings of the 19th international conference on World wide web, pp.591-600, 2010.
  11. Aapo KYROLA, Guy BLELLOCH, and Carlos GUESTRIN, "Graphchi: Large-scale graph computation on just a {PC}," In: 10th {USENIX} Symposium on Operating Systems Design and Implementation ({OSDI} 12), pp.31-46, 2012.
  12. S. W. Min, Vikram Sharma Mailthody, Zaid Qureshi, Jinjun Xiong, Eiman Ebrahimi, and Wen-mei Hwu, "EMOGI: Efficient Memory-access for Out-of-memory Graph-traversal in GPUs," arXiv preprint arXiv:2006.06890, 2020.
  13. Amir Hossein Nodehi SABET, Z. J. Zhao, and Rajiv GUPTA, "Subway: Minimizing data transfer during out-of-GPU-memory graph processing," In: Proceedings of the Fifteenth European Conference on Computer Systems, pp.1-16, 2020.
  14. Lingxiao Ma, Zhi Yang, Han Chen, Jilong Xue, and Yafei Dai, "Garaph: Efficient GPU-accelerated graph processing on a single machine with balanced replication," In: 2017 {USENIX} Annual Technical Conference ({USENIX}{ATC} 17), pp.195-207, 2017.
  15. M. S. Kim, K. H. An, H. C. Park, H. S. Seo, and J. W. Kim, "GTS: A fast and scalable graph processing method based on streaming topology to GPUs," In: Proceedings of the 2016 International Conference on Management of Data, pp.447-461, 2016.
  16. Abdullah Gharaibeh, Lauro Beltrao Costa, Elizeu Santos-Neto, and Matei Ripeanu, "A yoke of oxen and a thousand chickens for heavy lifting graph processing," In: Proceedings of the 21st international conference on Parallel architectures and compilation techniques, pp.345-354, 2012.
  17. Huanzhou Zhu, Ligang He, Songling Fu, Rui Li, Xie Han, Zhangjie Fu, Yongjian Hu, and Chang-Tsun Li, "Wolfpath: accelerating iterative traversing-based graph processing algorithms on GPU," International Journal of Parallel Programming, Vol.47, No.4, pp.644-667, 2019. https://doi.org/10.1007/s10766-017-0533-y
  18. V. Jatala, R. Dathathri, G. Gill, L. Hoang, V. K. Nandivada and K. Pingali, "A study of graph analytics for massive datasets on distributed multi-GPUs," In: 2020 IEEE International Parallel and Distributed Processing Symposium (IPDPS), IEEE, pp.84-94, 2020.
  19. M. A. Awad, S. Ashkiani, S. D. Porumbescu and J. D. Owens, "Dynamic Graphs on the GPU," In: 2020 IEEE International Parallel and Distributed Processing Symposium (IPDPS). IEEE, pp.739-748, 2020.
  20. M. Winter, D. Mlakar, R. Zayer, H. P. Seidel and M. Steinberger, "faimGraph: high performance management of fully-dynamic graphs under tight memory constraints on the GPU," In: SC18: International Conference for High Performance Computing, Networking, Storage and Analysis, IEEE, pp.754-766, 2018.
  21. Farzad Khorasani, Keval Vora, Rajiv Gupta, and Laxmi N. Bhuyan, "CuSha: Vertex-centric graph processing on GPUs," In: Proceedings of the 23rd international symposium on High-performance parallel and distributed computing, pp.239-252, 2014.
  22. Steffen Maass, Changwoo Min, Sanidhya Kashyap, Woonhak Kang, Mohan Kumar, and Taesoo Kim, "Mosaic: Processing a trillion-edge graph on a single machine," In: Proceedings of the Twelfth European Conference on Computer Systems, pp.527-543, 2017.
  23. Avery Ching, Sergey Edunov, Maja Kabiljo, Dionysios Logothetis, and Sambavi Muthukrishnan, "One trillion edges: Graph processing at facebook-scale," Proceedings of the VLDB Endowment, Vol.8, No.12, pp.1804-1815, 2015. https://doi.org/10.14778/2824032.2824077
  24. Joseph E. Gonzalez, Reynold S. Xin, Ankur Dave, Daniel Crankshaw, Michael J. Franklin, and Ion Stoica, "Graphx: Graph processing in a distributed dataflow framework," In: 11th {USENIX} Symposium on Operating Systems Design and Implementation ({OSDI} 14), pp.599-613, 2014.