본문 바로가기

2021/07

OpenMP C/C++ 를 이용한 병렬 프로그래밍 개요 여기서는 여러개의 CPU 코어를 동시에 사용하는 병렬 프로그램을 만들기 위한 방법 중 하나인 OpenMP에 대해 알아봅시다. OpenMP는 여러 개의 명령문들이 동시에 실행되는 프로그램을 작성하기 위한 인터페이스 (API)로서, 여러 전처리기 및 함수들로 이루어져 있습니다. Home Latest News View Monthly Archives Tweets by OpenMP_ARB Get all the latest API specifications, technical report drafts and proposals. All the latest books, examples and tutorials to start you on www.openmp.org OpenMP로 만들어진 병렬 프로그램은 메모리를 .. 더보기
네이버 잇님들과 구글 알고리즘의 농간 블로그의 SEO관련 팁들을 좀 얻어보려고 인터넷을 돌아다니다가, 네이버 블로그 스타일로 글을 쓰면 구글 알고리즘이 싫어한다는 얘기를 보게 되었습니다. 네이버 블로그 스타일이라는 건 대략적으로 말하자면, 다수의 블로그에서 발견되는 가운데 정렬 및 지나치게 많은 문장 대비 이미지들이 있다는군요. 그리고 잇님들 어쩌고 하는 식으로 포스팅을 시작하는 것도 지양해야 한다고 하길래, 잇님이 뭔지 궁금해서 구글에 검색을 해보았습니다. ??? 검색결과 최상단에 뜬 페이지가 좀 이상합니다? 혹시나 구글 크롬 알고리즘의 영도력에 인도된 것인지 궁금해서, 아이폰의 사파리로도 검색을 해 봤는데 결과는 동일했습니다. 일베의 어그로가 폐급인 것과는 별개로 일단 사실관계를 명확히 하자면, LGBT는 일베 용어가 아니라 성소수자를 .. 더보기
MPI C/C++ 를 이용한 병렬 프로그래밍 개요 프로그램이 여러 개의 CPU 코어에서 돌아갈 수 있게 소스 코드를 작성하면, 생산성을 높이는 데 도움이 됩니다. 필요한 연산을 여러 개의 코어들이 나누어서 수행하기 때문에, 프로그램 실행에 소요되는 시간이 줄어드는 효과가 있는 것이죠. CPU에서 구동되는 프로그램을 병렬화 하는데 있어서 MPI (Message Passing Interface)와 OpenMP가 많이 사용되는데요. 이번 포스팅에서는 MPI를 이용한 병렬 프로그래밍에 대해 다뤄볼까 합니다. MPI는 C언어, C++ 및 포트란 프로그램 내에서 프로세스 간의 데이터 전달을 정의함으로써, 병렬 프로그래밍을 가능하게 하는 인터페이스입니다. MPI와 OpenMP의 가장 큰 차이점 중 하나는 메모리를 공유하는지의 여부가 될 것입니다. OpenMP의.. 더보기
푸리에 변환과 (C++) 스펙트로그램 스펙트로그램의 개요 목소리나 음악 등의 소리를 수학적으로 기술하는 방법으로는, 크기를 나타내는 시그널을 시간에 대한 함수로 구하는 것이 있는데요. 이를 직접 들여다보는 것 보다 주파수 별로 그 크기가 어떻게 달라지는지를 분석하면, 소리의 패턴을 과학이나 공학적으로 이해하기가 더 쉬워집니다. 스펙트로그램 (spectrogram)은 서로 다른 주파수의 기여분이 시간에 따라 어떻게 달라지는지를 이미지로 나타낸 것입니다. Spectrogram - Wikipedia From Wikipedia, the free encyclopedia Jump to navigation Jump to search Visual representation of the spectrum of frequencies of a signal as .. 더보기
자작 바탕화면 이미지 모음 - 아시아 테마 컴퓨터로 이미지 편집하는 법을 좀 배운김에, 바탕화면을 몇 개 만들어 봤습니다. 제가 그동안 여행하면서 찍은 사진들을 가지고 컴퓨터 배경화면을 만들어 보고 있는데, 여기서는 아시아 테마를 소개해 봅니다. 싱가포르 국립 난초 정원 싱가포르에 위치한 국립 난초 정원 (National Orchid Garden)에 방문했을 때, 석상 중의 하나를 찍었습니다. 앙코르 유적에 있는 수문장의 석상과 흡사하게 생겨서, 앙코르 와트의 탑 모양을 실루엣으로 추가했습니다. 외곽 부분의 색을 반전시킨 덕분에 노란색의 실루엣이 더 돋포이는 효과도 있네요. 전반적으로 크메르 제국의 분위기를 잘 살린 것 같아서 만족스럽습니다. [다운로드] 서울 경회루 조선시대에 연회를 가졌던 누각이자, 대한민국의 국보입니다. 태극기가 횐색 바탕인.. 더보기
stb : C/C++ 이미지 처리 라이브러리 라이브러리 소개 이번에는 C언어 또는 C++ 프로그램에서 이미지 파일을 다루는 데 유용한 stb 라이브러리에 대해 얘기해볼까 합니다. JPEG, PNG, TGA, BMP 등의 이미지 포맷을 지원하며, 각 픽셀의 256 컬러 RGB 값들이 저장되는 배열을 통해서 이미지 파일의 입출력이 가능합니다. 256 컬러 RGB는 간단히 말하자면 빛의 원색인 빨강 (Red), 녹색 (Green), 파랑 (Blue) 세 개의 가산혼합으로 각 픽셀에서 출력되는 색상을 결정하는 방식인데요. 각 원색의 세기를 0과 255사이의 숫자로 나타내기 때문에 256이라는 숫자가 등장합니다. 이는 16진법으로 썼을 때 두 자리수로 나타낼 수 있는 범위이고 원색이 3개이므로, 결과적으로 RGB 색상코드는 16진법으로 6자리 숫자가 되죠... 더보기
vcpkg로 비주얼 스튜디오 라이브러리 설치하기 여기서는 vcpkg를 사용해서 라이브러리를 설치하고 이를 MS 비주얼 스튜디오에서 사용하는 법에 대해 알아봅시다. vcpkg는 C언어 및 C++ 라이브러리를 편리하게 관리할 수 있도록 도와주는 프로그램입니다. GitHub - microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOS C++ Library Manager for Windows, Linux, and MacOS. Contribute to microsoft/vcpkg development by creating an account on GitHub. github.com 윈도우에서 vcpkg를 사용하면, macOS의 Homebrew와 비슷한 방식으로 라이브러리를 설치하는 것이 가능합니다. .. 더보기
에이지 오브 엠파이어 2 결정판 캠페인 : 아시아 / 가자 마다 이번에 플레이해 본 캠페인은 가자 마다 (Gajah Mada) 입니다. 가자 마다는 현재 인도네시아 지역에 존재했던 마자파힛 제국의 재상으로서, 영토 확장 뿐 아니라 국가 운영에 전반적으로 큰 기여를 했다고 하는군요. 인도네시아에는 그의 이름을 딴 대학교도 있을 정도로 명성이 자자합니다. 가자 마다 - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org 에이지 오브 엠파이어 2 (라자의 부흥) 캠페인에서도 등장하며, 마자파힛 제국의 군대가 가자 마다의 지휘아래 반란을 진압하고 영토를 확장하는 등의 이야기를 다루고 있습니다. 지역에 걸맞게 말레이 문명으로 플레이하게 되고, 해상전의 비중이 높은 것도 특징입니다. 총 5개의 미션으로 이루어져 있으며 여러번의 세이브, 로드 끝에 결국 어려움 난이도로.. 더보기
커맨드 앤 컨커 3 타이베리움 워 - GDI,Nod 캠페인 예전부터 생각만 하고 컴퓨터가 구려서 못했던 커맨드 앤 컨커 3 타이베리움 워를 드디어 플레이 해 보았습니다. 나온지 10년도 넘은 게임이라 멀티플레이를 할 건 아니고, 스토리나 감상해보자는 생각으로 일단 캠페인을 플레이했습니다. 처음에는 GDI 와 Nod 캠페인을 따로 포스팅할까 생각했습니다만, 평행우주가 아닌 하나의 스토리를 가지고 GDI와 Nod의 입장에서 전투를 치르는 방식이라 한번에 묶어서 포스팅 하는 방식이 낫겠다 싶습니다. 줄거리 설명은 타이베리움 워 에피소드에 대한 나무위키 페이지를 참고했습니다. 게임의 재미를 더하기 위해 어려운 난이도로 플레이 했습니다. 쉬움이나 보통으로 플레이하면 AI한테 발려도 게임이 어려워서 그랬다고 정신승리를 못하거든요. 저에게 시련을 안겨준 미션이 몇개 있었는데.. 더보기
C언어와 C++를 조합한 프로그래밍 프로그램을 만들다 보면 C언어로 작성된 함수를 C++ 프로그램에서 사용하거나, 그 반대의 경우가 생길 때가 있습니다. 뿐만 아니라 C언어로 만들어진 라이브러리를 C++ 프로그램에서도 사용할 수 있게 설계해 두면 상당히 유용하겠죠. extern "C" 코드블록 및 __cplusplus 식별자를 이용해서 언어의 장벽을 뛰어넘을 수 있습니다. extern "C" 코드블록 C언어와 C++ 사이의 호환성을 확보하기 위한 방법 중의 하나는 앞에 언급한 대로 extern "C" 코드블록을 사용하는 것입니다. 함수의 본체가 C언어로 정의되어 있는 경우, 그 프로토타입을 C++ 소스코드 내에서 선언하기 위해서는 extern "C" 코드블록이 필요하죠. 이러한 조치를 취하지 않으면 오브젝트 파일들을 링크할 때 C++ 컴파.. 더보기