Programming/C++ STL2013. 10. 8. 09:49
GCN 이 어떤건가 조사하고 있는데
GCN이 openCL / DirectCompute / C++ AMP를 지원한다고 해서 조사를 해보니

[링크 : http://msdn.microsoft.com/ko-kr/library/hh265137.aspx]
[링크 : http://en.wikipedia.org/wiki/C++_AMP]
[링크 : http://www.imaso.co.kr/?doc=bbs/...wr_id=41233] 병렬 프로그래밍 혁신, C++ AMP

DirectCompute는 DirectX의 서브 시스템이고
C++ AMP는 DirectX 11 대 부터 지원하게 된 서브 시스템 및 C++0x 문법으로 확장된 기능으로 생각된다.

[링크 : http://en.wikipedia.org/wiki/C++11] C++0x 에서 명명변경

물론 open standard로 MS에서 제정하였기에 리눅스 GCC에서도 지원할 거라는데
C++ 만 보면 웬지 거부반응이 생기지만..
Massiva Parallelism이 이제 대세고 필수라.. 하....

[링크 : http://stackoverflow.com/questions/9179883/will-gcc-support-c-amp]


'Programming > C++ STL' 카테고리의 다른 글

c++ constructor  (0) 2014.02.26
C++11 Lambda Fuction  (2) 2013.11.20
c++ class - friend  (0) 2013.03.15
visual studio express 에서 class 생성예제  (0) 2013.03.13
visual studio express에서의 상속 클래스  (0) 2013.03.13
Posted by 구차니
Programming/openMP2013. 9. 29. 11:10
심심해서 만들어 보는 중인 openMP 예제
처음에는 for 루프로 결과값을 thread safe하게 했는데 퍼포먼스 저하가 생길것 같아서
private 변수를 쓰레드별로 만들어서 계산후 마지막에 합치는 식으로 개선해 봄

음.. 다음번은 어떻게 개선해볼까나? ㅋ

#include "omp.h"

#define BUFFLEN 4096

void thread()
{
        int idx;
        int arr[BUFFLEN];
        int res = 0;

#pragma omp parallel
{
        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
        {
                arr[idx] = idx;
        }

        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
        {
                #pragma omp critical
                {
                        res += arr[idx];
                }
//              printf("%d %d\n",idx, res);
        }
}
        printf("res = %d\n",res);
}

int main(int argc, const char *argv[])
{
        thread();
        return 0;
}



#include "omp.h"

#define BUFFLEN 4096
#define NUMTHREAD 4

void thread()
{
        int idx;
        int arr[BUFFLEN];
        int res = 0;
        int mid[NUMTHREAD]; // thread num - next version need to malloc

#pragma omp parallel
{
        // initialize
        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
                arr[idx] = idx;

        #pragma omp for
        for(idx = 0; idx < NUMTHREAD; idx++)
                mid[idx] = 0;

        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
        {
                int tid = omp_get_thread_num();
                mid[tid] += arr[idx];
//              printf("%d %d\n",idx, res);
        }

        #pragma omp single
        for(idx = 0; idx < NUMTHREAD; idx++)
                res += mid[idx];
}

        printf("res = %d\n",res);
}

int main(int argc, const char *argv[])
{
        thread();
        return 0;
}

'Programming > openMP' 카테고리의 다른 글

openMP parallel default  (0) 2013.11.18
openMP gnu implement  (0) 2013.11.11
openMP로 구현한 야매 sum()  (0) 2013.09.25
openmp 제한자(?)  (0) 2013.09.20
openMP runtime 함수 및 환경변수  (0) 2013.03.16
Posted by 구차니
Programming/openMP2013. 9. 25. 22:19

#include "omp.h"

#define BUFFLEN 32

int main(int argc, const char *argv[])
{
        int idx;
        unsigned char arr[BUFFLEN];
        int res = 0;

        #pragma omp parallel for
        for(idx = 0; idx < BUFFLEN; idx++)
        {
                arr[idx] = idx;
        }

        #pragma omp parallel for
        for(idx = 0; idx < BUFFLEN; idx++)
        {
//                #pragma omp atomic
                res += arr[idx];
                printf("%d %d\n",idx, res);
        }

        printf("res = %d\n",res);

        return 0;
}

위의 소스를 이용해서 실행시 결과가 달라지는 모습
 $ ./a.out
0 40
1 41
2 43
3 46
4 50
5 55
6 61
7 68
16 40
17 85
18 103
19 122
20 142
21 163
22 185
23 208
24 24
25 233
26 259
27 286
28 314
29 343
30 373
31 404
8 40
9 413
10 423
11 434
12 446
13 459
14 473
15 488
res = 488
 $ ./a.out
0 24
1 25
2 27
3 30
4 34
5 39
6 45
7 52
16 16
17 69
18 87
19 106
20 126
21 147
22 169
23 192
24 40
25 217
26 243
27 270
28 298
29 327
30 357
31 388
8 24
9 397
10 407
11 418
12 430
13 443
14 457
15 472
res = 472
 $ ./a.out
0 48
1 49
2 51
3 54
4 58
5 63
6 69
7 76
16 16
17 93
18 111
19 130
20 150
21 171
22 193
23 216
8 48
9 225
10 235
11 246
12 258
13 271
14 285
15 300
24 40
25 325
26 351
27 378
28 406
29 435
30 465
31 496
res = 496

res는 공유 변수로
각각의 쓰레드에서 동시에 계산을 하려다 보니 문제가 발생을 한다.

그런 이유로 res에 더하는 부분을 atomic 하게 처리한다면 다른 쓰레드에서
치고 들어올수 없기 때문에 깨지는 문제가 발생하지 않는다.
대신 lock을 걸거나 인터럽트를 막는 식으로 구현이 되기 때문에 성능 저하가 발생할수 있다.

이를 해결하려면...
어떻게 해야 하려나? 

'Programming > openMP' 카테고리의 다른 글

openMP gnu implement  (0) 2013.11.11
openMP example  (0) 2013.09.29
openmp 제한자(?)  (0) 2013.09.20
openMP runtime 함수 및 환경변수  (0) 2013.03.16
openMP 지시어  (0) 2013.03.16
Posted by 구차니
Programming/openMP2013. 9. 20. 16:06
키워드 별로 아래와 같이 한번 정리를 해봐야겠다..
문서에 따라서 clause 구분이 애매한것도 문제이니..
(parallel과 parallel for 라던가?)


[링크 : http://www.mimul.com/pebble/default/2012/05/30/1338342349153.html]

'Programming > openMP' 카테고리의 다른 글

openMP example  (0) 2013.09.29
openMP로 구현한 야매 sum()  (0) 2013.09.25
openMP runtime 함수 및 환경변수  (0) 2013.03.16
openMP 지시어  (0) 2013.03.16
visual studio express 2008에서는 openMP 공식 지원안해!  (0) 2013.03.16
Posted by 구차니
Programming/web 관련2013. 7. 9. 08:03
는 안되는 기분인데..

서버 자체가 공유기 뒤에 있어서 인지
공유기 내부 사설망 이외에는 전부 mac을 얻어오지 못한다 ㅠㅠ

어찌보면 당연한거긴 한데..(mac은 lan에서 사용될뿐 wan에서는 ip로 하니)
웬지 억울한건 기분탓인가...?

[링크 : http://superuser.com/questions/188799/how-to-find-the-mac-address-of-a-remote-computer]

'Programming > web 관련' 카테고리의 다른 글

NoSQL  (0) 2014.04.09
w3c 규격 번역  (0) 2014.03.17
축약주소 만들기 서비스  (0) 2013.07.08
php-mobile-detect  (0) 2013.02.23
php if/else/echo  (0) 2012.11.30
Posted by 구차니
Programming/web 관련2013. 7. 8. 22:00

'Programming > web 관련' 카테고리의 다른 글

w3c 규격 번역  (0) 2014.03.17
wan 에서 mac address 얻기  (0) 2013.07.09
php-mobile-detect  (0) 2013.02.23
php if/else/echo  (0) 2012.11.30
TD 태그 - Chrome 과 IE 차이?  (0) 2011.05.30
Posted by 구차니
Programming/php2013. 7. 7. 20:21
$_SERVER[] 변수는 서버에서 관리되는 내용을 받을수 있다.
단, Mac address는 php만으로는 안되고
exec를 통해 arp 조회를 하거나 javascript의 허가 하에 받아올수 있다고 한다.


또한, REMOTE_ADDR은 proxy 사용시 제대로 표기 안되므로
HTTP_X_FORWAREDE_FOR를 써야 한다고 한다.

'REMOTE_ADDR' The IP address from which the user is viewing the current page.
'REMOTE_HOST' The Host name from which the user is viewing the current page. The reverse dns lookup is based off the REMOTE_ADDR of the user.
'REMOTE_PORT' The port being used on the user's machine to communicate with the web server.
'REMOTE_USER' The authenticated user.

If you are serving from behind a proxy server, you will almost certainly save time by looking at what these $_SERVER variables do on your machine behind the proxy.
$_SERVER['HTTP_X_FORWARDED_FOR'] in place of $_SERVER['REMOTE_ADDR']

[링크 : http://php.net/manual/en/reserved.variables.server.php]

'Programming > php' 카테고리의 다른 글

php framework / 읽을꺼리  (0) 2014.04.09
php 메뉴얼  (0) 2014.03.28
index.php가 다운받아지는 문제점 -_-  (0) 2013.02.22
php ++,-- 연산자  (0) 2012.12.03
php 간단정리  (0) 2012.11.26
Posted by 구차니
Programming/C Win32 MFC2013. 6. 15. 19:13
유니코드 문자열 출력에 %S를 사용하면 매우 좋다
(웬지 리빙 포인트 기분인데?)

조이스틱 이름 받아오는데
JOYCAPS pjc;
pjc.szPname 에 조이스틱의 이름이 'M' 만 출력되서 혹시나 출력을 바꾸어 보니
"Microsoft PC-joystick driver"

윈7은 내부적으로도 문자열을 유니코드로 사용하나 -ㅁ-?

[링크 : http://www.jiniya.net/wp/archives/4299]

'Programming > C Win32 MFC' 카테고리의 다른 글

const / pointer  (0) 2014.02.25
assert()  (0) 2013.12.18
win32api - joystick 예제  (0) 2013.06.15
Windows IME  (0) 2013.02.14
== 와 = 의 실수를 피하기 위한 트릭  (2) 2013.01.06
Posted by 구차니
Programming/C Win32 MFC2013. 6. 15. 19:06
어디다 넣어야 하는지 몰라서 대충.. 투척
일단 winmm.lib를 링크 해야 하고
winmm.dll을 해도 된다는데 dll은 쓸줄 모르니 패스 -ㅁ-


windows.h와 MMSystem.h를 포함하면된다.
사용한 함수들은 아래 예제 참고.

요즘 조이스틱은 4축 지원(X/Y/Z/R)를 많이 지원하므로
joyGetPos보다는 joyGetPosEx를 사용하는 것이 좋을듯 하다.
버튼은 1번 부터 1bit씩 LBS에서 MBS로 하나씩 올라간다(버튼이 12개 있으면 2^12 = 2048까지 올라가게 된다.

드라이버의 이름(제품명)은 Unicode로 저장되어 있으니 필요하면 %S로 출력하면 된다.

#include "stdafx.h"
#include "windows.h"
#include "MMSystem.h"

int _tmain(int argc, _TCHAR* argv[])
{

	JOYINFO joyinfo; 
	JOYINFOEX joyinfo2; 
	JOYCAPS pjc;
	UINT wNumDevs, wDeviceID; 
	BOOL bDev1Attached, bDev2Attached; 

	if((wNumDevs = joyGetNumDevs()) == 0) 
	{
		return MMSYSERR_NODRIVER;
	}

	joyGetDevCaps(JOYSTICKID1, &pjc, sizeof(JOYCAPS));

	printf("%d %d %S\n%d %d %d %d %d %d\n%d %d %d\n%d %d %d %d %d %d\n%d %d %d %d\n%S %S\n",
	pjc.wMid, 
	pjc.wPid, 
	pjc.szPname, 

	pjc.wXmin, 
	pjc.wXmax, 
	pjc.wYmin, 
	pjc.wYmax, 
	pjc.wZmin, 
	pjc.wZmax, 

	pjc.wNumButtons, 
	pjc.wPeriodMin, 
	pjc.wPeriodMax, 

	pjc.wRmin, 
	pjc.wRmax, 
	pjc.wUmin, 
	pjc.wUmax, 
	pjc.wVmin, 
	pjc.wVmax, 

	pjc.wCaps, 
	pjc.wMaxAxes, 
	pjc.wNumAxes, 
	pjc.wMaxButtons, 
	pjc.szRegKey, 
	pjc.szOEMVxD);

	printf("%d\n",wNumDevs);
#if 1
	for(;;)
	{
		bDev1Attached = joyGetPosEx(JOYSTICKID1,&joyinfo2) != JOYERR_UNPLUGGED; 
		printf("X:%05d Y:%05d Z:%05d R:%05d H:%d %d\n",
			joyinfo2.dwXpos, // X
			joyinfo2.dwYpos, // Y
			joyinfo2.dwZpos, // Z(throttle)
			joyinfo2.dwRpos, // R(Rudder)
			joyinfo2.dwPOV,  // POV(Hat)
			joyinfo2.dwButtons);

		Sleep(100);
	}
#else
	for(;;)
	{
		bDev1Attached = joyGetPos(JOYSTICKID1,&joyinfo) != JOYERR_UNPLUGGED; 
			printf("%d %d %d %d\n",
			joyinfo.wXpos,
			joyinfo.wYpos,
			joyinfo.wZpos,
			joyinfo.wButtons);

		Sleep(100);
	}
#endif
	system("pause");

	return 0;
}


[링크 : http://msdn.microsoft.com/en-us/library/ms709377.aspx]

[링크 : http://msdn.microsoft.com/en-us/library/ms709352.aspx] joyGetPos
  [링크 : http://msdn.microsoft.com/en-us/library/ms709359.aspx] JOYINFO
[링크 : http://msdn.microsoft.com/en-us/library/ms709354.aspx] joyGetPosEx
  [링크 : http://msdn.microsoft.com/en-us/library/ms709358.aspx] JOYINFOEX
[링크 : http://msdn.microsoft.com/en-us/library/ms709350.aspx] joyGetDevCaps
  [링크 : http://msdn.microsoft.com/en-us/library/ms709348.aspx] JOYCAPS
 

'Programming > C Win32 MFC' 카테고리의 다른 글

assert()  (0) 2013.12.18
printf의 %s와 %S  (0) 2013.06.15
Windows IME  (0) 2013.02.14
== 와 = 의 실수를 피하기 위한 트릭  (2) 2013.01.06
c 변수범위 헤더  (0) 2012.07.02
Posted by 구차니
Programming/openGL2013. 4. 9. 22:45
나중에 해봐야징~
아무튼 기본 컨셉은 AVI 파일을 BMP로 변환해서 그걸 texture로 주기적으로 바꾸어 주는 것.

[링크 : http://nehe.gamedev.net/tutorial/playing_avi_files_in_opengl/23001/] << visual Studio / linux용 코드 존재
[링크 : http://blog.naver.com/treewild/20005011394] << 한글 번역본 

'Programming > openGL' 카테고리의 다른 글

GL2PS : an OpenGL to PostScript printing library  (0) 2014.03.06
openGL state variables  (0) 2013.12.12
openGL gcc에서 컴파일 하기  (0) 2012.06.02
glsl과 glew의 연관관계  (0) 2011.11.22
GLSL 관련 링크  (0) 2011.11.20
Posted by 구차니