파일방2011. 1. 21. 23:07
기존의 nTune이 NVIDIA SYSTEM TOOL로 이름이 변경되었다.
아무튼 이녀석은 nForce 칩셋을 오버클럭하는 등의 설정을 할 수 있게 해주는데

여전히.. 8800GT의 온도 센서는 실종이다 ㅠ.ㅠ
정녕 존재하지 않는건가! OTL


'파일방' 카테고리의 다른 글

rainymood 다운로드  (2) 2011.04.14
mediainfo  (0) 2011.02.03
GPU-Z  (2) 2011.01.21
messagepopup 2 - 메시지팝업 2  (0) 2010.11.09
freeNAS + 설치형 웹하드  (2) 2010.09.24
Posted by 구차니
파일방2011. 1. 21. 22:32
CPU-Z 처럼 그래픽 카드의 사양을 출력해주는 프로그램이다.
홈페이지의 데모에는 아래와 같이 온도가 나온다는데 -_-


8800GT에는 센서가 없는지... 하나도 안나온다 으헝 ㅠ.ㅠ

'파일방' 카테고리의 다른 글

mediainfo  (0) 2011.02.03
nTune -> NVIDIA SYSTEM TOOL  (0) 2011.01.21
messagepopup 2 - 메시지팝업 2  (0) 2010.11.09
freeNAS + 설치형 웹하드  (2) 2010.09.24
CUDA / ATI stream SDK  (0) 2010.09.16
Posted by 구차니
Microsoft/Windows2011. 1. 21. 18:08
Win7 에서 IP 관련 속성을 보면 IPv4와 IPv6 가 별도로 존재한다.

IPv4는 예전에 보아오던 점 찍힌 녀석이고

IPv6는 일반 에디트박스를 사용한 생소한 모습이다.
게다가 서브넷도 좀 먼가 달라졌다!

아무튼, 아이피 정보를 확인함녀 아래와 같이 IPv6는  4자리씩 : 으로 구분이 되며 총 8 개로 구성이 된다.
개별 단위는 16bit씩 총 128bit의 주소체계이다.
2^6 = 128 이니까 IPv6는 128 비트 일려나?!

C:> ipconfig /all
터널 어댑터 Teredo Tunneling Pseudo-Interface:

   연결별 DNS 접미사. . . . :
   설명. . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface
   물리적 주소 . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP 사용 . . . . . . . . . : 아니요
   자동 구성 사용. . . . . . . : 예
   IPv6 주소 . . . . . . . . . : 2001:0:4137:9e76:1088:3dfd:827b:6a0e(기본 설정)

   링크-로컬 IPv6 주소 . . . . : fe80::1088:3dfd:827b:6a0e%20(기본 설정)
   기본 게이트웨이 . . . . . . : ::
   Tcpip를 통한 NetBIOS. . . . : 사용 안 함

the Microsoft Windows IPv6 stack uses numeric zone indexes, e.g., fe80::3%1.
The index is determined by the interface number;
most Unix-like systems (e.g., BSD, Linux, Mac OS X) use the interface name as a zone index: fe80::3%eth0.

링크-로컬 주소의 경우 장비 번호라는데 20번이라니 -ㅁ-!



결론 : IPv6 는 자릿수가 많아서 사람이 외우기는 무리겠다!
         8bit . 8bit . 8bit . 8bit 총 32비트의 숫자 도 외우기 힘든데
         16bit : 16bit : 16bit : 16bit : 16bit : 16bit : 16bit : 16bit 의 128비트 게다가 16진수 어떻게 외워!!

결론2: IP / DNS / Gateway 역시 128비트가 되어야 하며
          Subnet은 IP에 포함되어 적혀지게 된다.

예측 : 미래에는 고정아이피가 역설적으로 의미가 없어질 듯 -_-
         일일이 고정아이피 넣는게 더 힘들어서 항상 자동으로 할당할 것 같은 기분.jpg

'Microsoft > Windows' 카테고리의 다른 글

