본문 바로가기

Houkibosi☆

스터디문제2 void omp_set_num_threads( int num )- 병렬화 스레드의 개수를 지정- 환경변수 OMP_NUM_THREADS로 쓰레드 수를 지정하는 것보다 API가 우선하여 적용된다. int omp_get_num_threads()- 현재 동작 중인 병렬 영역의 스레드 개수- 병렬 영역이 아닌 지역에서 호출되면 1을 리턴 int omp_get_max_threads()- 병렬 영역 내외에 관계없이 omp_set_num_threads 함수로 설정된 스레드 수를 리턴 int omp_get_thread_num()- 현재 실행중인 스레드 id int omp_get_num_procs()- 현재 OS에서 인식하고 있는 CPU의 개수 int omp_in_parallel()- 현재 위치가 병렬화된 영역인지 알려줌.. 더보기
스터디 문제 다음 코드의 결과를 쓰시오#include#include int main(){#pragma omp parallel num_threads(4) { printf("Hello World!\n"); } return 0;} 다음 코드의 결과를 쓰시오 #include#include int main(){ int x=0; printf("main area x: %d\n",x); omp_set_num_threads(2);#pragma omp parallel private(x) { if(omp_get_thread_num()==0) x=1; else x=2; printf("Num %d thread area x : %d\n",omp_get_thread_num(),x); } printf("main area x: %d\n",x); .. 더보기
[스터디]OpenMP Parallel for 대부분의 병렬화 패턴은 루프를 병렬화하는 것 루프 병렬화 페턴- 사용할 쓰레드 개수를 설정- pthread의 경우 pthread_create를 여러번 호출- num_threads directive - ★ 루프의 범위를 각 쓰레드에게 적절하게 배분 - 쓰레드는 각자 배분받은 할당량을 처리 - 쓰레드별로 처리한 작업을 한 곳에 모아서 정리 및 통합 이런 방식으로 루프 병렬화를 하게 되고, 특히 작업을 배분하는 일이 필수적으로 중요하다.하지만 이 작업은 번거롭고 어려운 작업이기 떄문에 시스템에서 이를 지원해주고,그것이 바로 Parallel for이다. #pragma omp parallel + #pragma omp for Static scheduling - Parallel for가 병렬화를 해주는 함수인만큼 일.. 더보기
찾은 자료들 http://en.wikipedia.org/wiki/Test-and-set http://m.dbguide.net/knowledge.db?cmd=view&boardConfigUid=19&boardUid=152316 http://ko.wikipedia.org/wiki/%EC%9E%84%EA%B3%84_%EA%B5%AC%EC%97%AD http://en.wikipedia.org/wiki/Spinlock http://blog.naver.com/PostView.nhn?blogId=yyg1368&logNo=60133065700&categoryNo=40&viewDate=&currentPage=1&listtype=0 http://blog.naver.com/PostView.nhn?blogId=hermet&logNo=11.. 더보기
13.09.30 스터디 준비 이재민 1. 동종 멀티코어시스템에서 쓰레드가 어느 코어에서 실행되는지에 따라 (캐시 계층 구조)때문에 성능에 영향을 미친다.- 같은 코어에서 실행되는 쓰레드는 그 코어의 private cache(L1) 공유- 같은 칩에서 실행되는 쓰레드는 그 침의 shared cache(L2) 공유 2. 쓰레드간 공유 데이터- 일반적으로 main()함수 밖에 선언 된 (전역변수, 글로벌 변수)는 공유됨- (힙)에 할당 된 객체들도 공유 가능- 하지만 (스택)안의 변수는 공유 불가 (만약 포인트를 이용한 공유를 할 시 문제가 발생) 3. (데이터 레이스)- 둘 또는 그 이상의 쓰레드가 같은 메모리 위치에 접근- 최소한 한 메모리 접근은 쓰기 연산- 그 메모리 접근을 제어하기 위해 쓰레드간 적절한 동기화를 수행하지 않음 4.. 더보기
캐시 지역성의 원칙- 최근 사용된 데이터 또는 명령어가 재사용되거나 근접한 데이터 또는 명령어가 재사용 됨 -> 예측 가능- 시간적 지역성(temporal locality)- 최근에 접근한 데이터는 조만간 다시 접근할 가능성이 높음- 상대적으로 작은 시간 이내에 접근 가능- 공간적 지역성(spatial locality)- 가까운 위치에 있는 데이터는 함께 접근 될 가능성이 높음- 상대적으로 가깝고 작은 시간 이내에 접근 가능 데이터- 공간의 지역성- 배열 요소(A[i])를 연속하여 접근 - 시각적 지역성- 각 이터레이션마다 sum을 접근 코드- 시간적 지역성- 명령어들을 순서대로 접근- 공간적 지역성- 루프를 반복적으로 접근 메모리 계층- 저장소의 계층적 배열- 접근의 지역성을 이용- 빠르게 저장하는 기술- .. 더보기
끄적끄적 LockFreeQueue 더보기
13. 09. 25 스터디 문제 1. 다음과 같은 수들이 정의되어 있을 때 값이 다른 Z는? int a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7; 1. z = d >> a; 2. z = g % e; 3. z = b & b; 4. z = ( c>b ) ? ++b : b; o 2. 문자형은 1바이트, 포인터형은 2바이트라고 가정한 경우, 정수형 변수 a, b의 값은? struct NODE { struct NODE* next; char name; char age; } node[3]; a = sizeof(struct NODE); b = sizeof(node); 1. a = 3, b = 4 2. a = 3,b = 12 3. a = 4, b = 3 4. a = 4, b = 12 o 3. 다음의 변수 선언 .. 더보기
숙제 P274P278 록프리, 세마포어 시간차이.P282 더보기
팀장님 과제 다음 괄호 부분을 채우시오. C 언어에서 헤더파일을 첨가하는 지시자는 ()이다. 함수 scanf()에서 표준입력으로 값을 입력 받아 변수에 저장하려면 일반 변수 앞에는 반드시 주소를 의미하는 문자 ()가 앞에 와야 한다. 문장 ()는 C 언어의 일반 문장으로 이미 사용되는 자료형을 새로운 자료형으로 정의할 수 있는 기능이다. switch 문장에서 ( ) 문장은 바로 switch 문을 종료한다. switch 문의 표현식은 자료형이 ()이어야 한다. switch 문에서 표현식과 일치하는 case가 없는 경우, 키워드 () 뒤의 문장을 실행한다. 반복 구조에서 반복을 종료하는 문장은 () 문이다. 반복문 세 종류 중에서 반복 조건검사를 몸체를 실행한 후 나중에 검사하는 문장은 () 문이다. for 문을 for.. 더보기