[GP] R에서 코드를 병렬처리 하는 방법

이 글은 N.K Dev Lab에서 작성된 글입니다.

오늘은 R 코드를 병렬 처리하는 방법에 대해서 알아보겠습니다. 병렬 처리? 많이 들어보셨던 말씀이겠지만 병렬 처리가 일단 무엇인지 먼저 알아보고 진행해보도록 하겠습니다.

Parallel Processing

병렬 처리 혹은 계산은 컴퓨터를 이용해서 동시에 많은 계산을 하도록 하는 처리 방법 중에 하나입니다. 과거에는 프로세서 성능이 하나당 코어 한 개를 가지고 있기 때문에 병렬 처리라는 것은 사실상 불가능한 것에 가까웠습니다. 하지만 이를 가능하도록 한 것은 멀티태스킹 방식이 있었기 때문이죠. 이 방법은 하나의 계산을 여러 개로 쪼개서 나눠 처리하는 방식으로 동시에 많은 계산을 한꺼번에 처리하는 것이랑은 약간의 차이가 있었습니다.

하지만 현대 프로세서에는 한 프로세서에 여러 개의 코어가 달려 있는 프로세서가 많이 나오고 있죠. 대표적으로 8개의 코어를 달린 녀석을 옥타 코어 프로세서라고도 많이 이야기를 합니다. 우리는 이러한 많은 코어를 가지고 수많은 반복 연산을 각 코어만큼 나눠 분산하는 처리 방식을 바로 병렬 처리라고 이야기 합니다.

사실 여기서 말하는 옥타 코어는 우리가 흔히 쓰는 노트북, 데스크톱 중에서 가장 성능이 높은 프로세서를 이야기 합니다. 여러분들이 사용하는 PC에 따라서 프로세서가 듀얼 코어일 수도 있고, 쿼드 코어일 수가 있습니다. 하지만 정말 오래된 컴퓨터가 아니라면 싱글 코어를 가지는 경우는 거의 없죠… 그러니 얼마든지 병렬 처리 실습을 하는 데 있어 큰 문제가 되지 않을 것이라고 판단합니다.

When should use?

그렇다면 우리는 이러한 병렬 처리를 어떨 때 사용해야 할까요? 대표적으로 저는 병렬 처리를 서버 애플리케이션과 같은 여러 명의 사용자가 반복적인 작업을 요청할 때 많이 사용했었습니다. 하지만 R을 사용해서 데이터 처리를 할 경우에는 수많은 데이터 집합체를 반복해서 처리할 때 많이 사용하죠. 데이터가 커지거나 그 양이 많아지면 반복하는 횟수도 많아지니깐요.

1
2
3
4
len <- list.files("~/images", pattern = "\\.png$")
for(i in 1:length(len)) {
...
}

우리가 흔히 이미지 처리를 하려고 자신의 스토리지에 있는 이미지를 꺼내 모든 이미지를 Grayscale 처리를 하려고 한다면 보통은 이러한 방법을 사용할 것입니다. (위의 코드는 설명을 쉽게하기 위해 반복문을 사용한 것입니다.)

1
2
3
lapply(len, function(x) {
...
})

R을 좀 사용해보신 분들이라면 이러한 방법을 사용해도 되겠지요? 반환 값은 해당 파일이 어떻게 처리되었는지에 대한 마지막 메시지를 리스트로 반환해주기 때문에 처리도 매우 유용할 것이라고 생각합니다. 하지만 여전히 똑같은 것은 같은 동작을 계속 반복한다는 것입니다.

예를 들어 저기에 있는 이미지가 100,000개 있다고 생각하여 보겠습니다. 평상 반복문은 맨 첫 이미지가 반복문의 코드를 처리하고 끝날 때까지 다음 이미지는 계속 대기 중인 상태로 머물게 됩니다. 하지만 우리는 코어를 여러 개 가지고 있기 때문에 쉬고 있는 코어를 사용한다면 더욱 일 처리가 빨라지겠죠?


이어서 읽으시려면 아래의 버튼을 클릭해주세요.

... 계속 읽기



TAGS. , ,
comments powered by Disqus

Tistory Comments 0