2008.11.06

멀티코어, '개발자에게는 새로운 도전'

Paul Krill | InfoWorld

이제는 흔해진 듀얼코어, 혹은 그 이상의 멀티코어 프로세서로 인해 소프트웨어 개발자들 새로운 과제를 떠안았다. 성능을 극대화하기 위해 소프트웨어가 여러 개 코어에서 처리되도록 만들어야 하기 때문이다. 그런데 이 과제라는 것이 말로는 쉽지만 병행처리와 성능의 병목현상 가능성 등을 다루어야 하는 까다로운 작업이다.

 

툴 벤더인 커버리티(Coverity)가 후원한 최근의 IDC 설문조사에 따르면 71%의 회사들이 현재 멀티코어 하드웨어를 위한 멀티쓰레드 애플리케이션을 개발하고 있다.

 

IDC의 애널리스트인 매린다 바로우(Melinda Ballou)는 개발자들이 멀티코어 소프트웨어를 제대로 개발하기 위해서는 전사적으로 협력할 것을 권고했다.

 

그는 "개발자들은 회사 전반적으로 보다 나은 결과를 창출하고 개발뿐만 아니라 품질 관리와 변화 관리라는 프로젝트 차원도 책임진다는 개념으로 이 문제에 접근해야 한다”라고 말했다.

 

["네할렘(Nehalem) 칩은 PC를 한층 더 멀티코어의 세계로 인도할 것이다." 인포월드의 톰 예거는 네할렘이 판도를 바꿀 존재라고 설명했다.]

 

멀티코어 프로세서는 싱글코어 칩이 성능 측면에서 한계에 부딪힘으로써 그 중요성이 더해지고 있다. 전력 소모에 관한 이슈 역시 멀티코어 칩을 개발하도록 촉진하고 있다.

 

마이크로소프트 병렬 컴퓨팅 플랫폼 부문의 최고 경영자인 린 힐은“컴퓨팅 세계에서는 지난 20년이 넘는 기간 동안 클럭 속도 향상을 통해 컴퓨팅 파워를 증대시키려 해왔다"면서, 그러나 이제는 한계(전력 소모)에 부딪혔고 PC의 처리 능력을 증대시키기 위해서는 하드웨어가 변해야 할 시점이라고 지적했다.

 

실제로 하드웨어는 변화하는 중이며 이로 인해 개발자들은 자신의 애플리케이션에서 변화한 하드웨어를 적용해야 하는 짐을 지게 되었다. 개발자들은 성능을 극대화하기 위해 신기술을 배워야 하며 새로운 툴을 사용해야 한다.

 

여러 명령문을 병렬로 처리하는 멀티코어 프로세서는 싱글코어 프로세서와 다르게 동작하며, 이는 소프트웨어의 명령문들이 병렬로 처리될 수 있도록 분리되어야 함을 의미한다.

 

커버리티의 CTO인 벤 셸프는 “여러 개의 코어가 있다면 프로그램은 이 모든 코어를 사용하고 각각의 코어에서 동시에 명령문들을 실행해야 합니다” 라고 말했다.

 

멀티코어 개발 툴을 제조하는 래피드마인드의 CEO인 레이 드폴은 “소프트웨어가 여러 개의 코어에서 병렬로 실행될 수 있도록 설계된 적이 없다는 것이 문제다. 언제나 하나의 코어에서만 실행되어 왔기 때문이다”라고 말했다.

 

아줄 시스템(Azul System)의 저명한 엔지니어 클리프 클릭는 거대한 병행 프로그램에서의 이슈에 대한 기술 프레젠테이션에서 멀티쓰레드 프로그램을 작성하는 어려움에 대해 강조했다.

 

그는 “아주 어렵다. 그렇지만 처음 시작할 때는 그렇게 어려워 보이지는 않는다는 것이 문제”라고 말했다.

 

인텔, 마이크로소프트, 선 마이크로시스템과 같은 회사에서는 멀티코어에서 병렬 프로그래밍을 할 때 이를 도와주는 도구를 제공하고 있다.

 

인텔의 멀티코어 애플리케이션 개발 도구

인텔의 개발자 제품 부서의 마케팅 이사인 제임스 레인더스는 “확실히 멀티코어 소프트웨어를 개발하는 것은 어렵다. 사실 대단히 어려운 작업이다”라고 말하며 병렬의 문제는 개발에서 주요 이슈라고 강조했다.

 

그는 “병렬 프로그램을 작성할 때 프로그램을 비결정적(nondeterministic)으로 작성될 가능성, 즉 상이한 결과가 나오거나 상이한 논리 전개가 가능하게 만들기 쉽다”라고 말했다.

 

