CUDA小白 - NPP(1) - NppCore

cuda小白
原文链接 NPP

GPU架构近些年也有不少的变化,具体的可以参考别的博主的介绍,都比较详细。还有一些cuda中的专有名词的含义,可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》

先从最基本的开始,最基础的无非就是与CUDA相关的函数,由于比较基础,所以就没有深究与原始的cuda开头的函数的关系。
当前模块内容比较简单,如果没有使用需求可以跳过。
常见的NppStatus,可以看这里。

一、获取GPU设备属性

获取GPU单个SM模块最大线程个数,单个block最大的线程个数,有效GPU的最大SM个数

int nppGetGpuDeviceProperties(int *pMaxThreadsPerSM,
							  int *pMaxThreadsPerBlock,
							  int *pNumberOfSMs)	

二、GPU名字

获取设备名字,一般就是显卡的型号

const char* nppGetGpuName(void)	

三、获取SM个数

int nppGetGpuNumSMs(void)	

四、获取NPP库版本

用于表示版本的又三个变量 major,minor,build

const NppLibraryVersion* nppGetLibVersion(void)	

五、单个Block最大线程个数

int nppGetMaxThreadsPerBlock(void)	

六、单个SM最大线程个数

int nppGetMaxThreadsPerSM(void)	

七、获取CUDA的stream流

cudaStream_t nppGetStream(void)	

八、获取上下文

NppStatus nppGetStreamContext(NppStreamContext * pNppStreamContext)	

九、获取当前stream关联到的设备中每个SM最大线程个数

unsigned int nppGetStreamMaxThreadsPerSM(void)	

十、获取当前stream关联到的设备中SM个数

unsigned int nppGetStreamNumSMs(void)	

十一、设置stream

NppStatus nppSetStream(cudaStream_t hStream)	

本地test,因为比较简单,所以干脆放在一起进行测试了,测试结果如下:

code:

#include 
#include 
#include 

#define PRINT_VALUE(value) {  \
  std::cout << "[GPU] " << #value << " = " << value << std::endl; }

int main() {
  int max_threads_per_sm;
  int max_threads_per_block;
  int number_of_sm;
  int ret = nppGetGpuDeviceProperties(&max_threads_per_sm, &max_threads_per_block,
                                      &number_of_sm);
  PRINT_VALUE(max_threads_per_sm)
  PRINT_VALUE(max_threads_per_block)
  PRINT_VALUE(number_of_sm)
  
  std::string device_name = nppGetGpuName();
  PRINT_VALUE(device_name)

  int gpu_num_sm = nppGetGpuNumSMs();
  PRINT_VALUE(gpu_num_sm)

  NppLibraryVersion version = *(nppGetLibVersion());
  PRINT_VALUE(version.major)
  PRINT_VALUE(version.minor)
  PRINT_VALUE(version.build)

  int max_threads_per_block2 = nppGetMaxThreadsPerBlock();
  PRINT_VALUE(max_threads_per_block2)


  int max_threads_per_sm2 = nppGetMaxThreadsPerSM();
  PRINT_VALUE(max_threads_per_sm2)

  unsigned int stream_max_threads_per_sm = nppGetStreamMaxThreadsPerSM();
  PRINT_VALUE(stream_max_threads_per_sm)

  unsigned int stream_number_of_sm = nppGetStreamNumSMs();
  PRINT_VALUE(stream_number_of_sm)

  return 0;
}

compile:

g++ -o test test.cpp -I/usr/local/cuda/include -L/usr/local/cuda/lib64 -lnppc -lnppim

result:

CUDA小白 - NPP(1) - NppCore_第1张图片

你可能感兴趣的:(c++,CUDA)