cuda 프로그래밍 시, 내 그래픽카드의 스펙을 아는 것은 상당히 중요하다.
그래픽카드 스펙에 따라서 grid size, block size를 효율적으로 정할 수 있기 때문이다.
참고로 multiProcessorCount * warp_size 만큼이 최대로 동시에 실행 가능한 코어 숫자이다.
내 경우에는 그래픽카드로 RTX2070super를 사용하고 있는데
multiProcessorCount는 80이고, warp_size는 32다.
따라서 2560개의 코어에서 동시 실행 가능하다.
코드 >>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdlib.h>
#include <cstring>
#include <time.h>
#include <stdio.h>
#include <cmath>
#include <iostream>
void query_device()
{
int deviceCount = 0;
cudaGetDeviceCount(&deviceCount);
if (deviceCount == 0)
{
printf("No CUDA support device found");
}
int devNo = 0;
cudaDeviceProp iProp;
cudaGetDeviceProperties(&iProp, devNo);
printf(" Device %d: %s\n", devNo, iProp.name);
printf(" Number of multiprocessors: %d\n",
iProp.multiProcessorCount);
printf(" clock rate : % d\n",
iProp.clockRate);
printf(" Compute capability : %d.%d\n",
iProp.major, iProp.minor);
printf(" Total amount of global memory : %4.2f KB\n",
iProp.totalGlobalMem / 1024.0);
printf(" Total amount of constant memory: %4.2f KB\n",
iProp.totalConstMem / 1024.0);
printf(" Total amount of shared memory per block: %4.2f KB\n",
iProp.sharedMemPerBlock / 1024.0);
printf(" Total amount of max Threads per block: %d\n",
iProp.maxThreadsPerBlock);
printf(" Total amount of max Grids per x, y, z: %d %d %d\n",
iProp.maxGridSize[0], iProp.maxGridSize[1], iProp.maxGridSize[2]);
printf(" Total amount of max Threads per Dim x, Dim y, DIm z: %d %d %d\n",
iProp.maxThreadsDim[0], iProp.maxThreadsDim[1], iProp.maxThreadsDim[2]);
printf(" Warp size : %d", iProp.warpSize);
}
int main()
{
query_device();
return 0;
}
|
결과는 다음과 같다.
'Cuda' 카테고리의 다른 글
C++ Cuda parallel reduction strategy (0) | 2021.06.01 |
---|---|
C++ CUDA Warp 발산 (0) | 2021.05.31 |
C++ Cuda CPU와 GPU에서의 연산 속도 비교하기 (0) | 2021.05.30 |
C++ Cuda 메모리 할당에서의 예외 처리 (0) | 2021.05.30 |
C++ Cuda GPU에서의 더하기 연산 (0) | 2021.05.30 |