본문 바로가기

c언어

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로 만들어진 병렬 프로그램은 메모리를 .. 더보기
MPI C/C++ 를 이용한 병렬 프로그래밍 개요 프로그램이 여러 개의 CPU 코어에서 돌아갈 수 있게 소스 코드를 작성하면, 생산성을 높이는 데 도움이 됩니다. 필요한 연산을 여러 개의 코어들이 나누어서 수행하기 때문에, 프로그램 실행에 소요되는 시간이 줄어드는 효과가 있는 것이죠. CPU에서 구동되는 프로그램을 병렬화 하는데 있어서 MPI (Message Passing Interface)와 OpenMP가 많이 사용되는데요. 이번 포스팅에서는 MPI를 이용한 병렬 프로그래밍에 대해 다뤄볼까 합니다. MPI는 C언어, C++ 및 포트란 프로그램 내에서 프로세스 간의 데이터 전달을 정의함으로써, 병렬 프로그래밍을 가능하게 하는 인터페이스입니다. MPI와 OpenMP의 가장 큰 차이점 중 하나는 메모리를 공유하는지의 여부가 될 것입니다. OpenMP의.. 더보기
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와 비슷한 방식으로 라이브러리를 설치하는 것이 가능합니다. .. 더보기
C언어와 C++를 조합한 프로그래밍 프로그램을 만들다 보면 C언어로 작성된 함수를 C++ 프로그램에서 사용하거나, 그 반대의 경우가 생길 때가 있습니다. 뿐만 아니라 C언어로 만들어진 라이브러리를 C++ 프로그램에서도 사용할 수 있게 설계해 두면 상당히 유용하겠죠. extern "C" 코드블록 및 __cplusplus 식별자를 이용해서 언어의 장벽을 뛰어넘을 수 있습니다. extern "C" 코드블록 C언어와 C++ 사이의 호환성을 확보하기 위한 방법 중의 하나는 앞에 언급한 대로 extern "C" 코드블록을 사용하는 것입니다. 함수의 본체가 C언어로 정의되어 있는 경우, 그 프로토타입을 C++ 소스코드 내에서 선언하기 위해서는 extern "C" 코드블록이 필요하죠. 이러한 조치를 취하지 않으면 오브젝트 파일들을 링크할 때 C++ 컴파.. 더보기
C/C++ Runge-Kutta 방법으로 알아보는 인구역학 목차 로지스틱 방정식 확장된 가설 : 어른과 어린이 확장된 가설 : 인간과 삼림 인터넷을 돌아다니다가 우연히 인구역학 (population dynamics) 및 이를 위한 수학적 모형에 대한 설명을 위키 페이지에서 읽게 되었습니다. 본래 검색 의도에 맞는 결과는 아니었지만, 수학 모형에 혹해서 결국 관심있게 읽게 되었네요. Population dynamics - Wikipedia From Wikipedia, the free encyclopedia Jump to navigation Jump to search Type of mathematics modelling changes in the size and age composition of populations Population dynamics is the .. 더보기
C/C++ Runge-Kutta 방법으로 알아보는 진자운동 진자운동의 개요 이번 포스팅에서는 천장에 매달린 진자의 운동에 대한 썰을 수치해석과 함께 한번 풀어볼까 합니다. 중력이 복원력으로 작용하는 왕복운동은 고등학교 물리 교과서에도 등장할 정도로 친숙하죠. 이 진자운동의 개요를 그림으로 표현하자면 다음과 같습니다. 이 때 수직 방향에 대한 진자의 각도 theta 는 시간의 함수가 되고, 이 각도가 따르는 운동방정식은 진자가 매달린 끈의 길이 및 중력 가속도에 의해 결정된다는 특징이 있습니다. 제 기억이 맞다면, 고등학교 물리 및 대학교 일반물리 교과서에는 진동 주기가 진동의 폭과는 무관한 값을 가지는 것으로 나올텐데요. 엄밀히 말하자면 이는 진자의 진동 폭이 매우 작은 상황을 상정한 근사값이라 할 수 있습니다. 일반적인 진동 폭의 경우에 대해서는 해석적인 해를.. 더보기
GSL : C/C++ 수치해석 라이브러리 라이브러리 소개 이번 포스팅에서는 이공계 분야의 수치해석에서 널리 쓰이는 GSL라이브러리에 대해 써 볼까 합니다. GSL은 GNU Scientific Library의 약자로서, 과학 및 공학 분야의 수치해석에 유용한 여러가지 함수들을 가지고 있는 C언어 라이브러리인데요. 어지간한 슈퍼컴퓨터에는 기본적으로 설치되어 있을 정도로 널리 쓰이기 때문에, 기본적인 사용 방법들을 알아두면 상당히 좋습니다. GSL - GNU Scientific Library - GNU Project - Free Software Foundation GSL - GNU Scientific Library The GNU Scientific Library (GSL) is a numerical library for C and C++ progra.. 더보기
C/C++ 에서 함수를 매개변수로 사용하기 함수 포인터를 이용한 구현 일반적으로 C언어나 C++ 에서 사용하는 함수의 경우, 인자(매개변수) 혹은 파라미터로 변수를 받아갑니다. 이 값들을 가지고 정의된 기능을 수행하게 되죠. 하지만 프로그램을 만들다 보면 함수 자체를 다른 함수의 매개변수로 하는 방식이 유용할 때가 있습니다. 함수의 포인터를 다른 함수의 인자로 설정함으로써 이를 구현할 수 있으며, 이 때 함수의 파라미터 및 리턴값을 정확하게 명시해야 합니다. Hello World! 코드를 약간 바꿔서 이를 사용해 봅시다. #include void let_us_say(void (*func_message)()); void greetings(); void goodbye(); int main(int argc, char *argv[]) { // funct.. 더보기
FFTW : C/C++ 고속 푸리에 변환 라이브러리 라이브러리 소개 현재 진행중인 연구에서 사용중인 C언어 푸리에 변환 라이브러리인 FFTW에 대해 간략히 포스팅해볼까 합니다. FFTW는 Fastest Fourier Transform in the West 의 약자인데요. 저 같은 토종 아시안은 이해 못하는 개그에서 파생된 이름이라는 카더라가 있습니다만, 중요한 내용은 아니므로 패스하겠어요. FFTW Home Page --> Introduction FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as wel.. 더보기