그는 또 멀티코어 애플리케이션 개발은 소프트웨어를 설계할 때 대부분의 개발자들이 알고 있는 것보다 훨씬 더 복잡한 논리 과정을 거쳐야 한다고 말하며 “프로그래머의 대다수는 이런 작업을 해 본 경험이 없으므로 이 기술의 이점을 적용할 수 있도록 도와주는 도구와 교육이 필요하다”라고 말했다.

 

인텔은 현재 이러한 패러다임에 개발자들이 좀더 잘 적응하도록 하기 위해 한 발 앞선 행보를 보이고 있다.

 

우선 인텔은 병렬 프로그래밍을 하는 C++ 프로그래머들을 돕기 위해 쓰레딩 빌딩 블록(Threading Building Blocks) 템플릿 라이브러리를 제공한다. 또 인텔 쓰레드 체커(Thread Checker)는 비결정적으로 되는 프로그래밍 오류를 찾아내며 인텔의 쓰레드 프로파일러(Thread Profiler)는 각 코어가 무슨 일을 하는 지 확인할 수 있도록 프로그램을 시각화하는 작업을 도와준다. 아울러 인텔은 공통 데이터 병렬 케이스를 위한 빌딩 블록을 제공하기 위한 코드 라이브러리 프로젝트인 Ct(C for Throughput의 약자)를 갖추고 있다.

 

레인더스는 경쟁을 피해야 하는 병렬 프로그래밍에서 동기화의 문제가 중요한 이슈라고 지적했다. 경쟁이 발생하면 병렬 환경이 적절하게 동기화되지 않으므로 결과에 영향을 미친다는 것이다. 병렬로 처리되어야 할 명령문이 서로 다른 명령이 완료되기를 기다리게 되면 실행이 끝나지 않는 프로그램 데드락(deadlock)도 발생할 수 있다고 그는 언급했다.

 

마이크로소프트의 멀티코어 애플리케이션 개발 도구

마이크로소프트 역시 병렬 컴퓨팅 노력에 동참하고 있다. 힐은 “저희 회사의 주요 애플리케이션 개발 제품에 병렬 개념을 통합할 것”이라고 말했다.

 

예를 들어 마이크로소프트사의 컨커런시 런타임(Concurrency Runtime)은 애플리케이션에 할당된 자원을 세세하게 조절할 수 있는 공통된 스케줄링 기능을 제공한다.

 

이 기술은 앞으로 출시될 비주얼 스튜디오 2010 플랫폼에 통합될 예정이며 이 플랫폼의 커뮤니티 테크놀로지 프리뷰(Community Technology Preview) 시험판에 포함되어 있다.

 

또한 프로그래밍 언어의 연장선상에서 병렬을 위한 네이티브 코드(native code)와 매니지드 코드(Managed code)가 준비되어 있다. 마이크로소프트는 이 밖에도 개발자를 위한 라이브러리와 서비스를 마련할 계획이며 통합 쿼리 기술인 링(Ling) 언어에 병렬 개념을 추가한 'PLing'을 개발하고 있다.

 

마이크로소프트는 또 컨커런시 런타임(Concurrency Runtime)을 사용하는 병렬 언어 익스텐션을 제공하고 있다.

 

썬의 멀티코어 애플리케이션 개발 도구

썬 마이크로시스템은 멀티코어 이슈를 자바 가상 머쉰을 개선한 개념으로 간주한다. 썬의 클라이언트 자바의 수석 아키텍트인 대니 코워드는 “JVM에서 전체적으로 최적화 작업이 이루어질 수 있다. 이미 일부는 이루어 놓기도 했다. 생각보다 더 많은 것을 이뤄낸 상태"라고 말했다.

 

코워드에 따르면 썬에서는 자바 애플리케이션 층이 여러 개의 코어와 여러 개의 프로세서가 가져다 줄 장점을 취할 수 있도록 애플리케이션의 프로그래밍 모델을 구축하는 함수를 지원해 왔다.

 

그는 병렬화를 이루기 위해 선에서는 가상 머신의 병렬화와 애플리케이션에서의 병렬 모델 지원이라는 두 가지 방식을 취하고 있다며, 이 병렬 모델은 다량의 데이터 처리 프로그램처럼 애플리케이션이 순차적인 작업을 많이 하는 곳에서 필요하다고 지적했다.

 

