日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cuda基础知识

發(fā)布時間:2024/7/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cuda基础知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

nvidia-cuda 手冊:https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#kernels

nvidia cuda 教學(xué)視頻?https://www.nvidia.cn/object/cuda_education_cn_old.html

介紹:

CUDA編程模型是一個異構(gòu)模型,需要CPU和GPU協(xié)同工作。在CUDA中,hostdevice是兩個重要的概念,我們用host指代CPU及其內(nèi)存,而用device指代GPU及其內(nèi)存。

典型的CUDA程序的執(zhí)行流程如下:

  • 分配host內(nèi)存,并進行數(shù)據(jù)初始化;
  • 分配device內(nèi)存,并從host將數(shù)據(jù)拷貝到device上;
  • 調(diào)用CUDA的核函數(shù)在device上完成指定的運算;
  • 將device上的運算結(jié)果拷貝到host上;
  • 釋放device和host上分配的內(nèi)存。?
  • 1.hello world

    #include <stdio.h> #include <cuda_runtime.h> ?//頭文件//核函數(shù)聲明,前面的關(guān)鍵字__global__ __global__ void kernel( void ) { }int main( void ) {//核函數(shù)的調(diào)用,注意<<<1,1>>>,第一個1,代表線程格里只有一個線程塊;第二個1,代表一個線程塊里只有一個線程。kernel<<<1,1>>>();printf( "Hello, World!\n" );return 0; }

    上面流程中最重要的一個過程是調(diào)用CUDA的核函數(shù)來執(zhí)行并行計算,kernel是CUDA中一個重要的概念,kernel是在device上線程中并行執(zhí)行的函數(shù),核函數(shù)用__global__符號聲明,在調(diào)用時需要用<<<grid, block>>>來指定kernel要執(zhí)行的線程數(shù)量,在CUDA中,每一個線程都要執(zhí)行核函數(shù),并且每個線程會分配一個唯一的線程號thread ID,這個ID值可以通過核函數(shù)的內(nèi)置變量threadIdx來獲得。?

    要深刻理解kernel,必須要對kernel的線程層次結(jié)構(gòu)有一個清晰的認(rèn)識。首先GPU上很多并行化的輕量級線程。kernel在device上執(zhí)行時實際上是啟動很多線程,一個kernel所啟動的所有線程稱為一個網(wǎng)格(grid),同一個網(wǎng)格上的線程共享相同的全局內(nèi)存空間,grid是線程結(jié)構(gòu)的第一層次,而網(wǎng)格又可以分為很多線程塊(block),一個線程塊里面包含很多線程,這是第二個層次

    nvcc hello.cu -o hello.o

    ./hello.o

    2.查看gpu信息

    #include <stdio.h> int main() {int nDevices;cudaGetDeviceCount(&nDevices);for (int i = 0; i < nDevices; i++) {cudaDeviceProp prop;cudaGetDeviceProperties(&prop, i);printf("Device Num: %d\n", i);printf("Device name: %s\n", prop.name);printf("Device SM Num: %d\n", prop.multiProcessorCount);printf("Share Mem Per Block: %.2fKB\n", prop.sharedMemPerBlock / 1024.0);printf("Max Thread Per Block: %d\n", prop.maxThreadsPerBlock);printf("Memory Clock Rate (KHz): %d\n",prop.memoryClockRate);printf("Memory Bus Width (bits): %d\n",prop.memoryBusWidth);printf("Peak Memory Bandwidth (GB/s): %.2f\n\n",2.0 * prop.memoryClockRate * (prop.memoryBusWidth / 8) / 1.0e6);}return 0; }

    nvcc hello.cu -o hello.o

    ./hello.o

    參考:https://zhuanlan.zhihu.com/p/34587739

    總結(jié)

    以上是生活随笔為你收集整理的cuda基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。