본문 바로가기

Cuda

C++ Cuda 시스템 정보, GPU 정보 불러오기

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;
}
 

 

결과는 다음과 같다.