winXP에서 파일공유가 안될경우  (0) 2011.03.22
hiberfil.sys 위치는 못 옮겨!  (0) 2011.03.07
windows 7/vista 잘못된 EDID 바로잡기  (2) 2011.01.07
wowexec.exe  (2) 2010.12.25
win7에 이런 기능이?  (0) 2010.12.11
Posted by 구차니
개소리 왈왈2011. 1. 20. 23:02
원래 사과를 무지 좋아하는데..
근 3달 이내에 사과를 먹고 매번 토하는 현상이 발생 -_-


오늘 혹시나 하는 마음에 사과를 먹다가
점심때 먹은것까지 게워내는 사태 -_-
사과의 약간 미끈미끈한 그 감촉이 거부감을 불러 일으키는 걸려나?

'개소리 왈왈' 카테고리의 다른 글

아아 지르고 싶어 ㅠ.ㅠ  (2) 2011.01.30
지하철에 카드가 안 찍히면?  (6) 2011.01.25
헉?! 윈도우 msn 털린건가?  (6) 2011.01.19
악 나의 삐뚜러진 필터링  (2) 2011.01.05
의사의 초간단 진찰  (4) 2011.01.04
Posted by 구차니
개소리 왈왈2011. 1. 19. 17:59
오랫만에 접속해봤더니 대화명이 이상하네 -_-
나 털린건가?!



'개소리 왈왈' 카테고리의 다른 글

지하철에 카드가 안 찍히면?  (6) 2011.01.25
사과가 싫어 ㅠ.ㅠ  (6) 2011.01.20
악 나의 삐뚜러진 필터링  (2) 2011.01.05
의사의 초간단 진찰  (4) 2011.01.04
Reboot  (4) 2011.01.02
Posted by 구차니
Programming/openCL & CUDA2011. 1. 18. 22:29
DeviceQuery 프로그램을 실행하면 다음과 같은 내용이 나온다.
  Maximum sizes of each dimension of a block:    512 x 512 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 1

블럭의 차원은 512x512x64 3차원으로 구성이 가능하고
그리드의 차원은 65535x65535x1 2차원으로 구성이 가능하다.

여전히 그리드와 블럭 쓰레드, 이러한 연관관계가 확실히 정립된게 아니라 헷갈리지만
kernel<<<block,thread>>>(agrs) 에서
그리드의 차원은 block 이고 
블럭의 차원은 thread 인거 같은데(아무래도 차수가 제한된게 같으니까)

실제로 존재하는 쓰레드의 갯수라던가, 멀티프로세서의 갯수를 감안하면 절대 불가능한 수치이다.
8800GT의 경우
14개의 멀티프로세서와 개당 8개씩의 코어(쓰레드 블럭)이 존재함으로
총 112개의 쓰레드 블럭이 존재하기 때문에
물리적으로는 블럭의 차원은 14x8x1 정도가 한계라고 볼 수 있다.


하지만, 논리적으로는 한번의 처리단위가 14x8x1 이므로
X/Y/Z 차원으로 n번씩 반복하게 되면 돌릴수 있게 되고 이럴경우
X차원으로는 37번
Y차원으로 64번
Z차원으로 64번 이런식으로 더 반복하게 하면 무리없이 가능하다.


내부적으로 BlockIdx 라는 변수만 thread block 에서 값만 바꾸어서 넘겨주면 되니까 말이다.




결론 : 위에서 명시되는 최대차원은 논리적으로 제한을 둔 값으로 생각된다.

'Programming > openCL & CUDA' 카테고리의 다른 글

cuBLAS / BLAS Level 1,2,3  (0) 2011.01.24
CUDA 관련 해외글  (0) 2011.01.22
CUDA 3.1과 3.2의 devicequery 결과 차이점  (0) 2011.01.18
vectorAdd 를 이용한 CUDA 연습  (0) 2011.01.18
CUDA 메모리별 범위(scope)  (0) 2011.01.17
Posted by 구차니
Programming/openCL & CUDA2011. 1. 18. 22:20
별건없고, 멀티프로세서와 core의 출력방식이 변경되었다.

