CUDA(五)用deviceQuery看GPU屬性

night李發表於2016-08-22

在CUDA安裝好後可以用DeviceQuery看一下GPU的相關屬性,從而對GPU有一定了解,有助於今後的CUDA程式設計。


#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int deviceCount;
    cudaGetDeviceCount(&deviceCount);
    int dev;
    for (dev = 0; dev < deviceCount; dev++)
    {
        cudaDeviceProp deviceProp;
        cudaGetDeviceProperties(&deviceProp, dev);
        if (dev == 0)
        {
            if (/*deviceProp.major==9999 && */deviceProp.minor = 9999&&deviceProp.major==9999)
                printf("\n");

        }
        printf("\nDevice%d:\"%s\"\n", dev, deviceProp.name);
        printf("Total amount of global memory                   %u bytes\n", deviceProp.totalGlobalMem);
        printf("Number of mltiprocessors                        %d\n", deviceProp.multiProcessorCount);
        printf("Total amount of constant memory:                %u bytes\n", deviceProp.totalConstMem);
        printf("Total amount of shared memory per block         %u bytes\n", deviceProp.sharedMemPerBlock);
        printf("Total number of registers available per block:  %d\n", deviceProp.regsPerBlock);
        printf("Warp size                                       %d\n", deviceProp.warpSize);
        printf("Maximum number of threada per block:            %d\n", deviceProp.maxThreadsPerBlock);
        printf("Maximum sizes of each dimension of a block:     %d x %d x %d\n", deviceProp.maxThreadsDim[0],
            deviceProp.maxThreadsDim[1],
            deviceProp.maxThreadsDim[2]);
        printf("Maximum size of each dimension of a grid:       %d x %d x %d\n", deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], deviceProp.maxGridSize[2]);
        printf("Maximum memory pitch :                          %u bytes\n", deviceProp.memPitch);
        printf("Texture alignmemt                               %u bytes\n", deviceProp.texturePitchAlignment);
        printf("Clock rate                                      %.2f GHz\n", deviceProp.clockRate*1e-6f);
    }
    printf("\nTest PASSED\n");
    getchar();
}

程式碼中先通過cudaGetDeviceCount來得到系統中NVIDIA GPU的數目
再通過函式cudaGetDeviceProperties,獲取系統中GPU的屬性;
再獲取屬性後檢視最直接方法是設一個斷點通過除錯就能看到;
要不就通過列印的方法在控制檯上顯示;
這裡寫圖片描述
如執行結果所示;
deviceProp.name為GPU名字,如果沒有GPU則會輸出 Device Emulation
deviceProp.totalGlobalMem返回的是全域性儲存器的大小,對大資料或一些大模型計算時視訊記憶體大小必須大於資料大小,如圖返回的是2GB的儲存大小,
deviceProp.multiProcessorCount返回的是裝置中流多處理器(SM)的個數,流處理器(SP)的個數SM數×每個SM包含的SP數,其中帕斯卡為每個SM,64個SP,麥克斯韋為128個,開普勒為192個,費米為32個,
deviceProp.totalConstMem返回的是常數儲存器的大小,如同為64kB
deviceProp.sharedMemPerBlock返回共享儲存器的大小,共享儲存器速度比全域性儲存器快,
deviceProp.regsPerBlock返回暫存器的數目;
deviceProp.warpSize返回執行緒束中執行緒多少;
deviceProp.maxThreadsPerBlock返回一個block中最多可以有的執行緒數;
deviceProp.maxThreadsDim[]返回block內3維度中各維度的最大值
deviceProp.maxGridSize[]返回Grid內三維度中各維度的最大值;
deviceProp.memPitch返回對視訊記憶體訪問時對齊時的pitch的最大值;
deviceProp.texturePitchAlignment返回對紋理單元訪問時對其引數的最大值;
deviceProp.clockRate返回視訊記憶體的頻率;

相關文章