본문 바로가기

전체 글

(64)
OpenMP 병렬 처리 : 공유변수 문제 (레이스 컨디션) 해결 드디어 세 번째 포스팅 공유 변수 문제의 해결입니다. 앞서 포스팅에서는 OpenMP를 이용할 때 공유 변수 문제를 다루었죠. 2020.10.19 - [Computer & Parallel Processing] - OpneMP 병렬 처리 : 공유변수 문제 (레이스 컨디션) OpneMP 병렬 처리 : 공유변수 문제 (레이스 컨디션) 2020/10/13 - [Computer & Parallel Processing] - OpenMP를 이용한 병렬 처리 (parallel for) OpenMP를 이용한 병렬처리 (parallel for) OpenMP를 이용한 병렬 처리 기법은 다양한 방법이 있습니다. 그중 반복문.. sbinroom.tistory.com 이번에는 해당 문제를 해결해 보겠습니다. 사실 첫 포스팅부터 해..
Std::Vector 사용하기 C++의 기초 문법이라는 험난한 산들을 넘고 나면, Standard Template Library (STL)이라는 산이 기다립니다. 그동안 넘어온 산들에 비하면 진입 장벽이 높지 않으나 잘못 사용하면 독이 되기도 하는 양날의 검이기도 합니다. 이 포스팅에서는 STL 중 가장 쉽고, 널리 사용되는 Vector에 대해서 포스팅 하겠습니다. 먼저 사용법을 언급하고, 장점을 보여 드린 뒤, 단점을 보여드리려고 했는데, 예제를 못 만들겠어요.. 컴파일러 개발자들 일 잘하네.. 주의점을 보여드리겠습니다. Vector를 개념적으로 표현하면 동적배열 입니다. 배열을 쓰는데 그 크기가 동적으로 변화 하며, 사용자가 원하는 대로 늘려서 쓸수 있습니다. 장점은 귀찮기만 한 메모리 관리를 컴파일러 혹은 OS가 알아서 해준다는..
배열의 초기화 ( memset) 일반적인 컴퓨팅 디바이스에서 배열의 초기화는 필요 없는 경우가 많습니다. 소프트웨어 엔지니어가 신경 쓰지 않아도 알아서 0으로 초기화해주기도 하고, 알고리즘 구조상 필요 없는 경우도 많습니다. 하지만 만약 Arm과 같은 프로세서를 이용한다면 특별히 초기화에 신경 써 줄 필요가 있기도 하고, 사실 초기화 시간이 오래 걸리는 작업도 아니기에 해주는 게 좋습니다. 먼저 C와 C++에서 모두 쓸수 있는 방법으로 시작하죠. 배열을 초기화하는 가장 간단한 방식은 아래 코드와 같이 반복문으로 초기화하는 거죠. 간단하고 가독성도 높습니다. 무엇보다 아래 코드에서와 같이 원하는 값으로 쉽게 설정할 수 있습니다.(input) #include using namespace std; const int N = 1024; int ..
c++ STL sort descending 내림차순 정렬 이번 글은 간단한 포스트 입니다. 알고리듬 공부를 하다 보니 sort를 내림차순으로 정렬하는 팁이 있더군요. 일반적인 sort 함수는 오름차순으로 정렬하는 점을 이용해서, 해당 책의 저자는 데이터 입력시 데이터를 음수화 해서 최적화를 시도했습니다. 그걸 보고 문득!!! C++에서 제공하는 내림차순 정렬 기능과 제안해준 기능의 성능차는 어떻게 될까하는 의문이 생겨서 시험해본 내역 입니다. 일반 c++ sort function 을 내림차순으로 실행하려하면 세번째 argument에 옵션을 추가하면 됩니다. sort function의 사용법과 옵션에 관련된 내용은 적합한 링크로 갈음합니다. http://www.cplusplus.com/reference/algorithm/sort/ sort - C++ Refere..
프로세스 관리툴 : 리눅스에서 프로그램 강제 종료하기 (htop) 컴퓨터를 이용하다 보면 다양한 이유로 컴퓨터가 느려질 수 있죠. 그 이유 중 가장 높은 확률로 발생하는 문제는 특정 프로세스가 CPU를 과도하게 이용하거나, 메모리를 너무 많이 써서 SWAP을 이용하게 된 경우죠. 이럴 때 우린 프로세스 관리자를 켜고, 문제가 된 프로세스를 강제 종료시킵니다. 그런데 만약 이런 문제가 터미널로 접속하여 이용하는 고성능 컴퓨팅 머신 혹은 AWS 서버 등에서 발생하면 어떻게 해야 할까요. 우리에겐 비주얼로 메모리와 CPU의 사용량을 보여줄 툴이 없습니다. 숙련자는 "ps" 커맨드를 이용하여, 문제가 된 프로세스를 찾고 "kill" 명령어로 프로세스를 강제 종료시킵니다. 방법은 아래와 같습니다. 그보다 쉬운 툴을 이용하는 방법은 구분선 밑에 있습니다. 터미널에서 구동된 프로세..
OpenMP 병렬 처리 : 공유변수 문제 (레이스 컨디션) 2020/10/13 - [Computer & Parallel Processing] - OpenMP를 이용한 병렬 처리 (parallel for) OpenMP를 이용한 병렬처리 (parallel for) OpenMP를 이용한 병렬 처리 기법은 다양한 방법이 있습니다. 그중 반복문의 병렬화 방법에 대하여 글을 쓰려합니다. 다른 기법들은 간단히 익혔으나, 실제로 OpenMP를 사용하기에 적합한 방법은 para sbinroom.tistory.com 이전 글에서 OpenMP를 이용해서 for loop를 병렬처리 하는 방법에 대하여 설명하였습니다. 이 글의 예제인 소수의 개수를 세는 프로그램에서 패러렐 프로세싱의 결과가 시리얼 프로세싱과 다른 결과를 보였고, 몇 가지 키워드를 이용해 디버그 했죠. 이 글에서는 문제..
OpenMP를 이용한 병렬처리 (parallel for) OpenMP를 이용한 병렬 처리 기법은 다양한 방법이 있습니다. 그중 반복문의 병렬화 방법에 대하여 글을 쓰려합니다. 다른 기법들은 간단히 익혔으나, 실제로 OpenMP를 사용하기에 적합한 방법은 parallel for이고, 그 외의 방법은 딱히 사용처가 없거나, 일반 thread를 이용한 병렬 처리가 더 효율적이라고 생각하거든요. 그럼 큰 의미 없는 인트로는 여기까지 하고, 바로 예제를 통해 병렬 처리를 설명하겠습니다. 이번 글에서 사용한 예제는 아래 스냅샷과 같습니다. 프로그램의 목적은 입력된 변수보다 작거나 같은 소수(prime number)의 개수를 세는 프로그램입니다. 이 알고리듬은 소수의 정의인 자신보다 작은 두 개의 자연수 곱으로 자신을 만들 수 없다는 특징을 이용한 알고리듬입니다. 이 프로..
zsh profile 설정 ( HOME, END 키 맵핑 ) 언제부터인지 OSX의 기본 shell이 zsh로 변경되었더군요. 그러면서 여러 가지 변경점에 맞추어 터미널을 편하게 사용하기 위한 설정들을 포스트 합니다. 일단 profile 설정 파일의 위치는 아래와 같습니다. 해당 파일을 vi등으로 열어서 편집하시면 되겠죠. /home/[user name]/.zprofile 제 맥북의 프로파일 내용은 아래 스냅샷과 같습니다. 1. 터미널 색상 지정. 기본 터미널에서 "ls"와 같은 명령을 내리면 color가 매핑되어 있지 않아 디렉터리와 파일의 구분 등이 어렵습니다. 6,7번째 줄은 색상을 매핑하는 키워드입니다. 정확한 명령어는 아래를 참조하시고, 색상을 변경하고 싶으시면 LSCOLORS를 변경하시면 됩니다. export CLICOLOR=1 export LSCOLOR..