자바 플랫폼의 2004 릴리즈 표준판(Standard Edition:SE)에서는 API를 이용하여 개발자들이 막대한 양의 데이터를 처리할 수 있는 기능을 갖는 병렬 프레임워크가 포함돼 있다. 코워드는 이 프레임워크가 개발자로 하여금 하나의 태스크를 보다 작은 태스크로 자를 수 있게 함으로써 이들이 서로 다른 쓰레드에서 병렬로 실행할 수 있게 해준다고 설명했다.

 

앞으로 출시할 계획인 자바 개발자 키트 7에서는 메모리를 관리하기 위한 새로운 형식의 가비지 콜렉션를 계획하고 있으며 이는 보다 병렬적인 개념이다.

 

코워드는 자바의 병렬 가비지 콜렉터가 항상 여러 개의 코어에서 최적화될 수는 없다고 설명했다. 이 키트는 2009년 후반에 출시될 예정이며, JDK 7은 'fork'나 'join' 프레임워크와 같은 병렬 API를 지원할 것이다.

 

멀티코어 애플리케이션 개발 툴 '속속 등장'

IDC의 벨로우는 이제는 회사의 개발자들이 IDE와 어느 정도 자동화된 품질관리 도구를 사용해 멀티코어나 멀티쓰레드 애플리케이션의 개발을 하는 경우가 일반화되고 있다면서 개발자들은 경험이 축적될수록 더 많은 멀티코어 지원기능을 추가하기 위해 수시로 릴리즈되는 제품을 사용하는 경향이 있다고 덧붙였다.

 

썬 근무 당시 JVM 개발에 참여했던 아줄(Azul)의 클릭에 따르면 멀티코어 문제를 해결하려고 시도한 언어가 존재한다. 그 하나가 멀티쓰레드 JVM 프로그래밍을 위한 기능을 제공하는 'Clojure'이며 또 하나는 'Java'와 호환성이 있는 'Scala'라는 언어다. 클릭은 자바와 JDK의 병렬 유틸리티와 라이브러리를 사용할 것과 브라이언 고츠의 저서인 ‘Java Concurrency in Practice’와 같은 책을 읽도록 권장한다.

 

한편 멀티코어 지향 툴을 제공하는 벤더로는 씰크 아츠(Cilk Arts), 커버리티(Coverity), 포티파이(Fortify), 래피드마인드(RapidMind)와 슈어로직(SureLogic) 등이 있다.



2008.11.06

멀티코어, '개발자에게는 새로운 도전'

Paul Krill | InfoWorld

이제는 흔해진 듀얼코어, 혹은 그 이상의 멀티코어 프로세서로 인해 소프트웨어 개발자들 새로운 과제를 떠안았다. 성능을 극대화하기 위해 소프트웨어가 여러 개 코어에서 처리되도록 만들어야 하기 때문이다. 그런데 이 과제라는 것이 말로는 쉽지만 병행처리와 성능의 병목현상 가능성 등을 다루어야 하는 까다로운 작업이다.

 

툴 벤더인 커버리티(Coverity)가 후원한 최근의 IDC 설문조사에 따르면 71%의 회사들이 현재 멀티코어 하드웨어를 위한 멀티쓰레드 애플리케이션을 개발하고 있다.

 

IDC의 애널리스트인 매린다 바로우(Melinda Ballou)는 개발자들이 멀티코어 소프트웨어를 제대로 개발하기 위해서는 전사적으로 협력할 것을 권고했다.

 

그는 "개발자들은 회사 전반적으로 보다 나은 결과를 창출하고 개발뿐만 아니라 품질 관리와 변화 관리라는 프로젝트 차원도 책임진다는 개념으로 이 문제에 접근해야 한다”라고 말했다.

 

["네할렘(Nehalem) 칩은 PC를 한층 더 멀티코어의 세계로 인도할 것이다." 인포월드의 톰 예거는 네할렘이 판도를 바꿀 존재라고 설명했다.]

 

멀티코어 프로세서는 싱글코어 칩이 성능 측면에서 한계에 부딪힘으로써 그 중요성이 더해지고 있다. 전력 소모에 관한 이슈 역시 멀티코어 칩을 개발하도록 촉진하고 있다.

 

마이크로소프트 병렬 컴퓨팅 플랫폼 부문의 최고 경영자인 린 힐은“컴퓨팅 세계에서는 지난 20년이 넘는 기간 동안 클럭 속도 향상을 통해 컴퓨팅 파워를 증대시키려 해왔다"면서, 그러나 이제는 한계(전력 소모)에 부딪혔고 PC의 처리 능력을 증대시키기 위해서는 하드웨어가 변해야 할 시점이라고 지적했다.

 