CUDA SDK 3.1

D:\CUDA\NVIDIA GPU Computing SDK\C\bin\win32\Release\deviceQuery.exe Starting...


 CUDA Device Query (Runtime API) version (CUDART static linking)

There are 2 devices supporting CUDA

Device 0: "GeForce 8800 GT"
  CUDA Driver Version:                           3.20
  CUDA Runtime Version:                          3.10
  CUDA Capability Major revision number:         1
  CUDA Capability Minor revision number:         1
  Total amount of global memory:                 536543232 bytes
  Number of multiprocessors:                     14
  Number of cores:                               112
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       16384 bytes
  Total number of registers available per block: 8192
  Warp size:                                     32
  Maximum number of threads per block:           512
  Maximum sizes of each dimension of a block:    512 x 512 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 1
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             256 bytes
  Clock rate:                                    1.50 GHz
  Concurrent copy and execution:                 Yes
  Run time limit on kernels:                     Yes
  Integrated:                                    No
  Support host page-locked memory mapping:       Yes
  Compute mode:                                  Default
                             (multiple host threads can use this device simultaneously)
  Concurrent kernel execution:                   No
  Device has ECC support enabled:                No

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 3.20, CUDA Runtime Vers
ion = 3.10, NumDevs = 2, Device = GeForce 8800 GT, Device = GeForce 8800 GT


PASSED

Press <Enter> to Quit...
-----------------------------------------------------------




CUDA SDK 3.2
D:\CUDA\NVIDIA GPU Computing SDK 3.2\C\bin\win32\Release\deviceQuery.exe Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

There are 2 devices supporting CUDA

Device 0: "GeForce 8800 GT"
  CUDA Driver Version:                           3.20
  CUDA Runtime Version:                          3.20
  CUDA Capability Major/Minor version number:    1.1
  Total amount of global memory:                 536543232 bytes
  Multiprocessors x Cores/MP = Cores:            14 (MP) x 8 (Cores/MP) = 112 (Cores)
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       16384 bytes
  Total number of registers available per block: 8192
  Warp size:                                     32
  Maximum number of threads per block:           512
  Maximum sizes of each dimension of a block:    512 x 512 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 1
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             256 bytes
  Clock rate:                                    1.50 GHz
  Concurrent copy and execution:                 Yes
  Run time limit on kernels:                     Yes
  Integrated:                                    No
  Support host page-locked memory mapping:       Yes
  Compute mode:                                  Default
                             (multiple host threads can use this device simultaneously)
  Concurrent kernel execution:                   No
  Device has ECC support enabled:                No
  Device is using TCC driver mode:               No

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 3.20, CUDA Runtime Vers
ion = 3.20, NumDevs = 2, Device = GeForce 8800 GT, Device = GeForce 8800 GT


PASSED

Press <Enter> to Quit...
-----------------------------------------------------------

Posted by 구차니
Programming/openCL & CUDA2011. 1. 18. 22:12
warp 크기는 32 라는데,
그 이하로도 묶어서 사용이 가능한지 테스트를 해보았다.

VectorAdd를 변형해서 int 형으로 계산하고, 변수는 총 64개의 int형 배열로 선언
그리고 커널코드는 단순하게 두개의 배열을 더해서 세번째로 던져주게 해놓았다.

단, 커널은 1 block / 5 thread로 설정했다.
// Device code
__global__ void VecAdd(const int* A, const int* B, int* C, int N)
{
int i = threadIdx.x;
C[i] = A[i] + B[i];
}

VecAdd<<<1,5>>>(d_A, d_B, d_C, N);

