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

 

暫空


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM