CUDA编程二(CUDA初始化)

CUDA初始化与核函数

CUDA初始化

CUDA安装成功之后,新建一个工程还是十分简单的,直接在新建项目的时候选择NVIDIA CUDA项目就可以了,我们先新建一个cuda工程,删掉自带的示例kernel.cu,然后新建项,新建一个CUDA C/C++ File ,我们首先看一下如何初始化CUDA,因此我命名为initcuda.cu

1.首先我们要使用CUDA的RunTime API 所以 我们需要include cuda_runtime.h

#include <stdio.h> 

//CUDA RunTime API
#include <cuda_runtime.h>

2.接下来这个函数会调用 runtime API 中 有关初始化CUDA的内容
//CUDA 初始化
bool InitCUDA()
{
    int count;

    //取得支持Cuda的装置的数目
    cudaGetDeviceCount(&count);

    //没有符合的硬件
    if (count == 0) {
        fprintf(stderr, "There is no device.\n");
        return false;
    }

    int i;

    for (i = 0; i < count; i++) {
        cudaDeviceProp prop;
        if (cudaGetDeviceProperties(&prop, i) == cudaSuccess) {
            if (prop.major >= 1) {
                break;
            }
        }
    }

    if (i == count) {
        fprintf(stderr, "There is no device supporting CUDA 1.x.\n");
        return false;
    }

    cudaSetDevice(i);

    return true;
}

这段程序首先会调用cudaGetDeviceCount 函数,获得支持 CUDA 的GPU的数量,如果计算机上没有支持 CUDA 的装置,则会传回 1,而这个1是device 0 ,device0 只是一个仿真装置,但是CUDA的很多功能都不支持(不支持CUDA1.0以上版本),因此我们要真正确定系统上是否有支持CUDA的装置,需要对每个device调用cudaGetDeviceProperties,来获得它们的具体参数,以及所支持的CUDA版本(prop.major 和 prop.minor 分别代表装置支持的版本号码,例如 6.5 则 prop.major 为 6 而prop.minor 为 5)

cudaGetDeviceProperties除了可以获得装置支持的 CUDA 版本之外,还有装置的名称、内存的大小、最大的 thread 数目、执行单元的频率等等。详情可参考NVIDIA 的 CUDA Programming Guide。

在找到支持 CUDA 1.0 以上的装置之后,就可以呼叫 cudaSetDevice 函式,把它设为目前要使用的显卡。

下面我们在Main函数中调用InitCUDA函数,由于我们使用VS,所以直接ctrl+F5编译执行就可以了,执行时如果系统上有支持 CUDA 的装置,应该会显示 CUDA initialized。

int main() 
{

    if (!InitCUDA()) 
    { 
        return 0; 
    }

    printf("CUDA initialized.\n"); return 0;

}



全部评论

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务