결과는 아래와 같이 5개만 계산이 되어 나온다.
Vector addition
[000] h_A[0] + h_B[0] = 0, h_C[0]
[001] h_A[1] + h_B[1] = 2, h_C[2]
[002] h_A[2] + h_B[2] = 4, h_C[4]
[003] h_A[3] + h_B[3] = 6, h_C[6]
[004] h_A[4] + h_B[4] = 8, h_C[8]
[005] h_A[5] + h_B[5] = 10, h_C[133]- not ok
[006] h_A[6] + h_B[6] = 12, h_C[134]- not ok
[007] h_A[7] + h_B[7] = 14, h_C[135]- not ok
[008] h_A[8] + h_B[8] = 16, h_C[136]- not ok
[009] h_A[9] + h_B[9] = 18, h_C[137]- not ok
[010] h_A[10] + h_B[10] = 20, h_C[138]- not ok
[011] h_A[11] + h_B[11] = 22, h_C[139]- not ok
[012] h_A[12] + h_B[12] = 24, h_C[140]- not ok
[013] h_A[13] + h_B[13] = 26, h_C[141]- not ok
[014] h_A[14] + h_B[14] = 28, h_C[142]- not ok
[015] h_A[15] + h_B[15] = 30, h_C[143]- not ok
[016] h_A[16] + h_B[16] = 32, h_C[144]- not ok
[017] h_A[17] + h_B[17] = 34, h_C[145]- not ok
[018] h_A[18] + h_B[18] = 36, h_C[146]- not ok
[019] h_A[19] + h_B[19] = 38, h_C[147]- not ok
[020] h_A[20] + h_B[20] = 40, h_C[148]- not ok
[021] h_A[21] + h_B[21] = 42, h_C[149]- not ok
[022] h_A[22] + h_B[22] = 44, h_C[150]- not ok
[023] h_A[23] + h_B[23] = 46, h_C[151]- not ok
[024] h_A[24] + h_B[24] = 48, h_C[152]- not ok
[025] h_A[25] + h_B[25] = 50, h_C[153]- not ok
[026] h_A[26] + h_B[26] = 52, h_C[154]- not ok
[027] h_A[27] + h_B[27] = 54, h_C[155]- not ok
[028] h_A[28] + h_B[28] = 56, h_C[156]- not ok
[029] h_A[29] + h_B[29] = 58, h_C[157]- not ok
[030] h_A[30] + h_B[30] = 60, h_C[158]- not ok
[031] h_A[31] + h_B[31] = 62, h_C[159]- not ok
[032] h_A[32] + h_B[32] = 64, h_C[160]- not ok
[033] h_A[33] + h_B[33] = 66, h_C[161]- not ok
[034] h_A[34] + h_B[34] = 68, h_C[162]- not ok
[035] h_A[35] + h_B[35] = 70, h_C[163]- not ok
[036] h_A[36] + h_B[36] = 72, h_C[164]- not ok
[037] h_A[37] + h_B[37] = 74, h_C[165]- not ok
[038] h_A[38] + h_B[38] = 76, h_C[166]- not ok
[039] h_A[39] + h_B[39] = 78, h_C[167]- not ok
[040] h_A[40] + h_B[40] = 80, h_C[168]- not ok
[041] h_A[41] + h_B[41] = 82, h_C[169]- not ok
[042] h_A[42] + h_B[42] = 84, h_C[170]- not ok
[043] h_A[43] + h_B[43] = 86, h_C[171]- not ok
[044] h_A[44] + h_B[44] = 88, h_C[172]- not ok
[045] h_A[45] + h_B[45] = 90, h_C[173]- not ok
[046] h_A[46] + h_B[46] = 92, h_C[174]- not ok
[047] h_A[47] + h_B[47] = 94, h_C[175]- not ok
[048] h_A[48] + h_B[48] = 96, h_C[176]- not ok
[049] h_A[49] + h_B[49] = 98, h_C[177]- not ok
[050] h_A[50] + h_B[50] = 100, h_C[178]- not ok
[051] h_A[51] + h_B[51] = 102, h_C[179]- not ok
[052] h_A[52] + h_B[52] = 104, h_C[180]- not ok
[053] h_A[53] + h_B[53] = 106, h_C[181]- not ok
[054] h_A[54] + h_B[54] = 108, h_C[182]- not ok
[055] h_A[55] + h_B[55] = 110, h_C[183]- not ok
[056] h_A[56] + h_B[56] = 112, h_C[184]- not ok
[057] h_A[57] + h_B[57] = 114, h_C[185]- not ok
[058] h_A[58] + h_B[58] = 116, h_C[186]- not ok
[059] h_A[59] + h_B[59] = 118, h_C[187]- not ok
[060] h_A[60] + h_B[60] = 120, h_C[188]- not ok
[061] h_A[61] + h_B[61] = 122, h_C[189]- not ok
[062] h_A[62] + h_B[62] = 124, h_C[190]- not ok
[063] h_A[63] + h_B[63] = 126, h_C[191]- not ok
PASSED