실제로 하드웨어는 변화하는 중이며 이로 인해 개발자들은 자신의 애플리케이션에서 변화한 하드웨어를 적용해야 하는 짐을 지게 되었다. 개발자들은 성능을 극대화하기 위해 신기술을 배워야 하며 새로운 툴을 사용해야 한다.

 

여러 명령문을 병렬로 처리하는 멀티코어 프로세서는 싱글코어 프로세서와 다르게 동작하며, 이는 소프트웨어의 명령문들이 병렬로 처리될 수 있도록 분리되어야 함을 의미한다.

 

커버리티의 CTO인 벤 셸프는 “여러 개의 코어가 있다면 프로그램은 이 모든 코어를 사용하고 각각의 코어에서 동시에 명령문들을 실행해야 합니다” 라고 말했다.

 

멀티코어 개발 툴을 제조하는 래피드마인드의 CEO인 레이 드폴은 “소프트웨어가 여러 개의 코어에서 병렬로 실행될 수 있도록 설계된 적이 없다는 것이 문제다. 언제나 하나의 코어에서만 실행되어 왔기 때문이다”라고 말했다.

 

아줄 시스템(Azul System)의 저명한 엔지니어 클리프 클릭는 거대한 병행 프로그램에서의 이슈에 대한 기술 프레젠테이션에서 멀티쓰레드 프로그램을 작성하는 어려움에 대해 강조했다.

 

그는 “아주 어렵다. 그렇지만 처음 시작할 때는 그렇게 어려워 보이지는 않는다는 것이 문제”라고 말했다.

 

인텔, 마이크로소프트, 선 마이크로시스템과 같은 회사에서는 멀티코어에서 병렬 프로그래밍을 할 때 이를 도와주는 도구를 제공하고 있다.

 

인텔의 멀티코어 애플리케이션 개발 도구

인텔의 개발자 제품 부서의 마케팅 이사인 제임스 레인더스는 “확실히 멀티코어 소프트웨어를 개발하는 것은 어렵다. 사실 대단히 어려운 작업이다”라고 말하며 병렬의 문제는 개발에서 주요 이슈라고 강조했다.

 

그는 “병렬 프로그램을 작성할 때 프로그램을 비결정적(nondeterministic)으로 작성될 가능성, 즉 상이한 결과가 나오거나 상이한 논리 전개가 가능하게 만들기 쉽다”라고 말했다.

 

그는 또 멀티코어 애플리케이션 개발은 소프트웨어를 설계할 때 대부분의 개발자들이 알고 있는 것보다 훨씬 더 복잡한 논리 과정을 거쳐야 한다고 말하며 “프로그래머의 대다수는 이런 작업을 해 본 경험이 없으므로 이 기술의 이점을 적용할 수 있도록 도와주는 도구와 교육이 필요하다”라고 말했다.

 

인텔은 현재 이러한 패러다임에 개발자들이 좀더 잘 적응하도록 하기 위해 한 발 앞선 행보를 보이고 있다.

 

우선 인텔은 병렬 프로그래밍을 하는 C++ 프로그래머들을 돕기 위해 쓰레딩 빌딩 블록(Threading Building Blocks) 템플릿 라이브러리를 제공한다. 또 인텔 쓰레드 체커(Thread Checker)는 비결정적으로 되는 프로그래밍 오류를 찾아내며 인텔의 쓰레드 프로파일러(Thread Profiler)는 각 코어가 무슨 일을 하는 지 확인할 수 있도록 프로그램을 시각화하는 작업을 도와준다. 아울러 인텔은 공통 데이터 병렬 케이스를 위한 빌딩 블록을 제공하기 위한 코드 라이브러리 프로젝트인 Ct(C for Throughput의 약자)를 갖추고 있다.

 

레인더스는 경쟁을 피해야 하는 병렬 프로그래밍에서 동기화의 문제가 중요한 이슈라고 지적했다. 경쟁이 발생하면 병렬 환경이 적절하게 동기화되지 않으므로 결과에 영향을 미친다는 것이다. 병렬로 처리되어야 할 명령문이 서로 다른 명령이 완료되기를 기다리게 되면 실행이 끝나지 않는 프로그램 데드락(deadlock)도 발생할 수 있다고 그는 언급했다.

 

마이크로소프트의 멀티코어 애플리케이션 개발 도구

마이크로소프트 역시 병렬 컴퓨팅 노력에 동참하고 있다. 힐은 “저희 회사의 주요 애플리케이션 개발 제품에 병렬 개념을 통합할 것”이라고 말했다.

 

