-
Automatic tranlate C++ navitve type to Ipp types
std::is_same(ipp::get<int8_t>::type, Ipp8s);
std::is_same(ipp::get::type, Ipp8s); //int8_t and char are not always the same
std::is_same(ipp::get<uint8_t>::type, Ipp8u);
std::is_same(ipp::get<std::complex >::type, Ipp32fc); -
Automatic function dispath depend on parameter type
uint8_t *buf1 = ipp::malloc<uint8_t>(1024);
uint8_t *buf2 = ipp::malloc<uint8_t>(1024);
ipp::and_const(buf1, uint8_t(0x3), buf2, 1023); //same as ippsAndC_8u(...)unsigned int *buf1 = ipp::malloc(1024);
unsigned int *buf2 = ipp::malloc(1024);
ipp::and_const(buf1, unsigned int(0x3), buf2, 1023); //same as ippsAndC_32u(...) -
Extend some original IPP function to support more types
int8_t *buf1 = ipp::malloc<int8_t>(1024); int8_t *buf2 = ipp::malloc<int8_t>(1024); ipp::and_const(buf1, int8_t(0x3), buf2, 1023); //actually, ippsAndC_8s(...) is not supported
-
Re-write some context based IPP function as C++ class to make it easy to use
ipp::rand_gauss gas(0, 0.1, 0);
float *buf = ipp::malloc(1024);
gas.generate(buf, 1024);typedef ipp::win win;
win w(win::HAMMING, 1024);
w.mul(src, dst, 1024);
This is a header only C++ library and the only dependence is Intel Integrated Performance Primitives(IPP)
-
Build Test
mkdir build && cd build
export IPPROOT=/root/directory/of/intel/ipp/direcotry
cmake ..
..... -
CMake
export IPPROOT=/root/directory/of/intel/ipp/direcotry
include(IPPPlus)