2개씩 3개 블럭을 사용해도 제대로 나온다.
__global__ void VecAdd(const int* A, const int* B, int* C, int N)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
C[i] = A[i] + B[i];
}
VecAdd<<<3,2>>>(d_A, d_B, d_C, N);

Vector addition
[000] h_A[0] + h_B[0] = 0, h_C[0]
[001] h_A[1] + h_B[1] = 2, h_C[2]
[002] h_A[2] + h_B[2] = 4, h_C[4]
[003] h_A[3] + h_B[3] = 6, h_C[6]
[004] h_A[4] + h_B[4] = 8, h_C[8]
[005] h_A[5] + h_B[5] = 10, h_C[10]
[006] h_A[6] + h_B[6] = 12, h_C[134]- not ok
[007] h_A[7] + h_B[7] = 14, h_C[135]- not ok
[008] h_A[8] + h_B[8] = 16, h_C[136]- not ok
[009] h_A[9] + h_B[9] = 18, h_C[137]- not ok
[010] h_A[10] + h_B[10] = 20, h_C[138]- not ok
[011] h_A[11] + h_B[11] = 22, h_C[139]- not ok
[012] h_A[12] + h_B[12] = 24, h_C[140]- not ok
[013] h_A[13] + h_B[13] = 26, h_C[141]- not ok
[014] h_A[14] + h_B[14] = 28, h_C[142]- not ok
[015] h_A[15] + h_B[15] = 30, h_C[143]- not ok
[016] h_A[16] + h_B[16] = 32, h_C[144]- not ok
[017] h_A[17] + h_B[17] = 34, h_C[145]- not ok
[018] h_A[18] + h_B[18] = 36, h_C[146]- not ok
[019] h_A[19] + h_B[19] = 38, h_C[147]- not ok
[020] h_A[20] + h_B[20] = 40, h_C[148]- not ok
[021] h_A[21] + h_B[21] = 42, h_C[149]- not ok
[022] h_A[22] + h_B[22] = 44, h_C[150]- not ok
[023] h_A[23] + h_B[23] = 46, h_C[151]- not ok
[024] h_A[24] + h_B[24] = 48, h_C[152]- not ok
[025] h_A[25] + h_B[25] = 50, h_C[153]- not ok
[026] h_A[26] + h_B[26] = 52, h_C[154]- not ok
[027] h_A[27] + h_B[27] = 54, h_C[155]- not ok
[028] h_A[28] + h_B[28] = 56, h_C[156]- not ok
[029] h_A[29] + h_B[29] = 58, h_C[157]- not ok
[030] h_A[30] + h_B[30] = 60, h_C[158]- not ok
[031] h_A[31] + h_B[31] = 62, h_C[159]- not ok
[032] h_A[32] + h_B[32] = 64, h_C[160]- not ok
[033] h_A[33] + h_B[33] = 66, h_C[161]- not ok
[034] h_A[34] + h_B[34] = 68, h_C[162]- not ok
[035] h_A[35] + h_B[35] = 70, h_C[163]- not ok
[036] h_A[36] + h_B[36] = 72, h_C[164]- not ok
[037] h_A[37] + h_B[37] = 74, h_C[165]- not ok
[038] h_A[38] + h_B[38] = 76, h_C[166]- not ok
[039] h_A[39] + h_B[39] = 78, h_C[167]- not ok
[040] h_A[40] + h_B[40] = 80, h_C[168]- not ok
[041] h_A[41] + h_B[41] = 82, h_C[169]- not ok
[042] h_A[42] + h_B[42] = 84, h_C[170]- not ok
[043] h_A[43] + h_B[43] = 86, h_C[171]- not ok
[044] h_A[44] + h_B[44] = 88, h_C[172]- not ok
[045] h_A[45] + h_B[45] = 90, h_C[173]- not ok
[046] h_A[46] + h_B[46] = 92, h_C[174]- not ok
[047] h_A[47] + h_B[47] = 94, h_C[175]- not ok
[048] h_A[48] + h_B[48] = 96, h_C[176]- not ok
[049] h_A[49] + h_B[49] = 98, h_C[177]- not ok
[050] h_A[50] + h_B[50] = 100, h_C[178]- not ok
[051] h_A[51] + h_B[51] = 102, h_C[179]- not ok
[052] h_A[52] + h_B[52] = 104, h_C[180]- not ok
[053] h_A[53] + h_B[53] = 106, h_C[181]- not ok
[054] h_A[54] + h_B[54] = 108, h_C[182]- not ok
[055] h_A[55] + h_B[55] = 110, h_C[183]- not ok
[056] h_A[56] + h_B[56] = 112, h_C[184]- not ok
[057] h_A[57] + h_B[57] = 114, h_C[185]- not ok
[058] h_A[58] + h_B[58] = 116, h_C[186]- not ok
[059] h_A[59] + h_B[59] = 118, h_C[187]- not ok
[060] h_A[60] + h_B[60] = 120, h_C[188]- not ok
[061] h_A[61] + h_B[61] = 122, h_C[189]- not ok
[062] h_A[62] + h_B[62] = 124, h_C[190]- not ok
[063] h_A[63] + h_B[63] = 126, h_C[191]- not ok
PASSED

