반응형

전체 글 237

[MPP] Introduction to OpenMP

OpenMP란 멀티쓰레드 기법을 이용하여 병렬처리를 간단히 구현하는 API입니다. C/C++ 그리고 Fortran을 지원하며 C/C++에서는 compiler directives, 라이브러리 루틴, 환경 변수로 이루어지며 실제 사용은 compiler directives로 간단히 할 수 있습니다. 내부적으로는 master쓰레드가 CPU 코어 개수만큼 쓰레드를 생성하여 특정 블럭 내의 내용을 각각의 코어가 병렬적으로 처리할 수 있게 할당하여 처리합니다. 병렬처리 자체는 루프 내의 내용 나누기, 특정 코드내의 섹션 나누기로 크게 나누어 집니다. 하루정도 간단히 사용한 경험으로는 간단한 컴파일 디렉티브 만을 가지고 하나의 함수 내의 처리를 CPU 코어 개수만큼 병렬로 가져가 성능 향상을 이룬다는 것이 굉장히 유용..

MPP Concept #3 NUMA

이 글은 Wikipeida의 Non-Uniform Memory Access를 요약하여 놓은 것입니다. Non-Uniform Memory Access or Non-Uniform Memory Architecture (NUMA)는 멀티프로세서에 사용되는 개념으로 각각의 프로세서는 자신의 로컬메모리를 가지게 되어 자신의 로컬메모리에 대한 처리가 굉장히 빠른 아키텍처를 말합니다. 이는 Symmetric Multi Processing(SMP, 멀티프로세서가 같은 메모리를 공유하는 일반적인 방식)에서 확장 되었으며 1990연대에 Unix계열의 H/W에서 채용되었습니다. Basic Concept 처음에는 메모리의 속도가 CPU의 속도보다 빨랐으나 기술 진보에 따라 이 현상의 역전되었다. CPU는 느린메모리 속도를 고속..

Multi Process Programming Concept #2

이글은 zdnet에 동영상 강의를 저의 편의성에 맞게 요약하여 놓은 글입니다. 강의자는 James Reiners (Director, Intel Corporation)으로 MPP에 등장 배경에서 부터 개념, 라이브러리 소개등을 하고 있습니다. Modern CPU Design Power Consumption -> 성능을 높이기 위하여 더 높은 전력을 요구하는데 비하여 더 적은 전력량으로 n개의 CPU를 돌릴 경우 더 높은 성능을 얻을 수 있다. 즉, 클락을 줄이는 대신에 남는 전력으로 n개의 CPU를 돌리는 것이다. i.e. overclock으로 13%의 성능 향상을 얻기 위하여 73%의 전력을 더 사용하여야 함 최근에는 전력을 더 사용해도 큰 성능 향상을 얻을 수 없음 반대로 전력을 덜 사용하고 n개의 C..

[서평] 프로그래밍 면접 이렇게 준비한다.

이 책은 미국 유명 SW회사 면접을 준비하기 위한 책인 듯 보인다. 내용적으로 크게 두가지로 나누어져 있다고 볼 수 있다. 한부분은 구직활동, 이력서 작성, 면접 등의 과정에 대한 서술과 다양한 팁이다. 그리고 다른 반쪽인 본론인 다양한 면접 문제의 종류와 샘플 그리고 풀이법으로 이루어져 있다. 이 책의 번역 수준은 좋으나 언어적 체계가 우리와 달라 풀이법이 언어적으로 한눈에 들어오지는 않는다. 또한 425 페이지 밖에 안되는 짧은 책이지만 수학적 혹은 논리적인 사고를 많이 요구하는 관계로 수학책을 읽는 것 만큼이나 진도는 천천히 나간다. 그럼에도 불구하고 이 책은 읽을 가치가 있는 책이다. 읽으면서 저자들에 대하여 생각하는 프로그래머들 같다라는 것이 느껴지기 때문이다. 면접 문제지만 현업을 하다보면 마..

알고리즘 2009.09.01

Multi Process Programming Concept #1

