티스토리 툴바


'Study Abroad OR Academic/Computer Programs'에 해당되는 글 4건

  1. 2012/01/23 Command-Line Arguments (C/C++ 공통)
  2. 2011/12/06 Random number generator (난수생성 프로그램)
  3. 2011/08/11 Get CUDA installed on MacBook Pro (4)
  4. 2011/06/10 C 언어의 malloc 함수 (2)
C++를 배우기 위해 책을 보는데, command-line arguments에 대한 내용이 있었다.
메인함수를 특별한 방법으로 정의해서,
프로그램을 실행시킬때 커맨드 라인에서 옵션을 지정해줄 수 있다고 한다.

int main(int argc, char *agrv[]){
    // .... 프로그램 내용물
}

이렇게 해서 컴파일 한 뒤에 실행시킬때,

$./[실행파일 이름] [옵션1] [옵션2] ...

이렇게 옵션들을 지정해 주면, 그 갯수와 값들이 argc와 agrv라는 변수들 안에 저장된다.
argc = 옵션의 갯수에 1을 더한 값 (정수)
agrv[i] = i-번째 옵션의 값 (문자열) / i 는 1부터 argc-1 까지의 값을 가질 수 있고,
실행파일의 이름은 agrv[0]에 저장된다고 한다.

예를 들어서 input.dat라는 파일에서 데이터를 받아와서 처리한 다음에,
output.dat라는 파일에 기록하는 프로그램을 run이라는 실행파일로 만들었다면,
프로그램 소스코드 안에서 파일 이름을 지정해주는 대신 위에 나온 방법을 써서

$./run input.dat output.dat

라고 실행시킴으로써, 프로그램의 자유도(?)를 높이는 게 가능하겠다.
이렇게 해서 "input.dat"와 "output.dat"가 agrv[1]과 agrv[2]에 각각 저장이 되면,
이것들을 메인함수 내에서

FILE *fin;
FILE *fout;

fin=fopen(argv[1],"r");
fout=fopen(argv[2],"w"); 

와 같이 쓸수가 있겠다.
저작자 표시 비영리 변경 금지
Posted by swstar
TAG C++, c언어

댓글을 달아 주세요

Description and source files



Sample implementations

Sample 1


Sample 2 (with transformation method)


Sample 3 (with rejection method)


저작자 표시 비영리 변경 금지
Posted by swstar

댓글을 달아 주세요


맥북프로에 CUDA를 깔았다.
장착된 그래픽카드가 GeForce 320M 이었는데,
이게 엔비디아 웹사이트의 지원 그래픽카드 리스트에 없어서 설치하기 전에 걱정이 좀 되었지만,
다행히 설치도 제대로 되고 샘플코드 컴파일도 잘 되었다.

한가지 non-trivial 한 과정이 있는데, 홈디렉토리의 .bash_profile 이라는 파일을 건드려서
PATH를 지정해주어야 한다는것.
vim 에디터에는 익숙치 않아서, 특히 종료하려면 :q! (저장안함) 또는 :wq (저장) 이라는 걸 몰라서,
좀 삽질을 하다가 결국 도움말까지 뒤져서 알아냈다.

나도 hydrodynamic simulation 을 하다보면, 샘플에 나오는것 같은 간지나는 결과물을 얻을 수 있겠지...
라는 머나먼 미래의 공상을 하다가 잠이 들었다. 
저작자 표시 비영리 변경 금지
Posted by swstar
TAG cuda

댓글을 달아 주세요

  1. 2011/08/25 14:18

    그쪽동네는 vim 에디터를 잘 안쓰나보네-_-;;

    • 2011/08/30 03:42

      여기서 좀 쓰이긴 하는것 같다만, 중요한건 "내"가 잘 몰랐다는 거임.

  2. 2011/08/26 11:48

    저거 뭐야. 피카소의 유고작?

    몰라 나 무서워

    • 2011/08/30 03:44

      형을 형상화한 작품... 은 훼이크고,
      2D 유체역학 시뮬레이션이어요.
      저기다 대고 마우스 클릭&드래그질 하면 유체의 흐름이 그에 맞게 생긴다능...

학부때부터 수치계산 할때면 항상 C언어를 써 왔지만,
배열과 포인터의 등가관계에 대해서는 극히 최근에야 알게 되었다.

예를 들어서
1) double a[10]; 을 선언했다면, 배열의 이름 a는 포인터 변수이고,
그 값은 a[0]의 주소가 된다는 점이나,
2) stdlib.h 에 선언되어 있는 malloc 함수를 이용하면, 포인터로 배열을 대신할수 있다는 점 등...
다시말해서
double a[10]; 을 선언하는 것과,
double *a;
a=malloc(10*sizeof(double)); 을 선언하는 게 같다는 것.

이걸 응용해서, 다중 포인터(ex: **ptr, ***ptr)로 행렬이나 텐서변수를 만드는 방법도
삽질끝에 알아냈다. (사실 Numerical Recipes 에 나오는 건데, 원리를 몰랐다.)

이게 유용한 이유는, 어떤 함수가 행렬이나 텐서 등을 변수로 받아야 할 때가 있는데,
다중배열만 가지고는 이걸 구현하기가 힘들었다.
대신에 위에 나온 방법을 쓰면, nrow by ncolume 의 실수 행렬을 받는 함수를
function(double **ptr, int nrow, int ncolumn){ }
같은 형식으로 쉽게 구현이 가능하니까 말이다.

웬만한 C언어 텍스트에는 다 나오는 내용임에도, 야매로 배워서 모르고 있었다.
이래서 기본이 중요함... CUDA도 공부해야 되는데, 이건 또 언제하냐... -_-;
저작자 표시 비영리 변경 금지
Posted by swstar
TAG malloc

댓글을 달아 주세요

  1. 2011/06/12 23:01

    비밀댓글입니다

이전버튼 1 이전버튼