원래는 32개씩 묶여서 원하는 수량대로만 돌라고
커널 코드에 if(i<N) 식으로 제한이 되어있는줄 알았는데, 없어도 의도한 대로는 돈다.
물론 돌아야 할 데이터의 갯수가 grid.x * gird.y * thread.x * thread.y 의 갯수만큼
떨어지지 않는다면 제한을 두어야겠지만 말이다.

결론 : warp은 최소단위로 묶이는 쓰레드의 갯수이긴 하지만, 실제로 그 이하로도 묶인다.
         블럭단위라고 해서 달라지는건 없는듯?
Posted by 구차니
Programming/openCL & CUDA2011. 1. 17. 22:45
CUDA Device에는 수 많은(?) 종류의 메모리가 있다.
이러한 메모리들의 특성에 대해 정리한 도표이다.
출처는 NVIDIA_CUDA_C_BestPracticesGuide.pdf 파일

의외(?)로 Local 메모리가 Local에 존재하지 않는다는 쇼킹한 이야기 -_-
쓰레드에 사용하는 메모리이지만, Off chip 즉 Device memory에 존재한다.


Posted by 구차니
Programming/openCL & CUDA2011. 1. 16. 22:11
CUDA의 kernel 부분에서 사용되는 내장변수는 다음과 같다.
아직 내용이 헷갈리지만 -_-

kernel<<<grid, thread_block>>>(vars, ... );

이런식으로 커널을 사용하는데
현재 block의 인덱스는 blockIdx에
현재 thread의 인덱스는 threadIdx에 들어간다.

blockDim 에는 전체 블럭의 카운트 값이 들어가는데
그렇다면 쓰레드의 전체 카운트 값은 어디에 들어갈려나?

아래는 Programming Guid에서 검색한 kernel 코드의 인덱스 부분
int row = blockIdx.y * blockDim.y + threadIdx.y
int col = blockIdx.x * blockDim.x + threadIdx.x;


Posted by 구차니