Yeon's 개발블로그

지식을 전파하는 개발자가 되고싶습니다.

공유메모리 4

13. 공유메모리 프로그래밍-OpenMP

OpenMP란? 공유메모리 환경에서 사용하는 directive-based API로, 프로그래머가 순차 프로그램을 점진적으로 병렬해갈수 있도록 하기위해 설계되었다. 프로그래머가 병렬화 가능한 코드블록을 지정해 놓으면, 그것을 참고로 하여 병렬화는 컴파일러와 런타임 시스템이 결정하고 처리한다. #pragma opm parallel num_thread(thread_count): 코드 블록을 실행할 쓰레드 개수를 프로그래머가 명시할 때 쓰이는 명령어이다. 하지만 생성하고자 하는 쓰레드 개수를 프로그래머가 프로그램에 명시한다고해도, 시스템은 생성할 수 있는 정도만 생성하고, thread_count만큼 쓰레드를 생성해주지 않을 수도 있다. 요즘 OpenMP는 일반적으로 수천개의 쓰레드까진 생성해준다. implici..

Cloud Computing 2020.12.09

12. 공유메모리 프로그래밍-Pthreads

공유메모리란? 여러 프로세서 (CPU)들이 메모리를 공유하며, 프로세서 사이의 통신이 공유메모리를 통해 이루어지는 것을 말한다. 프로세스를 하나 실행시키면, 그 프로세스가 여러쓰레드를 포크하고, 그렇게 생성된 쓰레드들은 테스크를 병렬로 수행한다. 쓰레드사이의 통신은 프로그램 안에 있는 공유변수를 이용하여 이루어진다. *Thread: 쓰레드는 프로세스보단 상대적으로 가벼우며, 보통 공유메모리 프로그램은 하나의 프로세스와 여러개의 쓰레드로 이루어진다. 자신을 생성시킨 프로세스와 address space를 공유하고 프로세스의 data에 접근이 가능하다. 프로세스 안의 쓰레드 끼리는 공유변수를 통해 통신이 가능하며 서로 제어도 가능하다. parent 쓰레드에 변화가 생기면 child쓰레드또한 영향을 받고, 생성..

Cloud Computing 2020.12.08

4. 인터커넥션 네트워크 (Interconnection Networks)

앞에서 포스팅한 분산메모리시스템과 공유메모리시스템 모두에게 인터커넥션 네트워크는 시스템의 성능에 크게 영향을 끼친다. *공유메모리 인터커넥트: bus, crossbar *분산메모리 인터커넥트 -Direct: ring, mesh, torus, hypercube -Indirect: butterfly, omega 1-1. 공유메모리연결망: Bus -병렬 통신을 위한 와이어와 버스 엑세스를 제어하는 하드웨어로 구성된다. 버스에 연결된 디바이스들이 통신 와이어를 공유한다. -트래픽이 클 때 대기시간이 길어지고, 버스에 연결된 디바이스 개수가 많으면 버스 사용경쟁이 커서 성능이 저하된다. -버스에 연결할 수 있는 디바이스의 개수는 보통 8~16개 정도이고, 값이 싼 것이 특징이다. 1-2. 공유메모리연결망: Cro..

Cloud Computing 2020.10.21

3. 병렬 하드웨어 (Parallel Hardware)

* 병렬 하드웨어란? 병럴컴퓨터는 다수의 CPU가 다수의 프로그램 혹은 분할된 프로그램을 동시에 처리하는 컴퓨터를 말한다. 특히 병렬 하드웨어는 프로그래머가 소스코드를 수정하여 하드웨어의 병렬 특성을 이용할 수 있는 경우로 국한한 것을 의미한다. 명령어 스트림의 개수와 동시에 처리가능한 데이터 스트림의 개수를 기준으로 하드웨어들을 분류한다. 병렬하드웨어는 크게 SIMD와 MIMD로 나눌 수 있다. 1. SIMD 시스템 -명령 1개가 여러 데이터를 대상으로 동시에 처리된다. -하나의 CU와 여러대의 ALU로 구성되고, CU에서 ALU들로 broadcast된다. ALU는 명령을 실행하거나 idle상태로 기다릴 수 있다. 다만 같은 시각에 서로 다른 명령을 실행하는 ALU들은 없다. (명령하나, 여러개의 데이..

Cloud Computing 2020.10.20