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)
五、单个Blovk最大线程个数
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 <iostream>
#include <cuda_runtime.h>
#include <npp.h>
#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