KR20160121009A - 디스크 기반의 연결요소 그래프 질의 처리방법 - Google Patents

디스크 기반의 연결요소 그래프 질의 처리방법 Download PDF

Info

Publication number
KR20160121009A
KR20160121009A KR1020150050350A KR20150050350A KR20160121009A KR 20160121009 A KR20160121009 A KR 20160121009A KR 1020150050350 A KR1020150050350 A KR 1020150050350A KR 20150050350 A KR20150050350 A KR 20150050350A KR 20160121009 A KR20160121009 A KR 20160121009A
Authority
KR
South Korea
Prior art keywords
graph
processing
disk
connection element
page
Prior art date
Application number
KR1020150050350A
Other languages
English (en)
Other versions
KR101795848B1 (ko
Inventor
김민수
박힘찬
Original Assignee
재단법인대구경북과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 재단법인대구경북과학기술원 filed Critical 재단법인대구경북과학기술원
Priority to KR1020150050350A priority Critical patent/KR101795848B1/ko
Publication of KR20160121009A publication Critical patent/KR20160121009A/ko
Application granted granted Critical
Publication of KR101795848B1 publication Critical patent/KR101795848B1/ko

Links

Images

Classifications

    • G06F17/30218
    • G06F17/30159
    • G06F17/30958

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명은 메모리에 적재되지 않은 크기의 큰 그래프도 디스크 기반 순차 지향 병렬 처리 접근 방식을 사용하여 빠르고 확장성 있는 그래프를 처리할 수 있도록 한 디스크 기반의 연결요소 그래프 질의 처리방법에 관한 것으로서, 상기 방법은, 상기 초고속 디스크와 메모리데 대한 접근 전략 중 속성 데이터와 그래프 위상 데이터 모두에 대하여 순차 디스크 접근 전략과 랜덤 메모리 접근 전략을 사용하여 디스크 기반의 그래프로 표현하여 연결 요소 그래프 질의를 처리하는 것이다.

Description

디스크 기반의 연결요소 그래프 질의 처리방법{Method for processing connected components graph interrogation based on disk}
본 발명은 디스크 기반의 연결요소 그래프 질의 처리방법에 관한 것으로서, 메모리에 적재되지 않은 크기의 큰 그래프도 디스크 기반 순차 지향 병렬 처리 접근 방식을 사용하여 빠르고 확장성 있는 그래프를 처리할 수 있도록 한 디스크 기반의 연결요소 그래프 질의 처리방법에 관한 것이다.
일반적으로, 연결요소 계산은 그래프에 대해서 가장 기본적이고 자주 사용되는 연산 중 하나이고, 기본적으로는 두 노드 사이의 도달가능성(reachability)를 확인하기 위해서 사용된다. 연결요소의 동치 관계(equivalence class) 특성으로 인해, 연결요소 질의는 단백질 상동성 찾기(finding protein homology), 무선 네트워크 분석 (cellular networks analysis), 패턴 인식 (pattern recognition) 등의 많은 어플리케이션에서 널리 사용된다.
그래프에 대한 빠른 연결요소 계산을 위해서, 병렬 컴퓨팅 분야에서 많은 인-메모리 병렬 알고리즘들은 병렬 랜덤 엑세스 머신 (Parallel Access Machine; PRAM)을 따르고 있다.
PRAM 모델은 단지 이론적인 병렬 컴퓨터 모델이기 때문에, Symmetric multiprocessor (SMP)에 기반한 실용적인 병렬 알고리즘들이 제안되었다.
하지만 그 방법들은 단일 컴퓨터의 메모리에 모두 적재되는 그래프만 처리할 수 있다는 단점이 있다. 수십억 단위의 그래프를 메모리에 적재하기 위해서는 매우 비싼 컴퓨터에만 장착할 수 있는 수백 기가바이트의 메모리가 필요하다. 따라서 SMP기반의 전통적인 방법은 메모리에 적재되지 않는 큰 규모의 그래프를 처리하지 못해서 사용하기 어렵다.
대규모 그래프를 처리하기 위해, 확장 가능한 분산 처리 알고리즘과 시스템이 있다. Hash-To-Min은 연결요소의 효율적인 연산을 위한 맵리듀스의 단계와 각 단계별 통신비용을 줄인 맵리듀스 기반의 알고리즘이다.
맵리듀스는 각 맵리듀스 단계 사이에 Synchronous barrier를 가지고 있는 동기적인 접근법을 사용하고 있고, 이는 각 단계의 실행시간이 클러스터에서 가장 느린 머신에 의해 결정되기 때문에 성능이 저하되는 문제가 있다.
PowerGraph는 비동기적인 vertex-centric 프로그래밍 모델을 따르고 있으며, vertex-centric 모델에서 유저가 기술한 커널 함수는 각각의 노드에서 비동기적인 병렬 방법으로 수행된다.
비동기적인 방법들은 인접 노드나 간선에 대한 최신의 정보를 사용해서 노드나 간선에 대한 정보를 갱신하기 때문에, 몇몇 알고리즘에 대해서 동기적인 방법들이 수렴하는 것보다 더 빠르게 수렴한다. 그러나 PowerGraph같은 인메모리 분산 시스템들은 먼저 하나의 그래프를 여러 개의 subgraph로 파티션하고, 각 머신의 메인 메모리에 subgraph를 로드하고, 병렬로 연결요소 계산을 한다.
단시간에 Billion 단위의 그래프를 위한 연결 요소 계산하는 목표에 관해서, 모든 종래의 알고리즘 및 시스템들은 다음의 이유로 목표를 달성하는데 실패했다. 첫째, 종래의 디스크 기반 분산 방법들은 통신비용과 임의 디스크 접근 때문에 매우 좋지 않은 성능을 보여준다. 예를 들어Hash-To-Min은 n이 가장 큰 요소 크기 일 때 최소한 O(log n)의 맵리듀스 라운드가 필요하다. 각각의 라운드에서, 맵퍼는 디스크로부터 인풋 데이터를 읽고, 디스크에 중간 데이터를 쓰고, 그리고 리듀서는 네트워크를 통해 중간 데이터를 읽고, 디스크에 아웃풋 데이터를 쓴다. 그러므로 실제 그래프처럼 n이 커질수록, 매우 느려지게 된다. 둘째, 종래의 메모리기반 분산 방법은 매우 많은 양의 메인 메모리를 필요로 하고, 매우 큰 클러스터를 사용한다 할지라도 연결요소를 계산하는데 쉽게 실패하는 경향이 있다. 예를 들어 PowerGraph는 전체 108개의 CPU코어와 216GB 메모리를 포함하는 9대의 머신 클러스터로도 단지 0.1 billion 노드의 UK 그래프 데이터를 실행하는데 실패한다.
요즘 SSD(solid state disk)는 보조기억장치로써 소비자와 기업 모두에서 널리 쓰이고 있고, PCI-E 인터페이스에 기반을 둔 더 많은 용량을 가진 SSD도 서버(Fusion-ios, Intels)에서 노트북(Apples, Sonys, Samsungs)까지 빠르게 적용되고 있다. SSD는 마그네틱 하드 디스크보다 랜덤 읽기/쓰기와 순차 읽기/쓰기 모두에서 더 빠른 성능을 보인다. HDD와 SSD를 포함한 대부분의 보조 저장 장치는 랜덤하게 읽기/쓰기 성능과 비교해서 더 빠른 순차 읽기/쓰기 성능을 제공하지만, 실제로 순차 읽기/쓰기를 최대한 활용하여 그래프 질의를 처리하는 방법에 대해서는 연구가 충분히 이루어져 있지 않다.
따라서, 본 발명은 상기한 문제점을 해결하기 위한 것으로, 본 발명의 목적은, 메모리에 적재되지 않은 크기의 큰 그래프도 디스크 기반 순차 지향 병렬 처리 접근 방식을 사용하여 빠르고 확장성 있는 그래프를 처리할 수 있도록 한 디스크 기반의 연결요소 그래프 질의 처리방법을 제공함에 있다.
상기한 목적을 달성하기 위한 본 발명에 따른 초고속 디스크 기반의 연결요소 그래프 질의 처리방법은, 상기 초고속 디스크와 메모리데 대한 접근 전략 중 속성 데이터와 그래프 위상 데이터 모두에 대하여 순차 디스크 접근 전략과 랜덤 메모리 접근 전략을 사용하여 디스크 기반의 그래프로 표현하여 연결 요소 그래프 질의를 처리한다.
상기 속성 데이터는, 컴포넌트 ID 벡터, 디스조인트 셋 벡터, 비지티드 비트맵 어레이로 구성된 인- 메모리 구조로 이루어져 있다.
상기 연결 요소 그래프 질의를 처리는 UNION-FIND 연산을 이용하여 처리한다.
상기 UNION-FIND 연산은, 그래프 위상 데이터베이스를 전체적으로 한번만 스캔하여 UNION과 FIND 연산을 사용하여 연결 요소 처리를 수행한다.
상기 UNION-FIND 연산을 사용하여 연결 요소의 처리는, 처리가 필요하지 않은 부분인 백워드 엣지의 확인을 생략함으로써 낭비되는 데이터 접근의 양을 줄이는 백워드 엣지(backward edges) 생략 기법, 그래프 순회 초기 단계에서 많은 CPU 코어가 활성화되지 않고 유휴 상태로 존재하여 발생하는 성능 저하 문제를 해결하는 여러 개의 시작점을 두는 기법, 무작위적인 그래프 위상정보로 인한 CPU 캐시 미스가 발생시키는 속도 저하를 해결하는 페이지 수준 캐시 친화적 처리 기법을 포함한다.
상기 디스크 기반의 그래프로 표현은, 초고속 디스크에서 그래프의 위상 데이터를 순차적으로 접근 가능하도록 슬롯티드 페이지 구조로 사용한다.
상기 초고속 디스크로부터 그래프 데이터를 순차 접근 전략 사용한 연결 요소 질의의 처리는, chunk-by-chunk 단위로 오직 한번 씩만 스캔하여 첫 번째 chunk의 페이지를 불러온 후, 두 번째 페이지를 비동기적으로 로딩하여 처리한다.
상기 처리가 필요하지 않은 부분인 백워드 엣지의 확인을 생략함으로써 낭비되는 데이터 접근의 양을 줄이는 백워드 엣지(backward edges) 생략 기법은, 그래프 데이터베이스를 순차적으로 스캔하는 동안에 이전 chunk의 정보로부터 다음 chunk에서 유용한 정보를 전파함으로써 개별적으로 불필요게 생성될 수 있는 디스조인트 셋을 방지한다.
상기 그래프 순회 초기 단계에서 많은 CPU 코어가 활성화되지 않고 유휴 상태로 존재하여 발생하는 성능 저하를 해결하는 여러 개의 시작점을 두는 기법은, 하나의 시작점을 가지고 BFS등의 그래프 탬색을 하는 경우, 그래프 탐색의 첫 번째 단계 동안에 병렬로 실행될 충분한 후손이 만들어지지 않아 초기 단계에서 완전하게 CPU코어를 활용하지 못하는 것을 방지하기 위해 여러 개의 탐색 시작 모드를 구성한다.
상기 무작위적인 그래프 위상정보로 인한 CPU 캐시 미스가 발생시키는 속도 저하를 해결하는 페이지 수준 캐시 친화적 처리 기법은, 그래프 데이터의 무작위적인 위상 정보로부터의 캐시 미스로 인해 병렬 처리 성능저하를 방지하기 위해 각 쓰레드는 오직 자신이 담당하는 페이지 집합내에서만 순회를 하되, 해당 영역을 벗어나는 순회에 대해서는 다른 쓰레드에게 순회 권한을 넘겨서 계속 진행한다.
본 발명에 따르면, 종래의 그래프 처리 시스템들이 처리하지 못했던 큰 규모의 그래프를 위한 연결 요소 계산을 단 하나의 PC에서 효과적으로 처리할 수 있다. 즉, 디스크 기반의 순차접근 병렬 처리(DSP; Disk-based Sequential access-oriented parallel processing) 접근 방법을 사용하여 높은 I/O 성능과 병렬 계산을 이용한 효율적인 연결요소 질의를 처리할 수 있다.
또한, 본 발명에 따르면, 단일 컴퓨터 기반의 방법이기 때문에 분산 처리 방법이 가진 과도한 통신비용 문제를 완전히 제거할 수 있다. 즉, 종래의 단일 컴퓨터 기반의 시스템을 사용할 경우 가장 큰 문제는 그래프 데이터를 메모리에 다 적재할 수 없다는 것인데, 이 문제를 해결하기 위해 본 발명은 SSD에 그래프 데이터를 저장하는 디스크 기반의 방법을 사용하고, 또한 필요에 따라 SSD를 여러개 장착함으로써 용량을 수 테라바이트 이상 확장할 수 있기 때문에, 메모리 기반 분산처리 방법이 가진 치명적인 메모리 용량 한계의 단점을 가지지 않는다.
또한, 본 발명에 따르면, SSD 기반의 단일 컴퓨터 방법이 해결해야 하는 가장 큰 어려운 문제는 컴퓨터 한 대의 디스크 I/O 성능과 계산 성능으로 목표하는 고성능을 달성해야 하는 것이다. 따라서, 본 발명은 디스크 기반 순차 접근 병렬 처리라는 새로운 그래프 처리 접근 방법을 사용하여 연결요소 질의를 처리한다.
또한, 본 발명에 따르면, SSD기반의 빠른 순차 I/O 성능에 맞춰 CPU의 계산을 초고속으로 수행하고 계산 병목이 발생하지 않기 위해 접근이 필요 없는 인접 리스트를 건너뛰는 기법, CPU의 모든 코어를 100%가깝게 사용하도록 여러 개의 시작점을 두는 기법, 그래프 탐색 시 슬롯 페이지 수준에서 캐시 친화적인 병렬 처리를 수행하는 기법을 사용하여 높은 연산 처리 성능을 제공한다. 즉, 본 발명은 큰 규모의 그래프를 위한 연결요소 계산에 대해서 디스크 순차 접근을 최대한 활용하여 높은 I/O 성능과, 이와 동시에 병렬처리를 최대한 활용하여 높은 연산 처리 성능을 가지는 것이다.
도 1은 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 규모 그래프를 처리하는 연결 요소 그래프 질의 처리 시스템을 구현하기 위한 하드웨어 구성을 나타낸 도면.
도 2는 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 그래프를 위한 연결 요소 그래프 질의 처리 시스템에서 사용되는 그래프 데이터 구조인 슬롯티드 페이지 구조(slotted paged structure)의 구성을 나타낸 도면.
도 3은 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 그래프를 위한 연결 요소 그래프 질의 처리 시스템에서 사용되는 장치 메모리에 적재되는 인-메모리 데이터 구조와 UNION 연산 이후의 데이터 구조 변경점을 나타내는 도면.
도 4는 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 그래프를 위한 연결 요소 그래프 질의 처리 시스템의 데이터 지역성(data locality)를 보전하는 병렬 BFS 그래프 탐색의 구성을 나타낸 도면.
도 5는 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 그래프를 위한 연결 요소 그래프 질의 처리 시스템의 전체적인 동작 플로우챠트를 나타낸 도면.
도 6은 도 5에 도시된 S508 단계의 구체적인 동작 플로우챠트를 나타낸 도면.
도 7은 도 6에 도시된 S607 단계의 상세 동작 플로우챠트를 나타낸 도면.
본 발명의 전술한 목적 및 그 이외의 목적과 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다.
그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 이하의 실시예들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 목적, 구성 및 효과를 용이하게 알려주기 위해 제공되는 것일 뿐으로서, 본 발명의 권리범위는 청구항의 기재에 의해 정의된다.
한편, 본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 "포함한다(comprises)" 및/또는 "포함하는(comprising)"은 언급된 구성소자, 단계, 동작 및/또는 소자가 하나 이상의 다른 구성소자, 단계, 동작 및/또는 소자의 존재 또는 추가됨을 배제하지 않는다.
이하, 본 발명에 따른 디스크 기반의 연결요소 그래프 질의 처리방법에 대하여 첨부한 도면을 참조하여 상세하게 설명하기로 한다.
도 1은 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 연결 요소 그래프 질의 처리 시스템을 구현하기 위한 하드웨어 구성을 나타낸 도면이다.
도 1에 도시된 바와 같이 초고속 디스크(SSD)를 이용한 연결 요소 그래프 질의 처리 시스템은, 하드웨어 구성 측면 및 시스템 구성 측면에서 다중의 CPUcore(102), 메인 메모리(103), 순차 접근 관리자(Sequential Access Manager)(109) 및 SSD(Solid States Disk)(111)를 포함한다.
메인 메모리(103)는 연결 요소를 저장하는 컴포넌트 ID 벡터(Component ID Vector) 공간(106), 연결요소 질의 처리에 핵심적으로 사용되는 디스조인트(Disjoint)한 셋(Set)을 저장하는 디스조인트 셋 벡터(Disjoint Set Vector) 공간(107), 대규모 병렬화에서 빠르고 효율적인 BFS 탐색을 도와주는 방문 유무 정보를 저장하는 비지티드 비트맵 어레이(Visited Bitmap Array) 공간(108)과 메모리 연산을 위해 청크(Chunk) 단위로 디스크에서 위상 정보를 읽어오는 청크 버퍼 풀(Chunk Buffer Pool)(104)을 포함한다.
SSD(111)는 메인 메모리(103)의 용량보다 큰 규모의 그래프 데이터의 위상 데이터를 다수의 슬롯티드 페이지(112) 형태로 저장하고 있다.
순차 접근 관리자(Sequential Access Manager)(109)는 저장되어 있는 각각의 슬로티드 페이지(112)들을 순차 접근하여 PCI-E 버스 인터페이스(PCI-E Bus Interface)(110)를 통해 복수의 페이지로 구성된 chunk 단위로 순차적인 디스크 접근을 통해 비동기적으로 메인 메모리(103)의 chunk 버퍼의 버퍼 페이지 풀(105)에 저장한다.
DSP-CC 시스템(101)은 chunk를 처리할 때 각 노드의 모든 인접 리스트를 읽을 필요 없이 처리가 필요 없는 부분을 건너뛰는 최적화 기법을 위한 백워드 생략 최적화기(Skipping Backward Optimizer), BFS와 같은 그래프 순회 기반으로 수행되는 연결 요소 계산의 초기단계의 부족한 병렬화 처리를 개선하기 위한 다수의 시작점을 사용한 병렬 시스템 관리자(Parallel System Manager), 페이지 수준의 케시 친화적인 병렬 처리를 통해 무작위성 정보 접근을 피하고 CPU 캐시를 최대한 활용함과 동시에 페이지 수준의 그래프 순회를 통해 병렬 처리시 발생하는 작업량 편중(skew) 문제를 해결하는 페이지수준 케시 관리자(Page-level Cache Manager), 병렬 처리 단계에서 여러 개의 쓰레드에서 동시에 하나의 데이터 구조에 접근하고 수정할 때 발생할 수 있는 경합 조건(Race Condition)을 방지하고 쓰레드-세이프(Thread-Safe)하게 관리하는 동시성 제어기(Concurrency Controller)를 포함한다.
도 2는 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 그래프를 위한 연결 요소 그래프 질의 처리 시스템에서 사용되는 그래프 데이터 구조인 슬롯티드 페이지 구조(Slotted Paged Structure)를 나타낸 도면이다.
도 2에 도시된 바와 같이, 그래프 G에 대한 chunk 표현을 슬로티드 페이지로 나타내는 경우 하나의 chunk는 복수의 페이지로 구성될 수 있다. 즉, 페이지 0과 페이지 1(p0, p1)은 같은 chunk에 포함되어 있으며, 노드 0(v0), 노드 1(v1) 및 노드 2(v2)는 노드 8(v8)에 비해 상대적으로 적은 인접 노드를 가지고 있다. 이러한 노드들은 도 2(b)와 같은 작은 페이지에 저장된다.
한편, 노드 8(v8)의 경우 상대적으로 많은 인접 노드를 가지고 있고, 이러한 노드는 하나의 페이지에 저장할 수 없는 경우 도 2(c)와 같이 여러 개의 큰 페이지에 저장된다.
도 2(b)와 같은 작은 페이지는 레코드와 슬롯을 포함한다. 레코드는 페이지의 앞에서부터 저장되며 정점에 대한 인접 노드의 개수(201)와 인접 노드에 대한 정보(202)을 포함한다.
슬롯은 페이지의 뒤에서부터 저장되며 정점 ID(203)와 정점에 대한 레코드 리스트의 처음을 가리키는 오프셋(204)을 포함한다. 작은 페이지의 구조와 큰 페이지의 구조는 거의 유사하며, 도 2(c)와 같은 큰 페이지는 페이지 마다 큰 페이지에 해당하는 노드 ID를 포함하고 있다.
도 3은 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 그래프를 위한 연결 요소 그래프 질의 처리 시스템에서 사용되는 장치 메모리에 적재되는 인-메모리 데이터 구조와 UNION 연산 이후의 데이터 구조 변경 점을 나타내는 도면이다.
도 3(a)는 그래프 G에 대한 chunk단위의 처리를 수행하면 첫 chunk에 속하는 페이지 0과 페이지 1(p0, p1)에 대하여 프로세싱 후의 인-메모리 구조이고, 도 3(b)는 다음 chunk를 처리한 경우 페이지 2와 페이지 3의 인-메모리 구조이다.
도 3(a)에 도시된 바와 같이, 페이지 0과 페이지 1에 대한 프로세싱 후의 인 메모리 구조는 연결 요소 계산을 위한 연결요소 ID들의 벡터 구조(cidVec)(302), 각각의 disjoint set을 저장하는 벡터 구조(dsVec)의 component id를 나타내는 cid부분(303)과 disjoint set의 부모를 가리키는 parent부분(304), 노드의 탐색 유무를 표현하는 비트맵 배열 구조 (visited)(305)를 포함한다. 즉, 도 3(a)와 같이 그래프 탐색에 기반을 두고 연결 요소를 찾기 때문에, 모든 노드에 대해서 새로운 디스조인트 셋(Disjoint Set)을 생성하지 않고 그래프 탐색 동안에 노드를 같은 요소 집합으로 할당한다.
도 3(a)는 chunk 페이지 0, 1(p0, p1)을 처리한 후에 상태이고, 도 3(b)는 두 번째 chunk 페이지 2, 3(p2, p3)를 처리한 후에 상태이다. 노드 0(v0)에 대한 연결 요소 처리는 첫 번째 디스조인트 셋인 cidVec[0]을 생성하고, 생성된 ID를 v1과 v8에 전파한다. v2에 대한 두 번째 디스조인트 셋인 cidVec[1]을 생성하고, 생성된 ID를 v4과 v8에 전파를 시도한다. 여기서 cidVec[8]은 이미 0으로 지정되었기 때문에, UNION(dsVec[0], dsVec[1])을 수행한다. union-by-index 기술에 따라, dsVec[1].present는 dsVec[0]을 가리키게 된다. v3에 대한 연결 요소 처리는 disjoint set인 cidVec[2]을 생성하고, 생성된 ID를 v6에 전파한다(302, 303, 304, 305).
도 3(b)에서 v5에 대한 연결 요소 처리는 네 번째 디스조인트 셋인 cidVec[3]을 생성하고, 생성된 ID를 v8에 지정하려고 할 때, UNION(dsVec[3], dsVec[0])이 수행된다. 이와 마찬가지로 v7에 대한 연결 요소 처리는 다섯 번째 disjoint set인 cidVec[4]을 생성하고, UNION(dsVec[4], dsVec[2])을 수행한다. UNION 연산들로 인해서, dsVec[0], dsVec[1], dsVec[3]은 루트가 0인 하나의 disjoint set을 형성하고, dsVec[2], dsVec[4]는 루트가 2인 다른 disjoint set을 형성한다(307, 308, 309, 310).
본 발명에서 DSP-CC 시스템(101)은 그래프 데이터베이스를 순차적으로 스캔하는 동안에 질의 처리를 최적화한다. DSP-CC 시스템(101)은 현재 처리할 chunk로부터 다음에 처리되는 chunk로 component ID들을 전파한다. x가 NULL이 아닌 연결요소 ID를 가지고 있는 인접 노드 y가 있을 때에, x와 y는 결국엔 UNION되더라도 새로운 디스조인트 셋을 생성한다. 디스조인트 셋을 이런 방식으로 생성하는 것은 메모리 공간을 차지할 뿐만 아니라 필요 없는 UNION 연산에 대한 수행이 필요하기 때문에 이러한 문제를 해결하기 위해서, 이전의 chunk들로부터 전파된 연결요소 ID부터 시작하는 대신에 아직 방문하지 않은 노드부터 그래프 탐색을 시작한다.
연결요소를 계산하는 동안에 많은 수의 필요 없게 간선을 확인하는 것을 줄일 수 있는 백워드 엣지 생략(Backward Edge Skipping)라는 기법을 사용한다. 방향성이 없는 그래프(Undirected Graph)에 대해서, 연결요소 계산은 임의적인 방향으로 노드에서 노드로 그래프 탐색이 필요하다. 간선 (x, y)에 대해 x에서 y로 그래프 탐색할 수도 있고, 반대로도 될 수 있다. BFS같은 그래프 탐색의 계산 작업의 많은 부분을 차지하는 곳은 이웃 노드가 이미 방문되었는지를 보기 위해서 현재 앞쪽 노드의 엣지를 확인하는 부분이다. 낭비되는 확인 시도를 제거함으로써 데이터 접근의 양을 줄일 수 있고, 이는 연결요소 계산의 전반적인 성능을 향상시킬 수 있다. 그래프 데이터베이스가 P0,P1,,Pm -1과같이 m개의 파티션으로 나누어져 있다고 가정하고, 이때 i < j에 대해서, Pi안에 있는 모든 노드 ID들은 Pj에 있는 어떤 노드들 보다 작다고 하면, x∈Pi와 y∈Pj(i > j)를 만족하는 간선 (x,y)를 백워드 엣지라고 정의 한다. 모든 백워드 엣지는 이전 chunk로부터 전파되어 처리를 확인했기 때문에, 아무 문제없이 백워드 엣지를 확인하는 것을 생략해서 성능을 향상시킬 수 있다.
본 발명은 동시에 모든 CPU 코어(102)를 활용하도록 한다. 하나의 시작점으로부터 그래프 탐색을 하는 방법은 그래프 탐색의 첫 번째 단계 동안에 병렬로 실행될 충분한 후손(Descendant)을 가지지 못할 수도 있다. 그러므로 이와 같은 접근방법은 각각의 BFS를 통한 연결요소 처리 중에 초기 단계에서 완전하게 CPU 코어(102)를 활용하지 못하기 때문에 성능 저하가 발생하게 된다. 이러한 문제를 해결하기 위해서, 여러 개의 쓰레드가 BFS 탐색을 놀지 않고 즉시 시작할 수 있도록 여러 개의 시작점(Multiple Starting Point)을 사용하여 연결 요소 처리 초기 단계를 수행한다.
본 발명에서는 큐(Queue) 구조 대신에, BFS 탐색의 다음 단계에 방문하는 노드를 표현하기 위한 비트맵 구조를 사용한다. 큐 구조는 동시 실행되는 여러 개의 쓰레드를 위해서는 효율적인 구조가 아니다.
본 발명에서 페이지 수준의 캐시 친화적 처리 기법은 그래프의 비정형성으로 인해 발생하는 쓰레드간의 작업량을 균등하게 하고, 캐시 미스 횟수를 줄이도록 한다. 본 발명에서 프레임워크는 메모리로 각각의 chunk의 모든 페이지를 로드해서 여러 개의 쓰레드가 페이지들을 처리한다. 그러나 이런 접근방법은 작업 불균형 문제와 캐시 미스 문제를 발생시킨다. 기존의 인-메모리 알고리즘에서 처리하는 단위는 노드나 간선이고, 실제 그래프의 구조는 본질적으로 불규칙적이다. 그러므로 어떤 노드부터 쓰레드가 탐색을 시작하는가에 따라서, 각각의 쓰레드가 다른 양의 노드들과 간선들을 처리한다. 이는 실제 그래프들에서 여러 코어들을 통해서 그래프 탐색을 작업량을 균등하게 만드는 것은 어렵다. 작업 불균등 문제뿐만 아니라, 각각의 쓰레드는 그래프 탐색 동안에 다른 메모리 위치를 임의대로 접근하고, 따라서 성능은 많은 캐시 미스로 인해 매우 좋지 않게 되며, 쓰레드의 수가 많아질 때마다 더 많이 성능저하가 된다.
이러한 위의 성능 문제를 해결하기 위하여, 본 발명은 페이지 수준으로 그래프 데이터를 저장하는 본 발명의 특성을 최대한 잘 활용한다. 페이지의 수준은 간선(또는 노드)의 크기보다 훨씬 크다. 모든 페이지는 거의 비슷한 양의 간선을 가지고 있다. 그래서 만약 우리가 균등하게 쓰레드 사이의 페이지를 분배한다면, 각각의 쓰레드는 간선 개수에 관해서 비슷한 양의 작업을 처리할 것이다. 더욱이 데이터 지역성(Data Locality)를 향상시키고 캐시 미스 횟수를 줄이기 위해서 순차적이고 반복적인 방법으로 메인 메모리에 그래프 페이지를 처리한다. 한번 chunk가 메모리로 올라가면, 각각 쓰레드는 한 번에 하나씩 순차적으로 페이지에 접근하고, 각각의 쓰레드는 다른 페이지에 접근하지 않고 가능한 많이 각각의 페이지 안의 노드를 처리한다. 만약 모든 쓰레드가 페이지 처리를 끝마쳤다면, 한 라운드가 끝난다. 여전히 아직 방문하지 않은 노드가 있고, 이러한 남은 노드를 처리하기 위해 모든 노드가 실행될 때까지 다음 단계를 반복적으로 수행한다. 이러한 처리 계획은 메모리로 랜덤 접근을 발생시키지 않기 때문에, 이는 캐시 미스로 인한 성능 감소를 줄일 수 있다.
도 4는 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 그래프를 위한 연결 요소 그래프 질의 처리 시스템의 데이터 지역성(Data Locality)를 보전하는 병렬 BFS 그래프 탐색의 구성을 나타내는 도면이다.
도 4(a)에 도시된 예제 그래프는 페이지 p0,p1,p2,p3가 각각 노드 v0,v1,v2, v3,v4,v5, v6,v7,v8, v9,v10을 포함한다. 도 4(b)와 같이 두 개의 쓰레드가 있다고 가정하고, 쓰레드#1은 페이지 p0,p1를 처리하고, 쓰레드#2는 페이지 p2,p3를 처리한다. 여기서, 여러개의 시작점을 두는 기법(Multiple Starting Point)을 통해 시작점 노드는 v0,v3,v6,v9이다.
BFS 그래프 탐색의 첫 번째 단계(level#1)에서 쓰레드#1은 v7와 v1을 쓰레드#2는 v4와 v10을 탐색의 다음 단계에 방문하기 위한 노드로써 지정한다.
두 번째 단계(level#2)에서, 쓰레드#1은 v7을 포함하는 v4를 접근하지 않는다. 대신에 쓰레드#1은 자신의 페이지 p0,p1안의 노드 v1,v4에 계속 접근한다. v7이후 그래프 탐색은 쓰레드#2가 처리한다.
세 번째 단계(level#3)에서, 쓰레드#1은 다시 p1안에 있는 v5부터 탐색을 확인하면, 탐색할 노드가 더 이상 없기 때문에 연결 요소 계산이 완료된다.
도 5는 본 발명의 실시예에 따른 초고속 디스크(SSD)를 이용한 큰 그래프를 위한 연결 요소 그래프 질의 처리 방법에 대한 동작 플로우챠트를 나타낸 도면이다.
도 5에 도시된 바와 같이, 먼저, DSP-CC 시스템은 그래프 데이터베이스를 chunk 단위로 오직 한번 씩만 스캔한다(S501).
이어, 변수 cidIdx를 이용하여 새로운 연결요소 ID를 생성한다(S502).
그리고, DSP-CC 시스템은 cidVec과 방문된(visited) 주요 인-메모리 구조를 할당한다(S503).
이어, 그래프 G를 위한 디스크 페이지들을 chunk 단위로 읽어온다(S504).
그리고, 모든 청크(Chunk)에 대한 상기 동작이 종료되었는지를 판단하고(S505), 판단 결과, 청크가 종료되지 않은 경우 빠른 SSD의 I/O 성능을 활용하기 위한 더블 버퍼링을 사용하고 비동기적으로 다음 페이지들이 담긴 다음 chunk를 읽고(S506), 페이지로부터 vmin, vmax, pmin, pmax값을 가져온다(S507).
이어, 하나의 chunk 단위의 부분적 연결 요소 질의 처리를 수행하기 위해서 partitialCC 프로세스를 수행하고(S508), 모든 chunk를 다 읽을 때까지 상기 동작을 반복적으로 수행한다.
도 6은 도 5에 도시된 S508 단계의 동작에 대한 상세 동작 플로우챠트를 나타낸 도면이다.
도 6에 도시된 partitialCC 프로세스는 chunk by chunk 단위로 그래프 데이터베이스를 비동기적으로 읽는 동안에 실행된다. 그리고, 도 6의 PartitialCC 프로세스는 연결요소 ID를 전파하는 기법과 여러 개의 시작점을 보내는 기법을 구현하여, 병렬로 주어진 chunk를 처리한다.
좀 더 구체적으로 살펴보면, 도 6에 도시된 바와 같이, 현재 chunk가 방문하는 노드들에 대한 벡터인 currVisitV와 currVisitP를 할당한다(S602).
이어, 현재 chunk가 첫 번째 chunk인지를 판단한다(S603).
판단 결과, 첫 번째 chunk가 아닌 경우, 연결요소 ID를 전파하기 위해, 2가지 진행단계로 구성된다. 첫 번째 진행 단계는, 기존의 컴포넌트 ID들을 전파하고(S604), 두 번째 진행 단계는 새로운 컴포넌트 ID들을 생성하고 생성된 컴포넌트 ID들을 전파한다(S606).
상기 첫 번째 진행단계에서 전파된 노드들을 위한 비트맵 어레이를 지정하고, 비트맵 어레이를 pageLevelCC 프로세스로 넘긴다(S605). 두 번째 진행단계에서는 새로운 연결요소 ID들을 만드는 동안에 비트맵 어레이를 지정하고, 비트맵 어레이를 넘긴다(S606).
상기 S603 단계에서, 첫 번째 chunk인 경우, 상기한 진행 단계 중 두 번째 진행단계 즉, S606 단계만을 수행한다.
만약 현재 chunk안의 모든 노드가 첫 번째 진행단계를 통하여 존재하는 연결요소 ID들로 지정이 된다면, 두 번째 진행단계에서는 아무것도 하지 않는다. 여러 개의 시작점으로 그래프 탐색을 시작하기 위해, 이 프로세스는 페이지들과 방문된 노드들을 수집하고(S604, S606), 각 진행단계에서 단 한 번의 pageLevelCC를 실행한다(S605, S607).
도 7은 도 6에 도시된 S605 단계와 S607 단계에서의 pageLevel 프로세스에 대한 상세 동작 플로우챠트를 나타낸 도면이다.
도 7에서 pageLevelCC 프로세스는 백워드 엣지(Backward Edges) 생략 기법과 페이지-수준의 캐시 친화적인 병렬 처리 기법을 사용하여 여러 개의 노드를 시작점으로부터 부분적으로 연결 요소 질의 처리를 한다.
구체적으로 살펴보면, pageLevelCC 프로세스는, 단계별 BFS 탐색을 위해 두 추가적인 비트맵 배열인 nextVisitP와 nextVisitV를 할당한다(S702), currVisitP와 currVistV의 두 비트맵 배열과 교환하는데 사용된다(S705).
그리고, 상기 pageLevelCC 프로세스는 BFS 그래프 탐색이 끝나는 것을 isFinished으로 알 수 있고(S703,S704,S713), BFS 그래프 탐색을 기반으로 페이지의 연결 요소 처리를 페이지-수준 병렬화를 통해 작업한다(S705~S714).
페이지-수준 병렬 처리를 위해 pageLevelCC 프로세스는 두 가지 단계로 BFS 탐색을 처리한다.
첫 번째 단계는, 쓰레드로 currVisitP안에 표시된 유효한 페이지를 분배하고(S705), 두 번째 단계는, currVisitV 안에 표시된 유효한 노드들로부터 각 쓰레드의 탐색을 한다(S706).
추가적으로, backward edges 생략에 의해서, 이 함수는 coexisting이나 forward edges만을 접근한다(S707).
그리고, cidVec의 원소로 FIND를 호출함으로써 얻어진 컴포넌트 ID들을 할당할 때, 추가적인 경합 조건을 고려하여 atomic한 연산을 하는 CAS 연산과 lock-free한 UNION 연산을 사용한다(S708, S709).
한편, pageLevelCC 프로세스는 level 단계의 BFS 그래프 탐색을 위하여 추가적인 nextVisitP와 nextVisitV를 이용하고, 현재 방문한 페이지와 노드를 기록하는 두 벡터 currVisitP와 currVisitV와 교환(Swap)하기 위하여 사용된다(S710, S711, S712, S713, S714).
본 발명에 따른 디스크 기반의 연결요소 그래프 질의 처리방법을 실시 예에 따라 설명하였지만, 본 발명의 범위는 특정 실시 예에 한정되는 것은 아니며, 본 발명과 관련하여 통상의 지식을 가진 자에게 자명한 범위 내에서 여러 가지의 대안, 수정 및 변경하여 실시할 수 있다.
따라서, 본 발명에 기재된 실시 예 및 첨부된 도면들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시 예 및 첨부된 도면에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리 범위에 포함되는 것으로 해석되어야 할 것이다.
101 : DSP-CC 시스템
102 : CPU 코어
103 : 메인 메모리
104 : 청크 버퍼 풀(Chunk Buffer Pool)
105 : 버퍼 페이지 풀
106 : 컴포넌트 ID 벡터
107 : 디스조인트 셋 벡터
108 : 비지티드 비트맵 어레이
109 : 순차 접근 관리자
110 : PCI-E 버스 인터페이스
111 : SSD(Solid States Disk)
112 : 슬로티드 페이지

Claims (10)

  1. 초고속 디스크 기반의 연결요소 그래프 질의 처리방법에 있어서,
    상기 초고속 디스크와 메모리데 대한 접근 전략 중 속성 데이터와 그래프 위상 데이터 모두에 대하여 순차 디스크 접근 전략과 랜덤 메모리 접근 전략을 사용하여 디스크 기반의 그래프로 표현하여 연결 요소 그래프 질의를 처리하는 것인 초고속 디스크 기반의 연결요소 그래프 질의 처리방법.
  2. 제1항에 있어서,
    상기 속성 데이터는, 컴포넌트 ID 벡터, 디스조인트 셋 벡터, 비지티드 비트맵 어레이로 구성된 인- 메모리 구조로 이루어지는 것인 초고속 디스크 기반의 연결 요소 그래프 질의 처리 방법.
  3. 제1항에 있어서,
    상기 연결 요소 그래프 질의를 처리는 UNION-FIND 연산을 이용하여 처리하는 것인 초고속 디스크 기반의 연결 요소 그래프 질의 처리 방법.
  4. 제3항에 있어서,
    상기 UNION-FIND 연산은,
    그래프 위상 데이터베이스를 전체적으로 한번만 스캔하여 UNION과 FIND 연산을 사용하여 연결 요소 처리를 수행하는 것인 초고속 디스크 기반의 연결 요소 그래프 질의 처리 방법.
  5. 제4항에 있어서,
    상기 UNION-FIND 연산을 사용하여 연결 요소의 처리는,
    처리가 필요하지 않은 부분인 백워드 엣지의 확인을 생략함으로써 낭비되는 데이터 접근의 양을 줄이는 백워드 엣지(backward edges) 생략 기법, 그래프 순회 초기 단계에서 많은 CPU 코어가 활성화되지 않고 유휴 상태로 존재하는 성능 저하 문제를 해결하는 여러 개의 시작점을 두는 기법, 무작위적인 그래프 위상정보로 인한 CPU 캐시 미스가 발생시키는 속도 저하를 해결하는 페이지 수준 캐시 친화적 처리 기법을 포함하는 것인 초고속 디스크 기반의 연결 요소 그래프 질의 처리 방법.
  6. 제1항에 있어서,
    디스크 기반의 그래프로 표현은, 초고속 디스크에서 그래프의 위상 데이터를 순차적으로 접근 가능하도록 슬롯티드 페이지 구조로 사용하는 것인 초고속 디스크 기반으로 연결 요소 그래프 질의 처리방법.
  7. 제1항에 있어서,
    상기 초고속 디스크로부터 그래프 데이터를 순차 접근 전략 사용한 연결 요소 질의의 처리는, chunk-by-chunk 단위로 오직 한번 씩만 스캔하여 첫 번째 chunk의 페이지를 불러온 후, 두 번째 페이지를 비동기적으로 로딩하여 처리하는 것인 초고속 디스크 기반으로 연결 요소 그래프 질의 처리방법.
  8. 제5항에 있어서,
    상기 처리가 필요하지 않은 부분인 백워드 엣지의 확인을 생략함으로써 낭비되는 데이터 접근의 양을 줄이는 백워드 엣지(backward edges) 생략 기법은, 그래프 데이터베이스를 순차적으로 스캔하는 동안에 이전 chunk의 정보로부터 다음 chunk에서 유용한 정보를 전파함으로써 개별적으로 불필요게 생성될 수 있는 디스코인트 셋을 방지하는 것인 초고속 디스크 기반으로 연결 요소 그래프 질의 처리방법.
  9. 제5항에 있어서,
    상기 그래프 순회 초기 단계에서 많은 CPU 코어가 활성화되지 않고 유휴 상태로 존재하는 성능 저하 문제를 해결하는 여러 개의 시작점을 두는 기법은, 하나의 시작점을 가지고 BFS등의 그래프 탬색을 하는 경우, 그래프 탐색의 첫 번째 단계 동안에 병렬로 실행될 충분한 후손이 만들어지지 않아 초기 단계에서 완전하게 CPU코어를 활용하지 못하는 것을 방지하기 위해 여러 개의 탐색 시작 모드를 구성하는 것인 초고속 디스크 기반으로 연결 요소 그래프 질의 처리방법.
  10. 제5항에 있어서,
    상기 무작위적인 그래프 위상정보로 인한 CPU 캐시 미스가 발생시키는 속도 저하를 해결하는 페이지 수준 캐시 친화적 처리 기법은, 그래프 데이터의 무작위적인 위상 정보로부터의 캐시 미스로 인해 병렬 처리 성능저하를 방지하기 위해 각 쓰레드는 오직 자신이 담당하는 페이지 집합내에서만 순회를 하되, 해당 영역을 벗어나는 순회에 대해서는 다른 쓰레드에게 순회 권한을 넘겨서 계속 진행하는 것인 초고속 디스크 기반으로 연결 요소 그래프 질의 처리방법.
KR1020150050350A 2015-04-09 2015-04-09 디스크 기반의 연결요소 그래프 질의 처리방법 KR101795848B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020150050350A KR101795848B1 (ko) 2015-04-09 2015-04-09 디스크 기반의 연결요소 그래프 질의 처리방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150050350A KR101795848B1 (ko) 2015-04-09 2015-04-09 디스크 기반의 연결요소 그래프 질의 처리방법

Publications (2)

Publication Number Publication Date
KR20160121009A true KR20160121009A (ko) 2016-10-19
KR101795848B1 KR101795848B1 (ko) 2017-12-01

Family

ID=57250602

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150050350A KR101795848B1 (ko) 2015-04-09 2015-04-09 디스크 기반의 연결요소 그래프 질의 처리방법

Country Status (1)

Country Link
KR (1) KR101795848B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102108342B1 (ko) 2018-08-21 2020-05-13 재단법인대구경북과학기술원 그래프 특성을 보존하는 대규모 그래프 증폭 시스템

Also Published As

Publication number Publication date
KR101795848B1 (ko) 2017-12-01

Similar Documents

Publication Publication Date Title
Liu et al. Graphene:{Fine-Grained}{IO} Management for Graph Computing
Maass et al. Mosaic: Processing a trillion-edge graph on a single machine
Kim et al. GTS: A fast and scalable graph processing method based on streaming topology to GPUs
Mullesgaard et al. Efficient skyline computation in MapReduce
Zhang et al. Efficient graph computation on hybrid CPU and GPU systems
Bisson et al. Parallel distributed breadth first search on the Kepler architecture
EP3443471B1 (en) Systems and methods for managing databases
US11526960B2 (en) GPU-based data join
CN105393210A (zh) 用于模拟共享存储器结构的存储器单元
Li et al. GraphIA: An in-situ accelerator for large-scale graph processing
Sun et al. GraphMP: An efficient semi-external-memory big graph processing system on a single machine
Zhou et al. Gas: A heterogeneous memory architecture for graph processing
Song et al. Rethinking graph data placement for graph neural network training on multiple GPUs
Nouri et al. GPU-based parallel indexing for concurrent spatial query processing
US11429299B2 (en) System and method for managing conversion of low-locality data into high-locality data
Allmaier et al. Parallel graph generation algorithms for shared and distributed memory machines
Sun et al. GraphMP: I/O-efficient big graph analytics on a single commodity machine
Awad et al. Analyzing and implementing GPU hash tables
KR101795848B1 (ko) 디스크 기반의 연결요소 그래프 질의 처리방법
Bernaschi et al. An introduction to multi-GPU programming for physicists
Kim et al. DSP-CC-: I/O efficient parallel computation of connected components in billion-scale networks
Xu et al. GraphCP: an I/O-efficient concurrent graph processing framework
Haglin et al. Scalable, multithreaded, partially-in-place sorting
Ma et al. Accelerating Regular Path Queries over Graph Database with Processing-in-Memory
US20220107844A1 (en) Systems, methods, and devices for data propagation in graph processing

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant