NVIDIA NPP

 

NVIDIA NPP

 

1. 简介

 

NVIDIA Performance Primitives library (NPP) 是一系列为加速进程的库函数,NPP的原始目标是针对图像和视频进程,而现在以被开发工程师应用于其它很多领域,包括信号处理。与同级别的纯 CPU 函数相比,这些函数最高可实现5 - 10倍性能提升。利用NPP,开发者能够利用 (CUDA 4.1中) 2000多个图像处理与信号处理基元,在数小时之内即可实现应用程序的大幅性能提升。

无论用GPU加速的版本代替CPU基元还是将NPP基元与现有的GPU加速流水线相结合,NPP都能够实现极高的性能,同时可缩短开发时间。

2. 使用方法

 

2.1 文件

 

其中在安装了CUDA工具包后,默认会安装NPP library相关的头文件和库文件。

1) 头文件

其中所有的.h文件都安装在CUDA Toolkit目录的include文件下,其中有:

  • nppdefs.h
  • nppcore.h
  • nppi.h
  • npps.h
  • nppversion.h
  • npp.h

2) 库文件

从NPP 5.5版本开始,将所有的库文件分为了三个独立文件:

  • NPPC:这个库是个core library,主要包含了来自npp.h头文件的的函数,其中该库还被其它两个库所共享;
  • NPPI:这个库是为image Processing所提供的功能,    该库提供的函数是来自nppi.h头文件中所声明的。
  • NPPS:这个库是为signal processing所提供的功能,该库提供的函数是来自npps.h头文件中所声明的。

若安装了CUDA Toolkit后,其安装目录是在lib目录下,在Linux下有如图 1所示的动态和静态文件。

1

 

2.2 编译方式

 

由于NPP提供静态和动态库文件,所以它有两种编译方式,其中若在Linux中有foo.c程序,则两种编译方式为:

  • 动态编译

    nvcc foo.c -lnppi -o foo

  • 静态编译

    nvcc foo.c -lnppi_static -lculibos -o foo

 

2.3 API使用方式

 

对于NPP提供了API的操作内存空间是在device上的,所以不能将这些API应用于host中,但可以在host函数中调用。同时在NPP项目中需要添加include和library所需要的目录。

  • 一般情况下需要添加cuda tookitinclude目录,默认是:/usr/local/cuda-7.0/include
  • 对于library的文件,一般需要culibsnppc_static两个库,其它库则根据需要添加。
     1 #include <npp.h> 
     2 
     3 __global__ void testCudaFun(Npp8u *pDst,int num_types){ 
     4 
     5     for (int i = 0; i < num_types; i++){ 
     6 
     7         printf("%d:%d\n",i,pDst[i]); 
     8 
     9     } 
    10 
    11 } 
    12 
    13 int main(void){ 
    14 
    15     const int num_types = 2*sizeof(Npp8u); 
    16 
    17     Npp8u *host_pDst = (Npp8u*)malloc(num_types); 
    18 
    19     Npp8u *dev_pDst = (Npp8u*)nppsMalloc_8u(num_types); 
    20 
    21     for(int i=0; i<num_types;i++)    { 
    22 
    23         host_pDst[i] = i; 
    24 
    25     } 
    26 
    27     cudaMemcpy(dev_pDst,host_pDst,num_types,cudaMemcpyHostToDevice); 
    28 
    29     testCudaFun<<<1,1>>>(dev_pDst,num_types); 
    30 
    31     checkCudaErrors(cudaDeviceSynchronize()); 
    32 
    33     return 0
    34 
    35 } 

 

 

3. 功能

 

NPP针对Image Processing和Signal Processing两种不同的目标,实现了两套不同的API供使用。其中Image Processing是与图像处理相关的API,而Signal Processing是与信号处理相关的API。

 

 

3.1 Image Processing

 

Arithmetic and Logical 操作

1) Arithmetic

这个系列的API主要是与图形操作相关的算术运算,有AddC、Mul、MulC、MulScale、MulCScale、Sub、SubC    Div、DivC、Div_Round、AbsDiffC、Abs、Add、AbsDiff、AddSquare、Sqr、AddProduct、Sqrt、AddWeighted、Ln和Exp等函数。

2) Logical

Logical系列的是一个与逻辑操作相关的API,有AndC、OrC、XorC、RshiftC、LshiftC、And、Or、Xor和Not等函数。

3) Alpha

 

 

3.2 Signal processing

 

暂空

posted @ 2015-11-28 22:16  xiuneng  阅读(5209)  评论(0编辑  收藏  举报