An Implementation of a FIR Filter on a GPU

 

Project Members

Faculty

Students

Overview

General-purpose computing using graphics processors (GPUs) is an active area of research. Numerical algorithms often perform same computations for each input element. Their performance can improve when the computation is parallelized. GPUs include several programmable fragment processing units (FPUs) that render an image using a number of textures. Programmers can define textures as inputs of the numerical algorithm and implement the algorithm as a fragment program. The image is rendered to an off-screen buffer and is then copied to the main memory.

The goal of this project is to implement a finite impulse response (FIR) filter on a GPU. A FIR filter is often used in audio processing applications. Other algorithms such as a frequency translating FIR filter and a Hilbert transformation use FIR filter as the building block.

We added our implementation of FIR filter to GNU Software Radio and evaluated its performance using a Pentium 4-HT 3.2 GHz processor and a Geforce 6600 video card. The results of the experiments indicate that the GPU implementation has better performance then the CPU implementation for a large number of taps.

NEW: FIR on GPU as a stand-alone program is available for download!

Publications

NVidia Software Installation under Linux

GNU Radio Installation under Linux Fedora Core 4

Downloads

Documentation

FIR on GPU is implemented as a patch to GNU Radio. The code is added inside #ifdef USE_GPU #endif pre-processor directives. If GNU Radio libraries and the demo code are compiled with -DUSE_GPU then GPU versions of GNU Radio blocks will replace the original CPU implementations. Change Makefiles that contain -DUSE_GPU to turn GPU implementations on/off (for i in `find . -name Makefile`; do grep -H 'DUSE_GPU' $i; done). The reason why original source files were patched instead of implementing new GNU Radio blocks is to allow GNU Radio programs use GPU without any modifications except a new compilation flag -DUSE_GPU. test1 is radio transmitter/receiver example.

References



Alexey Smirnov 2005-10-25