암달의 법칙(Amdahl's Law) 연산의 p비율만큼만 병렬화가 가능한 경우, 최대 속도 향상은 1/(1-p) Work Law T1: 1개의 프로세스 사용시 최단 수행 시간 TP: P개의 프로세스 사용시 최단 수행 시간 TP >= T1/P Span Law 병렬실행시 반드시 실행해야 하는 최단 길이, 즉 임계 경로로 1개의 프로세스로 실행시 가장 빠른 실행 시간을 나타냄 Parallelism T1: 모든 노드의 수행시간 T@: 무한개의 프로세스 사용시 최장 패스 노드 수(수행 시간) T1(=최단길이)/T@(=프로세스 개수): 무한개의 프로세스 사용시의 최대 속도 향상 i.e. 18(총 노드 개수) / 9(최장 패스 노드)

64Bit Programming Models: Why LP64?

64-Bit Programming Models: Why LP64? Open Systems community에서 왜 LP64모델을 Unix표준으로 선택하였는가에 대한 요약입니다. LP64모델을 선택하기 위하여 포팅성(Portability), 32bit 환경과의 상호운용성(Interoperability with 32bit Enviroments), 표준 준수(standards conformance), 성능(performance effects), 전이비용(transition costs)을 고려하였습니다. 64bit모델을 고려하기 시작한 것은 H/W발전에 따라 4G이상의 주소에 직접적으로 억세스하려고 하는 것을 필요로 해졌기 떄문입니다. 기존의 64bit 환경에 대한 경험상 해당 환경의 개발자들은 32bit 프로..

C++ 프로그래밍 2009.08.22

64bit 윈도우 프로그래밍

zdnet에 안철수연구소의 유병인님이 쓰신 3부작 글을 한눈에 볼 수 있게 요약하여 놓은 글입니다. [64비트 윈도우 프로그래밍] ① 32비트 프로그램을 엄호하라 64bit x86아키텍처는 32/64bit 겸용 아키텍처, IA64와 같은 64bit 전용 아키텍처로 나뉘며, 이 아키텍처에 따라서 64bit 윈도우의 동작은 틀려진다. 64bit 윈도우의 틀린점 (※이 틀린 점은 64bit 프로세스에서만 지원한다.) -64개의 CPU를 지원한다. -8K Page를 사용한다. x64와 IA64의 틀린점 -x64는 32bit 프로그램을 직접 실행하는데 비하여 IA64는 32bit 에뮬레이션을 하여 실행한다. -IA64는 AWE(Address Windowing Extention)를 사용할 수 없으며 일부 32bit..

C++ Technical Report 1 : Regular Expressions

정규식(Regular Expressions)는 텍스트 처리를 코드가 아닌 정규식을 바탕으로 처리하게해 생산성과 효율성을 높입니다. 쉽게 말하여 정규식을 처리를 위한 문자열에 대입하여 문자열 처리를 굉장히 빠르고 강력하게 할 수 있게 된다는 의미입니다. TR1의 정규식은 아래와 같은 6가지의 문법을 지원합니다. ECMAScript, default grammar and the most powerful basic, POSIX Basic Regular Expressions extended, POSIX Extended Regular Expressions awk, POSIX awk grep, POSIX grep egrep, POSIX grep -E Codeguru의 A TR1 Tutorial: Regular Exp..

C++ 프로그래밍 2009.07.31

C++ Technical Report 1 : Random Number Generation

난수 생성 기능이 굉장히 강력해지고 다양해 졌습니다. 기본적으로 알아야할 상식은 난수라는 것은 진정한 난수가 아닌 일정한 공식(알고리즘)에 의하여 생성되는 수라는 점입니다. 그것은 기존의 C의 방법으로 생성할 때 srand((unsinged int)time(NULL));을 써주지 않을 경우에는 프로그램이 실행될 때마다 매번 같은 난수 값이 반복된다는 것을 통하여 알 수 있습니다. TR1은 난수 엔진이라고 불리는 난수 발생 공식을 가진 템플릿 5개를 기본적으로 가지고 있으며 합성 템플릿을 가지고 이들을 조합하여 쓸 수 있습니다. 이런 기본적인 엔진 템플릿을 바탕으로 typedef가 되어 쉽게 쓸 수 있는 클래스가 TR1에 정의되어 있습니다. 그 다음으로 TR1에는 분산(Distribution)을 조정하기 ..

C++ 프로그래밍 2009.07.30

C++ Technical Report 1 : Metaprogramming and Type Traits

메타프로그래밍을 위한 부분으로 헤더에 관련된 내용을 담고 있습니다. Type traits는 generic code가 타입의 핵심 속성을 억세스 할 수 있게 해주며 타입간의 관계 결정 또는 관련 있는 타입 간의 변환을 가능하게 해줍니다. 이 부분은 TR1의 라이브러리를 공부하기 보다는 메타프로그래밍 관련 책을 사서 보심이 좋을 듯 합니다. 그 외에 온라인으로 볼 수 있는 관련 내용은 아래와 같습니다. boost 'TR1 By Subject' boost 'Chapter 1.Boost.TypeTraits' Metaprogramming 메타프로그래밍에 대하여 boost 'Background and Tutorial'의 내용을 바탕으로 간단히 이야기 해보면 다음과 같습니다. 메타프로그래밍은 템플릿 테크닉, 그 중에..

C++ 프로그래밍 2009.07.29

C++ Technical Report 1 : Function pobjects

Polymorphic Function Wrappers (tr1::function) 모든 Callables(함수포인터, 멤버함수 포인터 그리고 함수객체(Functor or Function Objects))에 대하여 단일한 wrapper를 제공합니다. ※ Callables라는 좋은 표현을 한국말로 어떻게 해야할지 모르겠군요... Function Object Binders (tr1::bind) std::bind1st 및 std::bind2nd의 일반화된 버전으로 함수 호출시 파라메터를 유연하게 지정하게 해줍니다. tr1::function의 최대 장점은 C시절의 함수포인터, C++의 멤버함수 포인터, STL과 같이 각광 받기 시장한 함수 객체를 단일 템플릿으로 처리하여 준다는데 있는 듯 합니다. 자세한 코드 설..

C++ 프로그래밍 2009.07.28

C++ Technical Report 1 (TR1) : Overview

C++ TR1은 C++ 표준 라이브러리에 대하여 새롭게 추가되는 라이브러리에 대한 기술 문서로서, 우리에게는 추가된 C++ 라이브러리를 의미합니다. 2005년 6월 24일에 제안된 문서가 현재 심사중에 있습니다. TR2은 C++0x가 나온 이후에 나올 것으로 예정되어 있습니다. TR1은 Visual Studio 2008 한글판과 같은 경우 Service Pack1을 깔면 쓸 수 있습니다. 이 버전에는 C99에 대한 호환성 부분과 수학라이브러리는 지원하지 않습니다. 또한 영문판과 같은 경우는 별도의 Feature Pack 2008을 다운받아서 깔아야 합니다. General Utilities Reference Wrapper (tr1::reference_wrapper) Boost.Ref에 기초합니다. 헤더에 ..

C++ 프로그래밍 2009.07.23
반응형