분류 전체보기 93

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

Function Pointer 사용하기

Function Pointer 사용하기. C++에서 포인터는 주소를 가르킨다. 흔히 우리가 보는 형태는 다음과 같았을 것이다. int * p = new int; *p = 10; 이는 변수의 주소를 가르키는 포인터다. 함수의 주소를 가르키는 포인터를 함수 포인터 즉, Function Pointer라고 한다. 함수 포인터는 일반 변수를 포인터와 약간 다르게 선언하는데 아래와 같이 선언한다. 반환형 (* 포인터변수이름) (함수의 매개 변수들); 다음과 같이 선언한다. #include using namespace std; int MyFunc() { return 1; } int main() { int(*p)(void); p = MyFunc; cout > cmd; if (cmd > bUseFunc3; if(bUse..

프로그래밍/C++ 2018.01.29

C++ Template이란

template 예로부터 많은사람들에게 C++의 Template 릿이라고 하면 뭔가 복잡하고 읽기 힘들다는 이미지가 있다.필자 또한 메타 템플릿 프로그래밍이 유행하던 시절 템플릿을 마개조해서 사용하느라 읽기 힘들고 유지보수하기도 어렵다느 소리를 들어왔기에템플릿에 대한 부정적인 이미지를 가지고 있었지만, 템플릿이란 존재를 언제까지 외면할 수 없을 뿐더러 꼭 사용해야하는 기능들도 있기에 템플릿에 대해 알아보기로 하였다. 오버로딩 코드를 짜면서 제곱 수를 반환하는 Square라는 함수를 만들었다. int Square(int n){ return n*n;} int main(){ Square(1); return 0;} 그런데, Square의 argument가 double형이길 바란다면? 어떻게 해야 할까?쉽게 생각..

프로그래밍/C++ 2018.01.14