Как создать функции оболочки C ++ для IPP (примитивов Intel Performace)? - PullRequest
1 голос
/ 14 августа 2010

IPP - это библиотека C с сотнями таких функций:

IppStatus ippiTranspose_8u_C1R(const Ipp8u* pSrc, int srcStep,
                               Ipp8u* pDst, int dstStep,
                               IppiSize roiSize));

Чтобы иметь возможность вызывать эти функции более удобным, безопасным и согласованным способом, нам нужна функция-обертка C ++ для каждой функции C. Например:

void ippiTranspose(const Image<Ipp8u> &src, Rect srcRect, Image<Ipp8u> &dst, Point dstPos)
{
  if (!src.valid()) throw "Invalid src";
  if (!dst.valid()) throw "Invalid dst";
  Rect srcRoi = srcRect.isEmpty() ? src.rect() : srcRect;
  if (!src.rect().contains(srcRoi)) throw "Invalid src rect";
  Rect dstRoi = Rect(dstPos, srcRoi.size());
  if (!dst.rect().contains(dstRoi)) throw "Invalid dst rect";
  IppStatus st = ippiTranspose_8u_C1R(&src.at(srcRoi.topLeft()), src.step(), &dst.at(dstRoi.topLeft()), dst.step(), toIppiSize(srcRoi.size());
  if (st < 0) throw "ippiTranspose_8u_C1R failed";
}

Существуют логические шаблоны, которые можно применять ко всем функциям в IPP.

Как автоматически сгенерировать все эти оболочки?

Ответы [ 3 ]

2 голосов
/ 26 августа 2010

Есть некоторые обертки, предоставляемые Intel, которые хорошо спрятаны в ipp-примерах только для Windows. Я использую последнюю 7.0 бета-версию. Они предоставляют заголовки C ++, сгенерированные скриптом perl, которые должны использоваться в качестве оболочек C ++. «Обертка» для функции ippiTranspose_8u_C1R в вопросе такова:

 static inline IppStatus ippiTranspose_C1R( const Ipp8u* pSrc, int srcStep, Ipp8u* pDst, int dstStep, IppiSize roiSize) {
   return ippiTranspose_8u_C1R( pSrc, srcStep, pDst, dstStep, roiSize );
 }

Это просто более короткая версия вызова функции.

Что я ожидаю от хорошей оболочки C ++ для функции C:

  • отображает C-подобные параметры в C ++ (объекты, шаблоны)
  • проверка правильности введенных параметров
  • проверить, является ли результат успешным, ошибка или предупреждение
  • обработка ошибок с использованием исключений

Нам нужно реальное решение для мира C ++, Intel!

В настоящее время я работаю над программой, которая автоматически генерирует оболочки, как в примере в вопросе, и все выглядит хорошо.

Спасибо Россу за указание решения от Intel.

2 голосов
/ 25 апреля 2016

Лучше поздно, чем никогда.IPP 2017 имеет пакет расширений с полнофункциональным C ++ API.Предварительный просмотр имел небольшое функциональное покрытие, но, возможно, он был расширен для выпуска золота.https://software.intel.com/en-us/articles/intel-ipp-integration-wrappers

0 голосов
/ 25 августа 2010

Посмотрите на примеры, где есть файл ippi.hpp в разделе примеров "language". Это оболочка C ++.

...