예를 들어 마이크로소프트사의 컨커런시 런타임(Concurrency Runtime)은 애플리케이션에 할당된 자원을 세세하게 조절할 수 있는 공통된 스케줄링 기능을 제공한다.

 

이 기술은 앞으로 출시될 비주얼 스튜디오 2010 플랫폼에 통합될 예정이며 이 플랫폼의 커뮤니티 테크놀로지 프리뷰(Community Technology Preview) 시험판에 포함되어 있다.

 

또한 프로그래밍 언어의 연장선상에서 병렬을 위한 네이티브 코드(native code)와 매니지드 코드(Managed code)가 준비되어 있다. 마이크로소프트는 이 밖에도 개발자를 위한 라이브러리와 서비스를 마련할 계획이며 통합 쿼리 기술인 링(Ling) 언어에 병렬 개념을 추가한 'PLing'을 개발하고 있다.

 

마이크로소프트는 또 컨커런시 런타임(Concurrency Runtime)을 사용하는 병렬 언어 익스텐션을 제공하고 있다.

 

썬의 멀티코어 애플리케이션 개발 도구

썬 마이크로시스템은 멀티코어 이슈를 자바 가상 머쉰을 개선한 개념으로 간주한다. 썬의 클라이언트 자바의 수석 아키텍트인 대니 코워드는 “JVM에서 전체적으로 최적화 작업이 이루어질 수 있다. 이미 일부는 이루어 놓기도 했다. 생각보다 더 많은 것을 이뤄낸 상태"라고 말했다.

 

코워드에 따르면 썬에서는 자바 애플리케이션 층이 여러 개의 코어와 여러 개의 프로세서가 가져다 줄 장점을 취할 수 있도록 애플리케이션의 프로그래밍 모델을 구축하는 함수를 지원해 왔다.

 

그는 병렬화를 이루기 위해 선에서는 가상 머신의 병렬화와 애플리케이션에서의 병렬 모델 지원이라는 두 가지 방식을 취하고 있다며, 이 병렬 모델은 다량의 데이터 처리 프로그램처럼 애플리케이션이 순차적인 작업을 많이 하는 곳에서 필요하다고 지적했다.

 

자바 플랫폼의 2004 릴리즈 표준판(Standard Edition:SE)에서는 API를 이용하여 개발자들이 막대한 양의 데이터를 처리할 수 있는 기능을 갖는 병렬 프레임워크가 포함돼 있다. 코워드는 이 프레임워크가 개발자로 하여금 하나의 태스크를 보다 작은 태스크로 자를 수 있게 함으로써 이들이 서로 다른 쓰레드에서 병렬로 실행할 수 있게 해준다고 설명했다.

 

앞으로 출시할 계획인 자바 개발자 키트 7에서는 메모리를 관리하기 위한 새로운 형식의 가비지 콜렉션를 계획하고 있으며 이는 보다 병렬적인 개념이다.

 

코워드는 자바의 병렬 가비지 콜렉터가 항상 여러 개의 코어에서 최적화될 수는 없다고 설명했다. 이 키트는 2009년 후반에 출시될 예정이며, JDK 7은 'fork'나 'join' 프레임워크와 같은 병렬 API를 지원할 것이다.

 

멀티코어 애플리케이션 개발 툴 '속속 등장'

IDC의 벨로우는 이제는 회사의 개발자들이 IDE와 어느 정도 자동화된 품질관리 도구를 사용해 멀티코어나 멀티쓰레드 애플리케이션의 개발을 하는 경우가 일반화되고 있다면서 개발자들은 경험이 축적될수록 더 많은 멀티코어 지원기능을 추가하기 위해 수시로 릴리즈되는 제품을 사용하는 경향이 있다고 덧붙였다.

 

썬 근무 당시 JVM 개발에 참여했던 아줄(Azul)의 클릭에 따르면 멀티코어 문제를 해결하려고 시도한 언어가 존재한다. 그 하나가 멀티쓰레드 JVM 프로그래밍을 위한 기능을 제공하는 'Clojure'이며 또 하나는 'Java'와 호환성이 있는 'Scala'라는 언어다. 클릭은 자바와 JDK의 병렬 유틸리티와 라이브러리를 사용할 것과 브라이언 고츠의 저서인 ‘Java Concurrency in Practice’와 같은 책을 읽도록 권장한다.

 

한편 멀티코어 지향 툴을 제공하는 벤더로는 씰크 아츠(Cilk Arts), 커버리티(Coverity), 포티파이(Fortify), 래피드마인드(RapidMind)와 슈어로직(SureLogic) 등이 있다.



X