프로그래밍 84

Memory Allocation API

Memory Allocation APIWindows 운영체제에서 메모리 할당 API를 이해하는것은 중요합니다.만약 메모리 관리를 요하는 언어를 사용할 계획이라면(C++ 같이) 아래에 있는 그림이 도움이 될것입니다.Windows 운영체제에 특화된 관점이며이 다이어그램을 보는 방법은 위로 갈수록 고차원적인 구현이 이루어져있습니다.아래 부분부터 살펴봅시다 Kernel-Mode memory manager커널 모드 메모리 매니져는 운영체제에서 메모리를 예약하고 할당하는 기능을 제공합니다.잘 알려진 Memory Mapped file과 Shared memory, copy-on-write 기능들도 지원하며직접적으로 User-Mode code에서 접근이 불가합니다. 그러므로 간단하게만 소개하고 넘어갑니다. Virtual..

프로그래밍/C++ 2018.05.27

Ubuntu에서 OpenGL 시작하기

Ubuntu에서 OpenGL 프로그래밍 환경 구축하기우분투에서 OpenGL을 이용해서 빨간 창을 띄우는 방법을 소개해드리려 합니다. 1. Ubuntu를 설치하세요Ubuntu 홈페이지에서 Ubuntu를 받아 USB에 부트디스크를 만들어 우분투를 설치합니다.검색을 해보면 많은 사람들이 이 방법에 대해 설명을 해놓았으니 참고하시면 좋겠습니다. 2. 종속성 다운로드처음 시작하는 사람들에게 openGL은 interface라는것을 아는것이 중요합니다.opengl에서 제공해주는 여러 라이브러리들(예) glew) 그래픽스 프로그래밍을 편리하도록 함수(인터페이스)를제공해주는 것이지요.이제 이 관련 라이브러리들(종속성)을 다운 받습니다.터미널을 실행시키고 다음 명령어를 실행합니다.sudo apt-get install cm..

프로그래밍 2018.05.22

CUDA Tutorial 2

CUDA Tutorial 2지난 Tutorial 1은 간단한 예제였습니다만, 이번 튜토리얼에서는 더 재미있는 것을 만들어봅시다.오늘 구현할 것은 병렬적 덧셈입니다. Device Code가장 간단한 덧셈 함수 부터 시작해봅시다.__global__ void add(int *a, int *b, int *c) { } 지난 시간에 이야기한 __global__ keyword가 보이시나요?__global__ keyword를 사용하면 add() 라는 함수는 다음과 같은 의미를 지닌다고 했습니다.add()는 Host가 호출하며, GPU에서 실행되는 코드이다 이제 실제 내용을 구현해 보죠.__global__ void add(int *a, int *b, int *c) { *c = *a + *b; }문제가 없어보이죠? 그런데..

프로그래밍 2018.05.12

CUDA Tutorial 1

쿠다 튜토리얼 Cuda C/C++ BasicsCuda란?CUDA ("Compute Unified Device Architecture", 쿠다)는 그래픽 처리 장치(GPU)에서 수행하는 (병렬 처리) 알고리즘을 C 프로그래밍 언어를 비롯한 산업 표준 언어를 사용하여 작성할 수 있도록 하는 GPGPU 기술입니다. 이번 튜토리얼에서 우리는 C/C++ 프로그래밍 언어를 가지고 쿠다를 배워 볼 것입니다.사전 지식C/C++에 대한 경험이 있으면 튜토리얼을 이해하는데 도움이 될것입니다.gpu, graphics 에 대한 지식들을 반드시 알아야 하는것은 아닙니다.Heterogeneous Computing두개의 계산기를 사용합니다. 앞으로 쓰일 용어는 다음과 같습니다.Host : CPU와 CPU 메모리를 의미합니다. (o..

프로그래밍 2018.04.15

DirectXMath

DirectX11의 Math LibraryDirectX 9, 10의 경우 d3dx 라이브러리를 링크해서 D3DXVECTOR, D3DXMATRIX와 같이D3DX 객체와 유틸 함수를 편리하게 사용할 수 있었다.DirectX11 부터는 DirectXMath(XNAMath) 라이브러리를 사용해서 프로그래밍을 할 수 있다.이를 사용하는 방법은 간단하다. 그냥 DirectXMath.h 헤더를 include 하면 끝이다. XNA Math Library의 특징XNA Math 라이브러리는 Xbox와 Windows에서 사용할 수 있는 특별한 하드웨어 Register를 사용한다.SIMD(Single Instruction Multiple Data)를 활용해서 여러개의 데이터를 하나의 명령어로 처리 할 수 있다.다음과 같이 벡..

LValue RValue

LValue RValuelvalue와 rvalue를 구분하는 가장 기초적인 방법은 등호(=)를 기준으로 좌변, 우변의 차이에 따라 구분하는 것이다. (Left, Right Value) 아래의 코드에서 x는 lvalue, 10은 rvalue이다. int x = 0; x = 10; 다음의 코드를 살펴보자. int x = 0; int y = 5; x = y;x=y라는 코드에서 x는 lvalue, y는 rvalue라고 불러야 할까? 사실 x, y 둘다 lvalue이다. 따라서 가장 기초적인 구분에서 더 나아가 구분하는 방법을 살펴보려한다.. lvalue rvalue를 구분하는 특징은 다음과 같다.lvalue의 특징1. lvalue는 좌변에 놓일수도 있고, 우변에 놓일수도 있다. 2. lvalue는 이름을 가진다..

프로그래밍/C++ 2018.02.13

Uniform Initialization

Uniform Initialization옛 C++의 초기화 문법은 다음과 같이 다양했다.C++ 11부터는 모두 중괄호 앞에 평등하다 (...)변수, 객체, 배열 등 모두 중괄호로 초기화가 가능하다.int i = 3; int arr[] = { 1,2,3,4,5 }; std::vector v; for(int i=0; iint로 암시적 형변환, 소수점 데이터 손실 char c1 = 256; // in->char 암시적 형변환, char의 범위를 벗어남. 데이터 손실로 인한 값 0 int a2 = {3.4}; // error char c2 = {256}; // error

프로그래밍/C++ 2018.02.06

Template Aliases

typedef이전부터 우리는 type을 다른 별명으로 호출하기 위해서 typedef를 많이 사용 해왔다. 예를들면 다음과 같은 코드들이 있다. typedef int INT; typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD;usingusing이라는 키워드는 선언 사용, using 지시문, 그리고 별칭 및 typedef에 사용 할 수 있다. 특히 C++ 11에서의 using은 기존 typedef처럼 Alias를 부여할 수 있다. #include using namespace std; using INT = int; int main() { INT a; a = 0; return 0..

프로그래밍/C++ 2018.01.30