Outline PLSI 시스템접속병렬처리병렬프로그래밍개요 OpenMP를이용한병렬화 MPI를이용한병렬화순차코드의병렬화
|
|
- 영은 주
- 8 years ago
- Views:
Transcription
1 병렬프로그래밍 정진우
2 Outline PLSI 시스템접속병렬처리병렬프로그래밍개요 OpenMP를이용한병렬화 MPI를이용한병렬화순차코드의병렬화
3 PLSI 시스템개요
4 PLSI 사업과 PLSI 자원 PLSI 사업 (PLSI Project) 국내슈퍼컴퓨터자원을국가적차원의체계적인연동과관리를통해효율적으로사용할수있도록지원하는사업 PLSI is a national project to support that Korean national supercomputing resources can be used effectively through the systematic integration and management PLSI 자원 (PLSI Resources) PLSI 사업을통하여구축된고성능전용네트워크기반의슈퍼컴퓨터통합인프라 PLSI resources is an integrated supercomputing infrastructure based on the dedicated high performance network built by PLSI project
5 PLSI 자원현황 PLSI 자원연동구성 최소 1Gbps 수준의전용네트워크로국내주요슈퍼컴퓨팅센터의컴퓨팅자원을연동 글로벌파일시스템공유및글로벌스케줄링이가능 슈퍼컴전용라인슈퍼컴전용트래픽 KIST 서울대 건국대 서울시립대 UNIST 서울 Supercom_C3560 ACL Supercom C3560 ACL Supercom Ex4200 Supercom ACL ACL Supercom_C3560 ACL 울산 대전 광주 KISTI ACL KOBIC ACL Login Node PLSI _C6509 FireWall IDS Supercom_EX4200 ACL ACL Supercom_C3560 ACL GIST Supercom_C4006 ACL Supercom_C4006 Supercom_C3560 동명대 KREONET 부산대부경대 부산
6 PLSI 자원현황 PLSI 자원통합소프트웨어스택 각연동시스템은아래와같은통합소프트웨어스택이모두설치 이를통해연동된시스템어디서나추가적인인증이나데이터이전과정없이단일배치작업스케줄러 명령을사용하여작업의제출 모니터링 제어및여러시스템에걸친연계작업의원활한수행이가능 사용자 통합작업실행환경제공 ( 시스템접속 / 컴파일 / 작업실행 ) 윈도우클러스터통합구성요소 응용소프트웨어 [Fluent, Gaussian, VASP, GAMESS ] 컴파일러 / 디버거 병렬 API 라이브러리 통합소프트웨어스택 사용자접속 PLSI Portal SSH/X11 Remote Desktop 통합계정 LDAP Nagios 통합모니터링 글로벌스케줄러 LoadLeveler-MC GPFS-MC 글로벌공유파일시스템 프로그래밍환경 MPI [MPICH/MVAPICH/OpenMPI) 시스템통합 이기종시스템환경 컴파일러 [GCC/PGI/Intel/IBM/MS] Supercomputing 라이브러리 Infrastructure / 디버거 운영체제 AIX 5.3 CentOS 4/5 RHEL AS 3.4 SUSE ES9 Windows Server 2008 시스템 IBM POWER5 server IBM PowerPC Cluster X86-64 Cluster IA-64 Cluster 연동네트워크 [1GbE]
7 PLSI 시스템접속
8 PLSI 사용자포털서비스 (PLSI User Portal Service) URL : 개요 슈퍼컴퓨터의자원활용을극대화하기위해개발된웹기반통합포털서비스 사용자들의슈퍼컴퓨터연동자원사용에편의를우선적으로고려 주요서비스기능 온라인계정신청및처리상태조회 PLSI 연동시스템의 H/W, S/W 정보확인 연동자원및작업현황모니터링수행 PLSI 연동시스템간사용자작업환경제공 웹기반의 SSH, SFTP 프로그램제공 계정및과금정보확인 공지사항, FAQ, 기술지원상담, 자료실등의고객서비스지원
9 PLSI 포털로그인 PlSI 계정과연동, 동일한 ID/Pass 로접속 PLSI 계정로그인
10 SSH 접속 컴퓨팅서비스 -> 쉘접속클릭
11 JRE 설치및애플릿실행
12 Xming - X11 forwarding 을위한 XLancher Site Download : rds=xming 사용방법 실행파일다운로드받은후설치 XLanuch 실행
13 Xming - X11 forwarding 을위한 XLancher» select Multiple windows
14 Xming - X11 forwarding 을위한 XLancher
15 Xming - X11 forwarding 을위한 XLancher
16 Xming - X11 forwarding 을위한 XLancher Xming 실행 GUI X11(X or Xwindow)
17 PuTTY ssh 원격접속클라이언트 Site Homepage : Download : Manual : 사용방법 웹브라우저에 를입력후 putty.exe 를다운로드 다운로드받은 putty.exe 를실행
18 PLSI 시스템접속 - ssh 를통한접속방법 SSH 접속터미널사용하여로그인노드로접속한다. 사용자 : 1022port 로신청서에기술된사용자접속허용 IP 만접속이허용된다. [Linux/unix 사용자 ] 로그인주소 : login01.plsi.or.kr ( ) login02.plsi.or.kr ( ) $ssh -l plsiuser -p 1022 login01.plsi.or.kr $ssh -l plsiuser -p 1022 login02.plsi.or.kr [windows 사용자 ] putty 나 SSH Secure Shell Client 등의 ssh 접속유틸리티를이용한다. 프로그램은인터넷을통해무료로다운받을수있다.
19 PLSI 시스템접속 - ssh 를통한접속방법 1022 login01.plsi.or.kr PLSI Host Name : 접속할원격지주소입력 login01.plsi.or.kr Port : 1022 SSH 선택 Saved Sessions : 설정저장 Open : 접속실행
20 PLSI 시스템접속 - ssh 를통한접속방법 localhost:0.0 그래픽을사용하기위해선 SSH -> X11 탭에서 Enable X11 forwarding 체크 X display location : localhost:0.0
21 병렬프로그래밍개요
22 병렬처리 (1/3) 병렬처리란, 순차적으로진행되는계산영역을 여러개로나누어각각을여러프로세서에서 동시에수행되도록하는것
23 병렬처리 (2/3) 순차실행 병렬실행 Inputs Outputs
24 병렬처리 (3/3) 주된목적 : 더욱큰문제를더욱빨리처리하는것 프로그램의 wall-clock time 감소 해결할수있는문제의크기증가 병렬컴퓨팅계산자원 여러개의프로세서 (CPU) 를가지는단일컴퓨터 네트워크로연결된다수의컴퓨터
25 왜병렬인가? 고성능단일프로세서시스템개발의제한 전송속도의한계 ( 구리선 : 9 cm/nanosec) 소형화의한계 경제적제한 보다빠른네트워크, 분산시스템, 다중프로세서시스템 아키텍처의등장 è 병렬컴퓨팅환경 상대적으로값싼프로세서를여러개묶어동시에사용함 으로써원하는성능이득기대
26 프로그램과프로세스 프로세스는보조기억장치에하나의파일로서저장되어 있던실행가능한프로그램이로딩되어운영체제 ( 커널 ) 의 실행제어상태에놓인것 프로그램 : 보조기억장치에저장 프로세스 : 컴퓨터시스템에의하여실행중인프로그램 태스크 = 프로세스
27 프로세스 프로그램실행을위한자원할당의단위가되고, 한프로 그램에서여러개실행가능 다중프로세스를지원하는단일프로세서시스템 자원할당의낭비, 문맥교환으로인한부하발생 문맥교환 어떤순간한프로세서에서실행중인프로세스는항상하나 현재프로세스상태저장 à 다른프로세스상태적재 분산메모리병렬프로그래밍모델의작업할당기준
28 스레드 프로세스에서실행의개념만을분리한것 프로세스 = 실행단위 ( 스레드 ) + 실행환경 ( 공유자원 ) 하나의프로세스에여러개존재가능 같은프로세스에속한다른스레드와실행환경을공유 다중스레드를지원하는단일프로세서시스템 다중프로세스보다효율적인자원할당 다중프로세스보다효율적인문맥교환 공유메모리병렬프로그래밍모델의작업할당기준
29 프로세스와스레드 하나의스레드를갖는 3 개의프로세스 3 개의스레드를갖는하나의프로세스 스레드 프로세스
30 병렬성유형 데이터병렬성 (Data Parallelism) 도메인분해 (Domain Decomposition) 각태스크는서로다른데이터를가지고동일한일련의계산을수행 태스크병렬성 (Task Parallelism) 기능적분해 (Functional Decomposition) 각태스크는같거나또는다른데이터를가지고서로다른계산을수행
31 데이터병렬성 (1/3) 데이터병렬성 : 도메인분해 Problem Data Set Task 1 Task 2 Task 3 Task 4
32 데이터병렬성 (2/3) 코드예 ) : 행렬의곱셈 (OpenMP) DO K=1,N DO J=1,N DO I=1,N Serial Code C(I,J) = C(I,J) + END DO END DO END DO (A(I,K)*B(K,J)) Parallel Code!$OMP PARALLEL DO DO K=1,N DO J=1,N DO I=1,N C(I,J) = C(I,J) + END DO END DO END DO A(I,K)*B(K,J)!$OMP END PARALLEL DO
33 데이터병렬성 (3/3) 데이터분해 ( 프로세서 4 개 :K=1,20 일때 ) Process Iterations of K Data Elements Proc0 K = 1:5 Proc1 K = 6:10 Proc2 K = 11:15 Proc3 K = 16:20 A(I,1:5) B(1:5,J) A(I,6:10) B(6:10,J) A(I,11:15) B(11:15,J) A(I,16:20) B(16:20,J)
34 태스크병렬성 (1/3) 태스크병렬성 : 기능적분해 Problem Instruction Set Task 1 Task 2 Task 3 Task 4
35 태스크병렬성 (2/3) 코드예 ) : (OpenMP) Serial Code PROGRAM MAIN CALL interpolate() CALL compute_stats() CALL gen_random_params() END Parallel Code PROGRAM MAIN!$OMP PARALLEL!$OMP SECTIONS CALL interpolate()!$omp SECTION CALL compute_stats()!$omp SECTION CALL gen_random_params()!$omp END SECTIONS!$OMP END PARALLEL END
36 태스크병렬성 (3/3) 태스크분해 (3 개의프로세서에서동시수행 ) Process Proc0 Proc1 Proc2 Code CALL interpolate() CALL compute_stats() CALL gen_random_params()
37 병렬아키텍처 (1/2) Processor Organizations Single Instruction, Single Data Stream (SISD) Single Instruction, Multiple Data Stream (SIMD) Multiple Instruction, Single Data Stream (MISD) Multiple Instruction, Multiple Data Stream (MIMD) Uniprocessor Vector Processor Array Processor Shared memory (tightly coupled) Distributed memory (loosely coupled) Clusters Symmetric multiprocessor (SMP) Non-uniform Memory Access (NUMA)
38 병렬아키텍처 (2/2) 최근의고성능시스템 : 분산 - 공유메모리지원 소프트웨어적 DSM (Distributed Shared Memory) 구현 공유메모리시스템에서메시지패싱지원 분산메모리시스템에서변수공유지원 하드웨어적 DSM 구현 : 분산 - 공유메모리아키텍처 분산메모리시스템의각노드를공유메모리시스템으로구성 NUMA : 사용자들에게하나의공유메모리아키텍처로보여짐 ex) Superdome(HP), Origin 3000(SGI) SMP 클러스터 : SMP 로구성된분산시스템으로보여짐 ex) SP(IBM), Beowulf Clusters
39 병렬프로그래밍모델 공유메모리병렬프로그래밍모델 공유메모리아키텍처에적합 다중스레드프로그램 OpenMP, Pthreads 메시지패싱병렬프로그래밍모델 분산메모리아키텍처에적합 MPI, PVM 하이브리드병렬프로그래밍모델 분산-공유메모리아키텍처 OpenMP + MPI
40 공유메모리병렬프로그래밍모델 Single thread time S1 time S1 fork Multi-thread Thread P1 P1 P2 P3 P4 P2 P3 S2 join Shared address space P4 S2 Process Process
41 메시지패싱병렬프로그래밍모델 time Serial S1 time S1 S1 Messagepassing S1 S1 P1 P1 P2 P3 P4 P2 S2 S2 S2 S2 P3 Process 0 Process 1 Process 2 Process 3 P4 Node 1 Node 2 Node 3 Node 4 S2 Data transmission over the interconnect Process
42 하이브리드병렬프로그래밍모델 Message-passing time S1 fork Thread time S1 fork Thread P1 P2 P3 P4 S2 S2 join Shared address S2 S2 join Shared address Process 0 Node 1 Process 1 Node 2
43 DSM 시스템의메시지패싱 time S1 S1 S1 S1 P1 P2 P3 P4 Message-passing S2 S2 S2 S2 S2 S2 S2 S2 Process 0 Process 1 Process 2 Process 3 Node 1 Node 2
44 SPMD 와 MPMD (1/4) SPMD(Single Program Multiple Data) 하나의프로그램이여러프로세스에서동시에수행됨 어떤순간프로세스들은같은프로그램내의명령어들을수행하며그명령어들은같을수도다를수도있음 MPMD (Multiple Program Multiple Data) 한 MPMD 응용프로그램은여러개의실행프로그램으로구성 응용프로그램이병렬로실행될때각프로세스는다른프로세스와같거나다른프로그램을실행할수있음
45 SPMD 와 MPMD (2/4) SPMD a.out Node 1 Node 2 Node 3
46 SPMD 와 MPMD (3/4) MPMD : Master/Worker (Self-Scheduling) a.out b.out Node 1 Node 2 Node 3
47 SPMD 와 MPMD (4/4) MPMD: Coupled Analysis a.out b.out c.out Node 1 Node 2 Node 3
48 성능측정 성능에영향을주는요인들 병렬프로그램작성순서
49 프로그램실행시간측정 (1/2) time 사용방법 (bash, ksh) : $time [executable] $ time mpirun np 4 machinefile machines./exmpi.x real 0m3.59s user 0m3.16s sys 0m0.04s real = wall-clock time User = 프로그램자신과호출된라이브러리실행에사용된 CPU 시간 Sys = 프로그램에의해시스템호출에사용된 CPU 시간 user + sys = CPU time
50 프로그램실행시간측정 (2/2) 사용방법 (csh) : $time [executable] $ time testprog 1.150u 0.020s 0: % k 24+10io 0pf+0w user CPU time (1.15초) 2 system CPU time (0.02 초 ) 3 real time (0 분 1.76 초 ) 4 real time 에서 CPU time 이차지하는정도 (66.4%) 5 메모리사용 : Shared (15Kbytes) + Unshared (3981Kbytes) 6 입력 (24 블록 ) + 출력 (10 블록 ) 7 no page faults 8 no swaps
51 성능측정 병렬화를통해얻어진성능이득의정량적분석성능측정 성능향상도 효율 Cost
52 성능향상도 (1/7) 성능향상도 (Speed-up) : S(n) 순차프로그램의실행시간 S(n) = 병렬프로그램의실행시간 (n개프로세서 ) = t s t p 순차프로그램에대한병렬프로그램의성능이득정도 실행시간 = Wall-clock time 실행시간이 100 초가걸리는순차프로그램을병렬화하여 10 개의프로세서로 50 초만에실행되었다면, è S(10) = 100 = 2 50
53 성능향상도 (2/7) 이상 (Ideal) 성능향상도 : Amdahl s Law f : 코드의순차부분 (0 f 1) t p = ft s + (1-f)t s /n 순차부분실행시간 병렬부분실행시간
54 성능향상도 (3/7) fts Serial section ts ( 1- f )t S Parallelizable sections n- 1 n n processes n- 1 n tp ( 1- f ) t / S n
55 성능향상도 (4/7) t s S(n) = = t p t s ft s + (1-f)t s /n S(n) = 1 f + (1-f)/n 최대성능향상도 ( n à ) S(n) = 1 f 프로세서의개수를증가하면, 순차부분크기의역수에수렴
56 성능향상도 (5/7) f = 0.2, n = 4 Serial Parallel process process 2 process 3 process 4 cannot be parallelized can be parallelized 1 S(4) = = (1-0.2)/4
57 성능향상도 (6/7) 프로세서개수대성능향상도 24 f=0 20 Speed-u up f=0.05 f=0.1 f= number of processors, n
58 성능향상도 (7/7) 순차부분대성능향상도 Speed-u up n=16 n= Serial fraction, f
59 효율 효율 (Efficiency) : E(n) t s S(n) n E(n) = = [ⅹ100(%)] t p ⅹn 프로세서개수에따른병렬프로그램의성능효율을나타냄 10개의프로세서로 2배의성능향상 : S(10) = 2 à E(10) = 20 % 100개의프로세서로 10배의성능향상 : S(100) = 10 à E(100) = 10 %
60 Cost Cost Cost = 실행시간 ⅹ 프로세서개수 순차프로그램 : Cost = t s t s n t s 병렬프로그램 : Cost = t p ⅹ n = = S(n) E(n) 예 ) 10 개의프로세서로 2 배, 100 개의프로세서로 10 배의성능향상 t s t p n S(n) E(n) Cost
61 실질적성능향상에고려할사항 실제성능향상도 : 통신부하, 로드밸런싱문제 Serial parallel process 1 process 2 process 3 process 4 cannot be parallelized can be parallelized communication overhead Load unbalance
62 성능증가를위한방안들 1. 프로그램에서병렬화가능한부분 (Coverage) 증가 알고리즘개선 2. 작업부하의균등분배 : 로드밸런싱 3. 통신에소비하는시간 ( 통신부하 ) 감소
63 성능에영향을주는요인들 Coverage : Amdahl s Law 로드밸런싱동기화통신부하세분성입출력
64 로드밸런싱 모든프로세스들의작업시간이가능한균등하도록작업을분배하여작업대기시간을최소화하는것 데이터분배방식 (Block, Cyclic, Block-Cyclic) 선택에주의 이기종시스템을연결시킨경우, 매우중요함 동적작업할당을통해얻을수도있음 task0 task1 task2 WORK WAIT task3 time
65 동기화 병렬태스크의상태나정보등을동일하게설정하기위한조정작업 대표적병렬부하 : 성능에악영향 장벽, 잠금, 세마포어 (semaphore), 동기통신연산등이용 병렬부하 (Parallel Overhead) 병렬태스크의시작, 종료, 조정으로인한부하 시작 : 태스크식별, 프로세서지정, 태스크로드, 데이터로드등 종료 : 결과의취합과전송, 운영체제자원의반납등 조정 : 동기화, 통신등
66 통신부하 (1/4) 데이터통신에의해발생하는부하 네트워크고유의지연시간과대역폭존재 메시지패싱에서중요통신부하에영향을주는요인들 동기통신? 비동기통신? 블록킹? 논블록킹? 점대점통신? 집합통신? 데이터전송회수, 전송하는데이터의크기
67 통신부하 (2/4) 통신시간 = 지연시간 + 메시지크기 대역폭 지연시간 : 메시지의첫비트가전송되는데걸리는시간 송신지연 + 수신지연 + 전달지연 대역폭 : 단위시간당통신가능한데이터의양 (MB/sec) 메시지크기 유효대역폭 = = 통신시간 대역폭 1+ 지연시간 ⅹ 대역폭 / 메시지크기
68 통신부하 (3/4) Communication Time Commu unication time 1/slope = Bandwidth Latency message size
69 통신부하 (4/4) effective bandwidth (MB/s sec) Effective Bandwidth network bandwidth latency = 22 μs bandwidth = 133 MB/sec message size(bytes)
70 세분성 (1/2) 병렬프로그램내의통신시간에대한계산시간의비 Fine-grained 병렬성 통신또는동기화사이의계산작업이상대적으로적음 로드밸런싱에유리 Coarse-grained 병렬성 통신또는동기화사이의계산작업이상대적으로많음 로드밸런싱에불리 일반적으로 Coarse-grained 병렬성이성능면에서유리 계산시간 < 통신또는동기화시간 알고리즘과하드웨어환경에따라다를수있음
71 세분성 (2/2) time time Communication Computation Communication Computation (a) Fine-grained (b) Coarse-grained
72 입출력 일반적으로병렬성을방해함 쓰기 : 동일파일공간을이용할경우겹쳐쓰기문제 읽기 : 다중읽기요청을처리하는파일서버의성능문제 네트워크를경유 (NFS, non-local) 하는입출력의병목현상 입출력을가능하면줄일것 I/O 수행을특정순차영역으로제한해사용 지역적인파일공간에서 I/O 수행 병렬파일시스템의개발 (GPFS, PVFS, PPFS ) 병렬 I/O 프로그래밍인터페이스개발 (MPI-2 : MPI I/O)
73 확장성 (1/2) 확장된환경에대한성능이득을누릴수있는능력 하드웨어적확장성 알고리즘적확장성 확장성에영향을미치는주요하드웨어적요인 CPU- 메모리버스대역폭 네트워크대역폭 메모리용량 프로세서클럭속도
74 확장성 (2/2) Spee edu p Number of Workers
75 의존성과교착 데이터의존성 : 프로그램의실행순서가실행결과에영향을미치는것 DO k = 1, 100 F(k + 2) = F(k +1) + F(k) ENDDO 교착 : 둘이상의프로세스들이서로상대방의이벤트발생을기다리는상태 Process 1 Process 2 X = 4 SOURCE = TASK2 RECEIVE (SOURCE,Y) DEST = TASK2 SEND (DEST,X) Z = X + Y Y = 8 SOURCE = TASK1 RECEIVE (SOURCE,X) DEST = TASK1 SEND (DEST,Y) Z = X + Y
76 병렬프로그램작성순서 1 순차코드작성, 분석 ( 프로파일링 ), 최적화 hotspot, 병목지점, 데이터의존성등을확인 데이터병렬성 / 태스크병렬성? 2 병렬코드개발 MPI/OpenMP/? 태스크할당과제어, 통신, 동기화코드추가 3 컴파일, 실행, 디버깅 4 병렬코드최적화 성능측정과분석을통한성능개선
77 디버깅과성능분석 디버깅 코드작성시모듈화접근필요 통신, 동기화, 데이터의존성, 교착등에주의 디버거 : TotalView 성능측정과분석 timer 함수사용 프로파일러 : prof, gprof, pgprof, TAU
78 병렬프로그램작성예 (1/3) PI 계산알고리즘 1. 정사각형에원을내접시킴 2. 정사각형내에서무작위로점추출 3. 추출된점들중원안에있는점의개수결정 4. PI = 4 ⅹ 원안의점개수 전체점의개수
79 병렬프로그램작성예 (2/3) 순차코드작성 (Pseudo) tpoints = in_circle = 0 do j = 1,tpoints x = rand() y = rand() if (x, y) inside circle then 거의모든계산이루프에서실행 à 루프의반복을여러프로세스로나누어동시수행 각프로세스는담당한루프반복만을실행 다른프로세스의계산에대한정보불필요 à 의존성없음 SPMD 모델사용, 마스터프로세스가최종적으로계산결과를취합해야함 in_circle = in_circle + 1 end do PI = 4.0*in_circle/tpoints
80 병렬프로그램작성예 (3/3) 병렬코드작성 (Pseudo) tpoints = in_circle = 0 p = number of process num = tpoints/p find out if I am MASTER or WORKER do j = 1,num x = rand() y = rand() if (x, y) inside circle then in_circle = in_circle + 1 end do 기울임글꼴 ( 붉은색 ) 부분이병렬화를위해첨가된부분 if I am MASTER receive from WORKERS their in_circle compute PI (use MASTER and WORKER calculations) else if I am WORKER send to MASTER in_circle end if
81 OpenMP 를이용한병렬화
82 OpenMP 의역사 1990 년대 : 고성능공유메모리시스템의비약적발전 고수준, 표준병렬프로그래밍모델은분산메모리환경에치중 업체고유의지시어집합보유 à 표준화필요 1994년 ANSI X3H5 à 1996년 openmp.org 설립 1997년 OpenMP API 발표 Release History OpenMP Fortran API 버전 1.0 : 1997년 10월 C/C++ API 버전 1.0 : 1998년 10월 Fortran API 버전 1.1 : 1999년 11월 Fortran API 버전 2.0 : 2000년 11월 C/C++ API 버전 2.0 : 2002년 3월
83 OpenMP 란무엇인가? 공유메모리환경에서다중스레드병렬프로그램작성을위한응용프로그램인터페이스 (API) Open specifications for Multi Processing
84 공유메모리구조 Memory I/O Bus or Crossbar Switch Cache Cache Cache Cache Processor Processor Processor Processor
85 OpenMP 의구성 (1/2)
86 OpenMP 의구성 (2/2) 컴파일러지시어 스레드사이의작업분담, 통신, 동기화를담당 좁은의미의 OpenMP 예 ) C$OMP PARALLEL DO 실행시간라이브러리 병렬매개변수 ( 참여스레드의개수, 번호등 ) 의설정과조회예 ) CALL omp_set_num_threads(128) 환경변수 실행시스템의병렬매개변수 ( 스레드개수등 ) 를정의예 ) export OMP_NUM_THREADS=8
87 OpenMP 프로그래밍모델 Thread-Based Fork-Join 모델 F J F J O O O O Master Thread R K I N R K I N [Parallel Region] [Parallel Region]
88 OpenMP 프로그래밍개요 (1/11) 컴파일러지시어기반 : 순차코드에지시어삽입 컴파일러가지시어를참고하여다중스레드코드생성 OpenMP 를지원하는컴파일러필요 명시적병렬성 è 동기화, 의존성제거등의병렬화작업제어 순차코드 PROGRAM exam ialpha = 2 DO i = 1, 100 a(i) = a(i) + ialpha*b(i) ENDDO PRINT *, a END 병렬코드 PROGRAM exam ialpha = 2!$OMP PARALLEL DO DO i = 1, 100 a(i) = a(i) + ialpha*b(i) ENDDO!$ OMP END PARALLEL DO PRINT *, a END
89 OpenMP 프로그래밍개요 (2/11) Fork-Join export OMP_NUM_THREADS = 4 ialpha = 2 (Master Thread) (Fork) DO i=1,25... DO i=26,50... DO i=51,75... DO i=76, (Join) (Master) (Slave) (Slave) (Slave) PRINT *, a (Master Thread)
90 OpenMP 프로그래밍개요 (3/11) OpenMP 지시어문법 Fortran ( 고정형식 :f77) Fortran ( 자유형식 :f90) C 지시어 시작 ( 감시문자 )!$OMP < 지시어 > C$OMP < 지시어 > *$OMP < 지시어 >!$OMP < 지시어 > #pragma omp < 지시어 >!$OMP < 지시어 > 줄바꿈!$OMP <!$OMP&!$OMP < 지시어 > & #pragma omp \ 선택적 컴파일!$ C$ *$!$ #ifdef _OPENMP #endif 시작위치 첫번째열 무관 무관
91 OpenMP 프로그래밍개요 (4/11) 많이사용되는지시어 Fortran!$OMP PARALLEL!$OMP DO!$OMP PARALLEL DO!$OMP CRITICAL PRIVATE/SHARED DEFAULT REDUCTION C #pragma omp parallel #pragma omp for #pragma omp parallel for #pragma omp critical private/shared default reduction
92 OpenMP 프로그래밍개요 (5/11) 실행시간라이브러리 omp_set_num_threads(integer) : 스레드개수지정 omp_get_num_threads() : 생성된스레드개수리턴 omp_get_thread_num() : 스레드 ID 리턴 omp_get_max_threads() : 사용가능한최대스레드개수리턴 환경변수 OMP_NUM_THREADS : 사용가능한스레드최대개수 export OMP_NUM_THREADS=16 (ksh) setenv OMP_NUM_THREADS 16 (csh) C/C++ : #include <omp.h>
93 OpenMP 프로그래밍개요 (6/11) OpenMP 의전형적사용방법 ( 루프의병렬화 ) 1시간이많이걸리는루프찾음 ( 프로파일링 ) 2의존성, 데이터유효범위조사 3지시어삽입으로병렬화 PROGRAM exam 순차코드 REAL res(1000) DO i=1, 1000 CALL do_huge_comp (res(i)) ENDDO PROGRAM exam 병렬코드 REAL res(1000)!$omp PARALLEL DO DO i = 1, 1000 CALL do_huge_comp(res(i)) ENDDO!$OMP END PARALLEL DO
94 OpenMP 프로그래밍개요 (7/11) parallel do/for Fortran!$OMP PARALLEL DO DO i = 1, n a(i) = b(i) + c(i) ENDDO [!$OMP END PARALLEL DO] C #pragma omp parallel for for (i=1; i<=n; i++) a[i] = b[i] + c[i]; Optional MASTER thread!$omp PARALLEL DO # of threads=4!$omp END PARALLEL DO MASTER thread join again
95 OpenMP 프로그래밍개요 (8/11) parallel + do/for Fortran!$OMP PARALLEL!$OMP DO DO i = 1, n a(i) = b(i) + c(i) ENDDO [!$OMP END DO]!$OMP DO [!$OMP END DO]!$OMP END PARALLEL Optional C #pragma omp parallel { #pragma omp for for (i=1; i<=n; i++) { a[i] = b[i] + c[i] } #pragma omp for for( ){ } }
96 OpenMP 프로그래밍개요 (9/11) 데이터유효범위 Fortran PROGRAM hello_wrong INTEGER a,tid, OMP_GET_THREAD_NUM!$OMP PARALLEL tid = OMP_GET_THREAD_NUM() DO i = 1, a = i ENDDO PRINT *, I am, & OMP_GET_THREAD_NUM(), & TID =, TID!$OMP END PARALLEL END am 3, tid 3 am 0, tid am 1, tid I am = 2, tid = 1 /* hello_wrong */ #include <omp.h> main(){ int i, a, tid; #pragma omp parallel { tid = omp_get_thread_num(); for(i=0; i<10000; i++) a = i; printf ( I am %d, tid = %d\n, omp_get_thread_num(), tid); } } C
97 OpenMP 프로그래밍개요 (10/11) 데이터유효범위 Fortran PROGRAM hello_right INTEGER a,tid, & OMP_GET_THREAD_NUM!$OMP PARALLEL PRIVATE(tid) tid = OMP_GET_THREAD_NUM() DO i = 1, a = i ENDDO PRINT *, I am, & OMP_GET_THREAD_NUM(), & TID = tid!$omp END PARALLEL END am 3, tid 3 am 0, tid 0 am 1, tid 1 I am = 2, tid = 2 /* hello_right */ C #include <omp.h> main(){ } int i, a, tid; #pragma omp parallel private(tid) { } tid = omp_get_thread_num(); for(i=0; i<10000; i++) a = i; printf ( I am %d, tid = %d \n, tid); omp_get_thread_num(),
98 OpenMP 프로그래밍개요 (11/11) OpenMP 프로그램의컴파일과실행 컴파일과링크 Intel Fortran C ifort -openmp o ompprog ompprog.f icc -openmp o ompprog ompprog.c 실행./ompprog
99 주요지시어 병렬영역지시어 parallel 작업분할지시어 do/for sections single 결합된병렬작업분할지시어 parallel do/for parallel sections
100 병렬영역 (1/4) Fortran 문법!$OMP PARALLEL shared(var1, var2, ) private(var1, var2, ) firstprivate(var1, var2, ) reduction(operator intrinsic:var1, var2, ) copyin(var1, var2, ) if(expression) default(private shared none) a structured block of code!$omp END PARALLEL & & & & & & &
101 병렬영역 (2/4) #pragma omp C parallel 문법 \ shared(var1, var2, ) \ private(var1, var2, ) \ firstprivate(var1, var2, ) \ { } reduction(operator intrinsic:var1, var2, ) \ copyin(var1, var2, ) \ if(expression) \ default(shared none) a structured block of code
102 병렬영역 (3/4) 생성스레드개수설정 환경변수 ( 커맨드라인 ) : export OMP_NUM_THREADS = 32 라이브러리호출 ( 코드 ) : CALL omp_set_num_threads(32) SPMD 스타일 : 병렬영역을각스레드에복제해실행 FORK - JOIN : 병렬영역의끝에서동기화 If(myid==0)... If(myid==1)... If(myid==2) ( ) (Thread 0) (Thread 2) (Thread 1) (implied barrier)
103 병렬영역 (4/4) 스레드 ID 사용 : 0( 마스터스레드 ) ~[ # of threads 1 ] omp_get_thread_num() Fortran!$OMP PARALLEL private(myid) myid = omp_get_thread_num() IF(myid==0) THEN ELSE do_something() do_something(myid) ENDIF!$OMP END PARALLEL #pragma omp parallel private(myid) { myid = omp_get_thread_num(); if(myid==0) do_something(); else do_something(myid); } C
104 Example: PI 1 4 ò 1+ x 0 2 dx dx x = tanq 2 = sec q dq f ( x 1 ) f ( x 2 ) p Þ ò sec 2 tan q p Þ ò cos q cos Þ p ò 4 4 dq = p q dq dq q 1 n... f ( x n ) 1 x2 = (2-0.5) 1 n x1 = (1-0.5) n 1 x n = ( n - 0.5) n
105 Example: PI Fortran PARAMETER (NUM_STEPS= ) SUM = 0.0 STEP = 1.0/REAL(NUM_STEPS) DO I = 1, NUM_STEPS X=(I-0.5)*STEP SUM = SUM + 4.0/(1.0+X*X) ENDDO PI=STEP*SUM static long num_steps = ; double step; void main () { int i; double x, pi, sum = 0.0; step = 1.0/(double) num_steps; for (i=1;i<= num_steps; i++){ x = (i-0.5)*step; sum = sum + 4.0/(1.0+x*x); } pi = step * sum; } C
106 Parallel: Fortran!$OMP PARALLEL PRIVATE(ID,X) ID = OMP_GET_THREAD_NUM() SUM(ID)=0.0 DO I = ID, NUM_STEPS-1, NUM_THREADS; X = (I+0.5)*STEP; SUM(ID) = SUM(ID)+ 4.0/(1.0+X*X); ENDDO!$OMP END PARALLEL PI=0.0 DO I=0, NUM_THREADS-1 PI = PI + SUM(I)*STEP ENDDO
107 Parallel: C #pragma omp parallel private(id,x) { id = omp_get_thread_num(); sum[id]=0.0; for (i=id; i< num_steps; i=i+num_threads){ x = (i+0.5)*step; sum[id] += 4.0/(1.0+x*x); } } for(i=0, pi=0.0;i<num_threads;i++) pi += sum[i] * step;
108 작업분할구문 (1/2) do/for sections single 병렬영역내부에삽입하여작업할당에이용 새로운스레드생성없이기존스레드에관련작업실행분배 구문의시작점 : 스레드사이의동기화없음 먼저접근하는스레드에우선적작업할당 구문의끝점 : 동기화 ( 암시적장벽 ) 작업이먼저끝나도다른작업의완료까지대기 대기없이다른작업을실행하려면 nowait clause 사용
109 작업분할구문 (2/2) Master thread Master thread Master thread F O R K F O R K F O R K DO / for loop team SECTIONS team SINGLE J O I N J O I N J O I N Master thread Master thread Master thread do/for sections single
110 작업분할구문 : DO/for (1/3) 바로뒤에오는루프의반복실행을스레드에분배 동기화 : 루프끝에암시적장벽 기다리지않으려면 nowait clause 사용 Fortran!$OMP PARALLEL shared(a,b) & #pragma omp parallel \ private(j)!$omp DO DO j = 1, N a(j) = a(j) + b(j) ENDDO [!$OMP END DO [nowait]]!$omp END PARALLEL { } C shared(a,b) private(j) #pragma omp for for (j=0;j<n; j++) a[j] = a[j] + b[j];
111 작업분할구문 : DO/for (2/3) Fortran : DO!$OMP DO [clause [,] [clause ]] DO loop [!$OMP END DO [nowait]] 사용 clause private(var1, var2, ) shared(var1, var2, ) firstprivate(var1, var2, ) lastprivate(var1, var2, ) reduction(operator intrinsic:var1, var2, ) schedule(type [,chunk]) ordered
112 작업분할구문 : DO/for (3/3) C : for #pragma omp for [clause [clause ]] for loop 사용 clause private(var1, var2, ) shared(var1, var2, ) firstprivate(var1, var2, ) lastprivate(var1, var2, ) reduction(operator intrinsic:var1, var2, ) schedule(type [,chunk]) ordered nowait
113 DO/for: Fortran!$OMP PARALLEL PRIVATE(ID) ID = OMP_GET_THREAD_NUM() SUM(ID)=0.0!$OMP DO PRIVATE(X) DO I = 0, NUM_STEPS-1 X = (I+0.5)*STEP SUM(ID) = SUM(ID) + 4.0/(1.0+X*X) ENDDO!$OMP END DO!$OMP END PARALLEL PI=0.0 DO I=0, NUM_THREADS-1 PI = PI + SUM(I)*STEP ENDDO
114 Do/for: C #pragma omp parallel private(id) { id = omp_get_thread_num(); sum[id] = 0.0; #pragma omp for private(x) for (i=0; i<num_steps; i++){ x = (i+0.5)*step; sum[id] += 4.0/(1.0+x*x); } } for(i=0, pi=0.0; i<num_threads; i++) pi += sum[i] * step;
115 작업분할구문 : sections (1/3) 독립된여러개작업을각스레드에분산실행 Functional decomposition 동기화 : sections 구문끝에암시적장벽 기다리지않으려면 nowait clause 사용!$OMP PARALLEL!$OMP SECTIONS!$OMP SECTION Fortran CALL computexpart()!$omp SECTION CALL computeypart()!$omp END SECTIONS [nowait]!$omp END PARALLEL C #pragma omp parallel { #pragma omp sections { #pragma omp section computexpart(); #pragma omp section computeypart(); } }
116 작업분할구문 : sections (2/3) Fortran!$OMP SECTIONS [clause [,] [clause ]] [!$OMP SECTION] structured code block [!$OMP SECTION another structured code block [!$OMP SECTION ]]!$OMP END SECTIONS [nowait] 사용 clause private(var1, var2, ) firstprivate(var1, var2, ) lastprivate(var1, var2, ) reduction(operator intrinsic:var1, var2, )
117 작업분할구문 : sections (3/3) C #pragma omp sections [clause [clause ]] { } [#pragma omp section] structured code block [#pragma omp section another structured code block ] 사용 clause private(var1, var2, ) firstprivate(var1, var2, ) lastprivate(var1, var2, ) reduction(operator intrinsic:var1, var2, ) nowait
118 sections : Fortran!$OMP PARALLEL PRIVATE(ID) ID = OMP_GET_THREAD_NUM() SUM(ID)=0.0!$OMP SECTIONS PRIVATE(X)!$OMP SECTION DO I = 0, (NUM_STEPS-1)/2 X = (I+.5)*STEP SUM(ID)= SUM(ID) + 4.0/(1.0+X*X) ENDDO!$OMP SECTION DO I = (NUM_STEPS-1)/2+1, NUM_STEPS-1 X = (I+.5)*STEP SUM(ID)= SUM(ID) + 4.0/(1.0+X*X) ENDDO!$OMP END SECTIONS
119 sections: C #pragma omp parallel private(id) { id = omp_get_thread_num(); sum[id]=0.0; #pragma omp sections private(x) { #pragma omp section for (i=0; i< num_steps/2; i++){ x = (i+0.5)*step; sum[id] += 4.0/(1.0+x*x); } #pragma omp section for (i= num_steps/2+1; i< num_steps; i++){ x = (i+0.5)*step; sum[id] += 4.0/(1.0+x*x); } } }
120 작업분할구문 : single (1/3) 병렬영역내부에서하나의스레드만이용해작업수행 single 지시어에가장먼저접근한스레드에작업할당 동기화 : single 구문끝에암시적장벽오직하나의 section 을가지는 sections 구문과동일 병렬영역내에서의입 / 출력수행에주로사용 Fortran!$OMP PARALLEL!$OMP SINGLE write the result!$omp END SINGLE [nowait]!$omp END PARALLEL C #pragma omp parallel { #pragma omp single write the result }
121 작업분할구문 : single (2/3) Fortran!$OMP SINGLE [clause [,] [clause ]] structured block!$omp END SINGLE [nowait] 사용 clause private(var1, var2, ) firstprivate(var1, var2, )
122 작업분할구문 : single (3/3) C #pragma omp single [clause [clause ]] structured block 사용 clause private(var1, var2, ) firstprivate(var1, var2, ) nowait
123 주요 Clauses private(var1, var2, ) shared(var1, var2, ) default(shared private none) firstprivate(var1, var2, ) lastprivate(var1, var2, ) reduction(operator intrinsic:var1, var2, ) schedule(type [,chunk])
124 데이터유효범위지정 Clause 명시적인데이터유효범위지정 clause Private Shared Default Firstprivate Lastprivate Reduction
125 기본데이터유효범위 유효범위가지정되지않은변수는기본적으로공유됨 서브루틴내의병렬영역에서사용되는자동변수는 shared 동적할당변수는 shared Default Private 루프인덱스 Fortran: 병렬영역의정적범위에서순차루프인덱스도 private C/C++: 정적범위에서순차루프인덱스는기본 shared! 병렬영역에서호출되는서브루틴의지역변수 (but, save (static) 변수는 shared) C/C++: value parameter 병렬영역의정적범위에서선언된자동변수
126 clause : private private(var1, var2, ) 지정된변수를스레드끼리공유하는것방지 private 변수는병렬영역내에서만정의됨 병렬영역밖에서초기화할수없음 (à firstprivate) 병렬영역이끝나면서사라짐 (à lastprivate) private 선언을고려해야하는변수 병렬영역내에서값을할당받는변수!$OMP PARALLEL shared(a) private(myid, x) myid = OMP_GET_THREAD_NUM() x = work(myid) IF (x<1.0) THEN a(myid) = x ENDIF!$OMP END PARALLEL
127 clause : shared, default (1/2) shared(var1, var2, ) 지정된변수를모든스레드가공유하도록함 default (private shared none) private 또는 shared 로선언되지않은변수의기본적 인유효범위지정 parallel do(for) 구문 : 선언과무관하게루프인덱스는항상 default 선언과무관하게루프인덱스는항상 private default(none): 모든변수는 shared 또는 private 으로선언되어야함 C : default(shared none)
128 clause : shared, default (2/2)!$OMP PARALLEL shared(a) private(myid, x) myid = OMP_GET_THREAD_NUM() x = work(myid) IF (x<1.0) THEN a(myid) = x ENDIF!$OMP END PARALLEL!$OMP PARALLEL default(private) shared(a) myid = OMP_GET_THREAD_NUM() x = work[myid] IF (x<1.0) THEN a[myid] = x ENDIF!$OMP END PARALLEL
129 clause : firstprivate (1/2) firstprivate(var1, var2, ) private 변수처럼각스레드에개별적으로변수생성 각스레드마다순차영역에서가져온값으로초기화
130 clause : firstprivate (2/2)!$OMP PARALLEL!$OMP DO PRIVATE (C) DO J=1,M DO I=2,N-1 C(I)=SQRT(1.0+B(I,J)**2) ENDDO DO I=1,N A(I,J)=SQRT(B(I,J)**2+C(I)**2) ENDDO ENDDO!$OMP END PARALLEL!$OMP PARALLEL!$OMP DO FIRSTPRIVATE (C) DO J=1,M DO I=2,N-1 C(I)=SQRT(1.0+B(I,J)**2) ENDDO DO I=1,N A(I,J)=SQRT(B(I,J)**2+C(I)**2) ENDDO ENDDO!$OMP END PARALLEL C(1), C(N)??
131 clause : lastprivate (1/2) lastprivate(var1, var2, ) private 변수처럼각스레드에개별적으로변수생성 순차실행에서마지막계산에해당되는값즉, 마지막반복실행의값을마스터스레드에게넘겨줌
132 clause : lastprivate (2/2)!$OMP PARALLEL!$OMP DO FIRSTPRIVATE (C) DO J=1,M DO I=2,N-1 C(I)=SQRT(1.0+B(I,J)**2) ENDDO DO I=1,N A(I,J)=SQRT(B(I,J)**2+C(I)**2) ENDDO ENDDO IF(J.EQ. M+1) THEN DO I=1,N X(I) = C(I) ENDDO ENDIF!$OMP END PARALLEL!$OMP PARALLEL!$OMP DO FIRSTPRIVATE (C) &!$ LASTPRIVATE(J, C) DO J=1,M DO I=2,N-1 C(I)=SQRT(1.0+B(I,J)**2) ENDDO DO I=1,N A(I,J)=SQRT(B(I,J)**2+C(I)**2) ENDDO ENDDO IF(J.EQ. M+1) THEN DO I=1,N X(I) = C(I) ENDDO ENDIF!$OMP END PARALLEL
133 clause : reduction (1/4) reduction(operator intrinsic:var1, var2, ) reduction 변수는 shared 배열가능 (Fortran only): deferred shape, assumed shape array 사용불가 C 는 scalar 변수만가능 각스레드에복제돼연산에따라다른값으로초기화되고 ( 표참조 ) 병렬연산수행 다중스레드에서병렬로수행된계산결과를환산해최종 결과를마스터스레드로내놓음
134 clause : reduction (2/4)!$OMP DO reduction(+:sum) DO i = 1, 100 sum = sum + x(i) ENDDO Thread 0 Thread 1 sum0 = 0 DO i = 1, 50 sum0 = sum0 + x(i) ENDDO sum1 = 0 DO i = 51, 100 sum1 = sum1 + x(i) ENDDO sum = sum0 + sum1
135 clause : reduction (3/4) Reduction Operators : Fortran Operator Data Types 초기값 + * -.AND..OR. integer, floating point (complex or real) integer, floating point (complex or real) integer, floating point (complex or real) logical logical TRUE..FALSE..EQV. logical.true..neqv. logical.false. MAX integer, floating point (real only) 가능한최소값 MIN integer, floating point (real only) 가능한최대값 IAND integer all bits on IOR integer 0 IEOR integer 0
136 clause : reduction (4/4) Reduction Operators : C Operator Data Types 초기값 + * - & integer, floating point integer, floating point integer, floating point integer all bits on integer 0 ^ integer 0 && integer 1 integer 0
137 reduction: Fortran!$OMP PARALLEL DO REDUCTION(+:SUM) PRIVATE(X) DO I = 1, NUM_STEPS X = (I-0.5)*STEP SUM = SUM + 4.0/(1.0+X*X) ENDDO!$OMP END PARALLEL DO PI = SUM*STEP
138 reduction: C #pragma omp parallel for reduction(+:sum) private(x) for (i=1;i<= num_steps; i++){ x = (i-0.5)*step; sum = sum + 4.0/(1.0+x*x); } pi = step * sum;
139 지시어와 clauses : 요약 (1/2) 지시어 Clause parallel do/for sections single parallel parallel do/for sections if private shared default firstprivate lastprivate reduction copyin schedule ordered nowait
140 지시어와 clauses : 요약 (2/2) 다음지시어들은 clause 를사용하지않는다. master critical barrier atomic ordered threadprivate flush
141 MPI 를이용한병렬화
142 메시지패싱 (1/2) 프로세스들간에데이터를공유하기위해데이터 ( 메시지 ) 를송 수신하여통신하는방식 병렬화를위한작업할당, 데이터분배, 통신의운용등모든것을프로그래머가담당 : 어렵지만유용성좋음 (Very Flexible) 한프로세스메모리의데이터를다른프로세스의메모리로복사하는방식으로메시지전달 시스템버퍼를이용한비동기 (asynchronous) 통신가능 메시지패싱라이브러리 : MPI, PVM
143 메시지패싱 (2/2) Processor 1 Processor 2 Process a Application send DATA Process b Application receive DATA system buffer DATA system buffer DATA
144 MPI 란무엇인가? 분산메모리환경에서메시지패싱병렬컴퓨팅을위해표준화된라이브러리규약 Message Passing Interface 데이터통신을위한함수 ( 서브루틴 ) 들의라이브러리 MPI-1 표준마련 (MPI Forum) : 1994년 MPI-2 : 1997년
145 MPI 프로그램의기본구조 (1/3) include MPI header file variable declarations initialize the MPI environment do computation and MPI communication calls close MPI environment
146 MPI 프로그램의기본구조 (2/3) PROGRAM skeleton INCLUDE mpif.h INTEGER ierr, rank, size CALL MPI_INIT(ierr) CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) CALL MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)! your code here CALL MPI_FINALIZE(ierr) END
147 MPI 프로그램의기본구조 (3/3) /* program skeleton*/ #include mpi.h void main(int argc, char *argv[]){ int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); /* your code here */ } MPI_Finalize();
148 MPI 헤더파일 헤더파일삽입 Fortran INCLUDE mpif.h C #include mpi.h MPI 서브루틴과함수의프로토타입선언 매크로, MPI 관련인수, 데이터타입정의 /applic/mpi/[mpi]/[compile]/include
149 MPI 루틴의호출과리턴값 (1/2) MPI 루틴의호출 Fortran Format Example Error code CALL MPI_XXXXX(parameter,,ierr) CALL MPI_INIT(ierr) Returned as ierr parameter, MPI_SUCCESS if successful Format Example Error code C err = MPI_Xxxxx(parameter, ); MPI_Xxxxx(parameter, ); err = MPI_Init(&argc, &argv); Returned as err, MPI_SUCCESS if successful
150 MPI 루틴의호출과리턴값 (2/2) MPI 루틴의리턴값 호출된 MPI 루틴의성공여부를알려주는에러코드리턴 성공적으로호출되었으면정수형상수 MPI_SUCCESS 리턴 MPI_SUCCESS는헤더파일에선언되어있음 모든 Fortran 서브루틴은마지막인수가에러코드 Fortran C INTEGER ierr CALL MPI_INIT(ierr) IF(ierr.EQ. MPI_SUCCESS) THEN ENDIF int err; err = MPI_Init(&argc, &argv); if (err == MPI_SUCCESS){ }
151 MPI 초기화 Fortran CALL MPI_INIT(ierr) C int MPI_Init(&argc, &argv) MPI 환경초기화 MPI 루틴중가장먼저오직한번반드시호출되어야함
152 커뮤니케이터 (1/3) 서로통신가능한프로세스집합을나타냄같은커뮤니케이터를가지는프로세스들끼리만통신가능모든 MPI 통신루틴에는커뮤니케이터인수가포함 MPI_COMM_WORLD 프로그램실행시정해진사용가능한모든프로세스를포함하는커뮤니케이터 MPI_Init이호출될때정의됨
153 커뮤니케이터 (2/3) 프로세스랭크 같은커뮤니케이터에속한프로세스의식별번호 프로세스가 n 개있으면 0 부터 n-1 까지번호할당 메시지의송신자와수신자를나타내기위해사용 프로세스랭크가져오기 Fortran C CALL MPI_COMM_RANK(comm, rank, ierr) MPI_Comm_rank(MPI_Comm comm, int *rank); 커뮤니케이터 comm 에서이루틴을호출한프로세스의프로세스랭크출력
154 커뮤니케이터 (3/3) 커뮤니케이터사이즈 커뮤니케이터에포함된프로세스들의총개수 커뮤니케이터사이즈가져오기 Fortran C CALL MPI_COMM_SIZE(comm, size, ierr) MPI_Comm_size(MPI_Comm comm, int *size); 루틴을호출되면커뮤니케이터 comm 의사이즈를인수 size 를통해리턴
155 MPI 프로그램종료 Fortran CALL MPI_FINALIZE(ierr) C int MPI_Finalize(); 모든 MPI 자료구조정리 모든프로세스들에서마지막으로한번호출되어야함 프로세스를종료시키는것은아님
156 MPI 메시지의구성 데이터 + 봉투 데이터 ( 버퍼, 개수, 데이터타입 ) 버퍼 : 수신 ( 송신 ) 데이터의변수명 개수 : 수신 ( 송신 ) 데이터의개수 데이터타입 : 수신 ( 송신 ) 데이터의데이터타입 봉투 ( 수신자 ( 송신자 ), 꼬리표, 커뮤니케이터 ) 수신자 ( 송신자 ) : 수신 ( 송신 ) 프로세스랭크 꼬리표 : 수신 ( 송신 ) 데이터를나타내는고유한정수 커뮤니케이터 : 송신, 수신프로세스들이포함된프로세스그룹
157 송신과수신 점대점통신 Blocking Communication Non-blocking Communication 집합통신 Broadcast Scatter Gather Reduce
158 점대점통신 Communicator source 3 4 destination 두프로세스사이의통신송신프로세스는수신프로세스로메시지를보냄수신프로세스는메시지를받음통신은커뮤니케이터내에서이루어짐프로세스랭크를이용해송신 / 수신프로세스를확인
159 블록킹통신 Fortran MPI_SEND (buf, count, datatype, dest, tag, comm,ierr) MPI_RECV (buf, count, datatype, source, tag, comm, status, ierr) C MPI_Send (&buf, count, datatype, dest, tag, comm) MPI_Recv (&buf, count, datatype, source, tag, comm, &status)
160 블록킹송신 C MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Fortran MPI_SEND(buf, count, datatype, dest, tag, comm, ierr) (CHOICE) buf : 송신버퍼의시작주소 (IN) INTEGER count : 송신될원소개수 (IN) INTEGER datatype : 각원소의 MPI 데이터타입 ( 핸들 ) (IN) INTEGER dest : 수신프로세스의랭크 (IN) 통신이불필요하면 MPI_PROC_NULL INTEGER tag : 메시지꼬리표 (IN) INTEGER comm : MPI 커뮤니케이터 ( 핸들 ) (IN) MPI_SEND(a, 50, MPI_REAL, 5, 1, MPI_COMM_WORLD, ierr)
161 블록킹수신 C Fortran MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) MPI_RECV(buf, count, datatype, source, tag, comm, status, ierr) (CHOICE) buf : 수신버퍼의시작주소 (OUT) INTEGER count : 수신될원소개수 (IN) INTEGER datatype : 각원소의 MPI 데이터타입 ( 핸들 ) (IN) INTEGER source : 송신프로세스의랭크 (IN) 통신이불필요하면 MPI_PROC_NULL INTEGER tag : 메시지꼬리표 (IN) INTEGER comm : MPI 커뮤니케이터 ( 핸들 ) (IN) INTEGER status(mpi_status_size) : 수신된메시지의정보저장 (OUT) MPI_RECV(a,50,MPI_REAL,0,1,MPI_COMM_WORLD,status,ierr)
162 논 - 블록킹통신 Fortran C MPI_ISEND (buf,count,datatype,dest,tag,comm,request,ierr) MPI_IRECV (buf,count,datatype,source,tag,comm,request,ierr) MPI_WAIT (request,status,ierr) MPI_Isend (&buf,count,datatype,dest,tag,comm,&request) MPI_Irecv (&buf,count,datatype,source,tag,comm,&request) MPI_Wait (&request,&status)
163 집합통신 P3 P2 P1 P0 A A A A A broadcast data P3 P2 P1 P0 D C B A reduce A*B*C*D P3 P2 P1 P0 D C B A D C B A scatter P3 P2 P1 P0 D C B A all reduce A*B*C*D A*B*C*D A*B*C*D A*B*C*D gather *:some operator *:some operator P3 P2 P1 P0 D C B A D C B A D C B A D C B A D C B A allgather P3 P2 P1 P0 D C B A scan A*B*C*D A*B*C A*B A *:some operator P3 P2 P1 P0 D3 D2 D1 D0 C3 C2 C1 C0 B3 B2 B1 B0 A3 A2 A1 A0 D3 C3 B3 A3 D2 C2 B2 A2 D1 C1 B1 A1 D0 C0 B0 A0 alltoall reduce scatter A3*B3*C3*D3 A2*B2*C2*D2 A1*B1*C1*D1 A0*B0*C0*D0 *:some operator P3 P2 P1 P0 D3 D2 D1 D0 C3 C2 C1 C0 B3 B2 B1 B0 A3 A2 A1 A0
164 MPI 서브루틴들 Type 서브루틴개수 ᆞPoint-to-Point MPI_SEND, MPI_RECV, MPI_WAIT, 35 ᆞCollective Communication MPI_BCAST, MPI_GATHER, MPI_REDUCE, 30 ᆞDerived Data type MPI_TYPE_CONTIGUOUS, MPI_TYPE_COMMIT, 21 ᆞTopology MPI_CART_CREATE, MPI_GRAPH_CREATE, 16 ᆞCommunicator MPI_COMM_SIZE, MPI_COMM_RANK, 17 ᆞProcess Group MPI_GROUP_SIZE, MPI_GROUP_RANK, 13 ᆞEnvironment Management MPI_INIT, MPI_FINALIZE, MPI_ABORT, 18 ᆞFile MPI_FILE_OPEN, MPI_FILE_READ_AT, 19 ᆞInformation MPI_INFO_GET, MPI_INFO_SET, 9 ᆞIBM Exntension MPE_IBCAST, MPE_IGATHER, 14
165 Example : PI 계산 (1/6) 병렬코드 : Fortran PROGRAM pi_cal INCLUDE mpif.h INTEGER ierr, nprocs, myrank,tag INTEGER status(mpi_status_size) INTEGER seed, tpoints, in_circle DOUBLE PRECISION pi, x, y, r, recv, RAND tpoints = CALL MPI_INIT(ierr) CALL MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr) CALL MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr)
166 Example : PI 계산 (2/6) in_circle = 0 seed=5 CALL SRAND(seed*myrank) DO j = myrank+1,tpoints,nprocs x = RAND()-0.5 y = RAND()-0.5 r = SQRT(x*x + y*y) IF (r<0.5) THEN in_circle = in_circle + 1 ENDIF ENDDO pi = 4.0*in_circle/tpoints
167 Example : PI 계산 (3/6) IF(myrank /= 0) THEN CALL MPI_SEND(pi, 1, MPI_DOUBLE_PRECISION, 0, 1, & ENDIF MPI_COMM_WORLD, ierr) IF(myrank==0) THEN ENDIF DO j = 1, nprocs-1 ENDDO CALL MPI_RECV(recv, 1, MPI_DOUBLE_PRECISION, j, 1, & pi = pi + recv PRINT *, ' pi = ', pi CALL MPI_FINALIZE(ierr) END MPI_COMM_WORLD, status, ierr)
168 Example : PI 계산 (4/6) 병렬코드 : C #include <stdio.h> #include <stdlib.h> #include mpi.h #include <math.h> main(int argc, char *argv[]){ int j, nprocs, myrank,tag; MPI_Status status; int tpoints, in_circle; double pi, seed, x, y, r, recv; tpoints = ; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD,&nprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
169 Example : PI 계산 (5/6) in_circle = 0; seed=0.5; srand(seed*myrank); for(j=myrank; j<tpoints; j+=nprocs){ x = (double)rand()/rand_max - 0.5; y = (double)rand()/rand_max - 0.5; r = sqrt(x*x + y*y); if (r<=0.5) in_circle = in_circle + 1; } pi = 4.0*in_circle/tpoints;
170 Example : PI 계산 (6/6) if(myrank!= 0) MPI_Send(&pi,1,MPI_DOUBLE,0,1,MPI_COMM_WORLD); } if(myrank==0){ for(j=1; j<=nprocs-1; j++){ MPI_Recv(&recv, 1, MPI_DOUBLE, j, 1, MPI_COMM_WORLD, &status); pi = pi + recv; } printf( pi = %f\n, pi); } MPI_Finalize();
<4D F736F F F696E74202D FC0CFB9DD5FBAB4B7C4C7C1B7CEB1D7B7A1B9D62E >
컴퓨팅브릿지일반병렬프로그래밍 김정한 목표 병렬프로그래밍을하기위해필요한사전지식을 전달하고, OpenMP와 MPI의개념및사용법을소개하여간단한병렬프로그램을직접작성할수있게한다. INDEX 1. 병렬프로그래밍개요 2. OpenMP 사용법 3. MPI 사용법 01. 병렬프로그래밍개요 병렬프로그래밍과관련된개념을정리하고병렬프로그래밍모델, 성능측정, 그리고병렬프로그램의작성과정에대해알아본다.
More information국가슈퍼컴퓨팅 공동활용체제구축
Partnership & Leadership for the nationwide SuperComputing Infrastructure Parallel Programming PLSI 사용자 응용기술지원팀 컴퓨팅브릿지 정진우 PLSI 사용자 응용기술지원팀 Outline Introduction to Parallel Programming Introduction to
More informationMicrosoft Word - 3부A windows 환경 IVF + visual studio.doc
Visual Studio 2005 + Intel Visual Fortran 9.1 install Intel Visual Fortran 9.1 intel Visual Fortran Compiler 9.1 만설치해서 DOS 모드에서실행할수있지만, Visual Studio 2005 의 IDE 를사용하기위해서는 Visual Studio 2005 를먼저설치후 Integration
More informationPowerPoint Presentation
MPI 를이용한병렬프로그래밍기초 : Point-to-Point Communication Hongsuk Yi KISTI Supercomputing Center 2009-11-09 1 MPI 란무엇인가? MPI Message Passing Interface 병렬프로그래밍을위해표준화된데이터통신라이브러리 MPI-1 표준마련 (MPI Forum) : 1994 년 Procs
More informationParallel Programming 박필성 IT 대학컴퓨터학과
Parallel Programming 박필성 IT 대학컴퓨터학과 목차 Why Parallel? Parallel Computers Parallel Processing Parallel Programming Models Parallel Programming OpenMP Standard MPI Standard Related Topics & Questions Why
More information6주차.key
6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationfprintf(fp, "clf; clear; clc; \n"); fprintf(fp, "x = linspace(0, %d, %d)\n ", L, N); fprintf(fp, "U = [ "); for (i = 0; i <= (N - 1) ; i++) for (j = 0
병렬계산을이용한열방정식풀기. 1. 처음 병렬계산을하기전에 C 언어를이용하여명시적유한차분법으로하나의열방정식을풀어본 다. 먼저 C 로열방정식을이해한다음초기조건만다르게하여클러스터로여러개의열방 정식을풀어보자. 2. C 를이용한명시적유한차분법으로열방적식풀기 열방정식을풀기위한자세한이론은앞서다룬 Finite-Difference method 을보기로하고 바로식 (1.10)
More informationMicrosoft PowerPoint - 병렬표준.pptx
Parallel Programming & MPI 박필성 수원대학교 IT 대학컴퓨터학과 목차 Why Parallel? Parallel Processing Parallel Programming MPI의기본개념 MPI 표준 MPI 프로그램및실행 Related Topics & Questions Why Parallel? (1) Why parallel computing?
More information2011 PLSI 병렬컴퓨팅경진대회문제 01. 대학원팀 02. 학부팀 - 경진내용 - 경진환경 주어진순차코드를병렬화하여성능향상도 ( 획득점수 ) 를측정 점수 = ( 순차코드수행시간 ) / ( 병렬화코드수행시간 ) 프로그래밍언어 : C, Fortran 순차코드는 50 라
2011 PLSI 병렬컴퓨팅경진대회문제 01. 대학원팀 02. 학부팀 - 경진내용 - 경진환경 주어진순차코드를병렬화하여성능향상도 ( 획득점수 ) 를측정 점수 = ( 순차코드수행시간 ) / ( 병렬화코드수행시간 ) 프로그래밍언어 : C, Fortran 순차코드는 50 라인내외로작성하여제공됨 참가자들은컴파일러 (intel, gnu, pgi) 선택가능 시간제한 6
More informationParallel Programming & MPI 박필성 수원대학교 IT 대학컴퓨터학과
Parallel Programming & MPI 박필성 수원대학교 IT 대학컴퓨터학과 목차 Why Parallel? Parallel Computers Parallel Processing Parallel Programming MPI의기본개념 MPI 표준 MPI 프로그램및실행 Related Topics & Questions Why Parallel? (1) Why
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationuntitled
int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More informationMicrosoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
More informationMicrosoft PowerPoint - [2009] 02.pptx
원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include
More informationuntitled
Embedded System Lab. II Embedded System Lab. II 2 RTOS Hard Real-Time vs Soft Real-Time RTOS Real-Time, Real-Time RTOS General purpose system OS H/W RTOS H/W task Hard Real-Time Real-Time System, Hard
More informationMicrosoft PowerPoint - chap12-고급기능.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로
More informationFigure 5.01
Chapter 4: Threads Yoon-Joong Kim Hanbat National University, Computer Engineering Department Chapter 4: Multithreaded Programming Overview Multithreading Models Thread Libraries Threading Issues Operating
More information< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationMicrosoft PowerPoint - chap10-함수의활용.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과
More informationMicrosoft PowerPoint - chap11-포인터의활용.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationSRC PLUS 제어기 MANUAL
,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More information목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate
ALTIBASE HDB 6.1.1.5.6 Patch Notes 목차 BUG-39240 offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG-41443 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate 한뒤, hash partition
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More informationSMB_ICMP_UDP(huichang).PDF
SMB(Server Message Block) UDP(User Datagram Protocol) ICMP(Internet Control Message Protocol) SMB (Server Message Block) SMB? : Microsoft IBM, Intel,. Unix NFS. SMB client/server. Client server request
More information제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.
제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
More informationPowerPoint 프레젠테이션
Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2
More informationMicrosoft Word - cover.docx
Parallel Programming using MPICH2 차 례 1. Parallel Programming 환경구축 - 1 2. Parallel Programming using MPICH2-13 3. 병렬처리예제프로그램 - 22 4. 참고자료 - 23 1. Parallel Programming 환경구축병렬프로그래밍을위하여널리사용되는 Message Programming
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More informationMicrosoft PowerPoint - additional01.ppt [호환 모드]
1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능
More information<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>
뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More information[Brochure] KOR_TunA
LG CNS LG CNS APM (TunA) LG CNS APM (TunA) 어플리케이션의 성능 개선을 위한 직관적이고 심플한 APM 솔루션 APM 이란? Application Performance Management 란? 사용자 관점 그리고 비즈니스 관점에서 실제 서비스되고 있는 어플리케이션의 성능 관리 체계입니다. 이를 위해서는 신속한 장애 지점 파악 /
More informationC 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12
More information차례. MPI 소개. MPI 를이용한병렬프로그래밍기초. MPI 를이용한병렬프로그래밍실제 4. MPI 병렬프로그램예제 l 부록 : MPI- l 용어정리 / 참고자료 Supercomputing Center 제 장 MPI 소개 MPI 를소개하고 MPI 를이해하는데 필요한기본
MPI 를이용한 병렬프로그래밍 KISTI 슈퍼컴퓨팅센터 목 표 MPI 를활용해메시지패싱기반의병렬 프로그램작성을가능하도록한다. Supercomputing Center 차례. MPI 소개. MPI 를이용한병렬프로그래밍기초. MPI 를이용한병렬프로그래밍실제 4. MPI 병렬프로그램예제 l 부록 : MPI- l 용어정리 / 참고자료 Supercomputing Center
More information<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>
2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More informationMicrosoft PowerPoint - 사용자지침서2
PLSI 자원사용을위한가이드 2010 년 9 월 KISTI 슈퍼컴퓨팅본부슈퍼컴퓨터인프라팀 1 목차 PLSI 사업과 PLSI 자원 1. PLSI 사업 4 2. PLSI 자원 4 PLSI 자원현황 1. PLSI 자원개요 6 2. PLSI 자원연동구성 7 3. PLSI 자원통합소프트웨어스택 8 PLSI 자원사용준비하기 1. 계정발급 10 2. 로그인방법 11 3.
More information슬라이드 1
Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치
More information<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>
SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......
More information<C6F7C6AEB6F5B1B3C0E72E687770>
1-1. 포트란 언어의 역사 1 1-2. 포트란 언어의 실행 단계 1 1-3. 문제해결의 순서 2 1-4. Overview of Fortran 2 1-5. Use of Columns in Fortran 3 1-6. INTEGER, REAL, and CHARACTER Data Types 4 1-7. Arithmetic Expressions 4 1-8. 포트란에서의
More information강의10
Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationMAX+plus II Getting Started - 무작정따라하기
무작정 따라하기 2001 10 4 / Version 20-2 0 MAX+plus II Digital, Schematic Capture MAX+plus II, IC, CPLD FPGA (Logic) ALTERA PLD FLEX10K Series EPF10K10QC208-4 MAX+plus II Project, Schematic, Design Compilation,
More information목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More informationPowerPoint 프레젠테이션
Deep Learning 작업환경조성 & 사용법 ISL 안재원 Ubuntu 설치 작업환경조성 접속방법 사용예시 2 - ISO file Download www.ubuntu.com Ubuntu 설치 3 - Make Booting USB Ubuntu 설치 http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/
More informationMicrosoft PowerPoint - chap13-입출력라이브러리.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,
More informationMicrosoft PowerPoint - chap-11.pptx
쉽게풀어쓴 C 언어 Express 제 11 장포인터 컴퓨터프로그래밍기초 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 컴퓨터프로그래밍기초 2 포인터란? 포인터 (pointer): 주소를가지고있는변수 컴퓨터프로그래밍기초 3 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다.
More informationPowerPoint 프레젠테이션
Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용
More information슬라이드 1
정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함
More informationPowerPoint 프레젠테이션
Reasons for Poor Performance Programs 60% Design 20% System 2.5% Database 17.5% Source: ORACLE Performance Tuning 1 SMS TOOL DBA Monitoring TOOL Administration TOOL Performance Insight Backup SQL TUNING
More informationAPI STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum
API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date
More informationMS-SQL SERVER 대비 기능
Business! ORACLE MS - SQL ORACLE MS - SQL Clustering A-Z A-F G-L M-R S-Z T-Z Microsoft EE : Works for benchmarks only CREATE VIEW Customers AS SELECT * FROM Server1.TableOwner.Customers_33 UNION ALL SELECT
More informationOracle9i Real Application Clusters
Senior Sales Consultant Oracle Corporation Oracle9i Real Application Clusters Agenda? ? (interconnect) (clusterware) Oracle9i Real Application Clusters computing is a breakthrough technology. The ability
More information이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론
이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN
More informationMicrosoft PowerPoint - chap03-변수와데이터형.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.
More informationPowerPoint Presentation
Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음
More information02장.배열과 클래스
---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :
More information이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
More informationMicrosoft PowerPoint - 알고리즘_5주차_1차시.pptx
Basic Idea of External Sorting run 1 run 2 run 3 run 4 run 5 run 6 750 records 750 records 750 records 750 records 750 records 750 records run 1 run 2 run 3 1500 records 1500 records 1500 records run 1
More information1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation
1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation Board(EVB B/D) 들과 TCP/IP Protocol로연결되며, 연결된 TCP/IP
More informationPowerPoint 프레젠테이션
Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.
More information1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문
1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1. 표준입출력 표준입출력 입력 : 키보드, scanf 함수 출력 : 모니터, printf 함수문제 : 정수값 2개를입력받고두값사이의값들을더하여출력하라. #include int main(void) int Num1, Num2; int
More informationMicrosoft PowerPoint - o8.pptx
메모리보호 (Memory Protection) 메모리보호를위해 page table entry에 protection bit와 valid bit 추가 Protection bits read-write / read-only / executable-only 정의 page 단위의 memory protection 제공 Valid bit (or valid-invalid bit)
More information<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>
i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,
More information비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
More informationC++-¿Ïº®Çؼ³10Àå
C C++. (preprocessor directives), C C++ C/C++... C++, C. C++ C. C C++. C,, C++, C++., C++.,.. #define #elif #else #error #if #itdef #ifndef #include #line #pragma #undef #.,.,. #include #include
More informationInteg
HP Integrity HP Chipset Itanium 2(Processor 9100) HP Integrity HP, Itanium. HP Integrity Blade BL860c HP Integrity Blade BL870c HP Integrity rx2660 HP Integrity rx3600 HP Integrity rx6600 2 HP Integrity
More information제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.
제 11 장포인터 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습합니다.
More information슬라이드 1
마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***
More informationRaspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로 SD 카드리더기 HDM I 케이블모니터
운영체제실습 Raspbian 설치 2017. 3 표월성 wspyo74@naver.com cherub.sungkyul.ac.kr 목차 Ⅰ. 설치 1. 라즈비안 (Raspbian 설치 ) 2. 설치후, 설정 설정사항 Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로
More informationAPI 매뉴얼
PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned
More informationuntitled
Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II
More informationMicrosoft PowerPoint - chap04-연산자.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에
More information슬라이드 1
2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)
More informationMicrosoft Word - ExecutionStack
Lecture 15: LM code from high level language /* Simple Program */ external int get_int(); external void put_int(); int sum; clear_sum() { sum=0; int step=2; main() { register int i; static int count; clear_sum();
More information02 C h a p t e r Java
02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER
More informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More informationMicrosoft PowerPoint - o4.pptx
목표 쓰레드 (thread) 개념소개 Thread API Multithreaded 프로그래밍관련이슈 4 장. 쓰레드 2 4.1 개요 쓰레드 쓰레드 (Thread ) CPU 이용의기본실행단위 단일쓰레드 (Single threaded) Processes 전통적인프로세스 한개의실행단위로구성 다중쓰레드 (Multithreaded) Process 여러개의실행쓰레드를갖는프로세스
More information제1장 Unix란 무엇인가?
1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.
More informationPowerPoint 프레젠테이션
@ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More informationPowerPoint 프레젠테이션
Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])
More informationAmazon EBS (Elastic Block Storage) Amazon EC2 Local Instance Store (Ephemeral Volumes) Amazon S3 (Simple Storage Service) / Glacier Elastic File Syste (EFS) Storage Gateway AWS Import/Export 1 Instance
More information컴파일러
YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",
More informationuntitled
시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000
More informationKNK_C_05_Pointers_Arrays_structures_summary_v02
Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",
More informationchap10.PDF
10 C++ Hello!! C C C++ C++ C++ 2 C++ 1980 Bell Bjarne Stroustrup C++ C C++ C, C++ C C 3 C C++ (prototype) (type checking) C C++ : C++ 4 C C++ (prototype) (type checking) [ 10-1] #include extern
More informationT100MD+
User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More information10주차.key
10, Process synchronization (concurrently) ( ) => critical section ( ) / =>, A, B / Race condition int counter; Process A { counter++; } Process B { counter ;.. } counter++ register1 = counter register1
More information