标签: intel-ipp

使用英特尔IPP的OpenCV Mat图像?

我最近开始使用Intel Performance Primitives(IPP)进行图像处理.对于那些没有听说过IPP的人,可以将IPP视为MKL的模拟图像处理而不是线性代数.

我已经在OpenCV中实现了一个有点复杂的视觉系统,我想换掉一些OpenCV例程(例如卷积和FFT)来实现更快的IPP例程.我的OpenCV代码总是使用cv::Mat图像数据结构.但是,基于IPP代码样本,似乎IPP更喜欢CIppiImage数据结构.

我的系统在OpenCV中进行了几次图像转换,然后我想在IPP中做一些事情,然后在OpenCV中做更多的工作.这是让OpenCV和IPP很好地协同发挥的天真方式:

 cv::Mat = load original image
 use OpenCV to do some work on cv::Mat
 write cv::Mat to file

 CIppiImage = read cv::Mat from file //for IPP
 use IPP to do some work on CIppiImage
 write CIppiImage to file

 cv::Mat = read CIppiImage from file
 use OpenCV to do more work on cv::Mat
 write final image to file
Run Code Online (Sandbox Code Playgroud)

但是,这有点乏味,读/写文件可能会增加整体执行时间.


我试图让它在图像处理程序中更加无缝地在OpenCV和IPP之间交替.以下是一些可以解决问题的方法:

  1. 是否有一个班轮将转换cv::MatCIppiImage,反之亦然?
  2. 我对cv::Mat实现细节非常熟悉,但我不太了解CIppiImage …

c opencv image-processing computer-vision intel-ipp

14
推荐指数
1
解决办法
2792
查看次数

将FFT转换为谱图

我有一个音频文件,我正在遍历文件,每步取512个样本,然后通过FFT.

我将数据输出为块514浮动(使用IPP的ippsFFTFwd_RToCCS_32f_I),其中实部和虚部交错.

我的问题是,一旦我拥有这些复杂数字,我该怎么办?目前我正在为每个价值做

const float realValue   = buffer[(y * 2) + 0];
const float imagValue   = buffer[(y * 2) + 1];
const float value       = sqrt( (realValue * realValue) + (imagValue * imagValue) );
Run Code Online (Sandbox Code Playgroud)

这提供了一些稍微有用的东西,但我更倾向于在0到1的范围内获得值.上面的问题是峰值最终会回到9或更多.这意味着事情会恶化饱和,然后光谱图的其他部分几乎不会出现,尽管当我通过试听的频谱图运行音频时它们看起来非常强大.我完全承认我不是100%确定FFT返回的数据是什么(除了它代表我传入的512个样本长块的频率值).特别是我的理解是缺乏compex数字代表什么.

任何建议和帮助将不胜感激!

编辑:只是为了澄清.我的一个大问题是,如果不知道比例是什么,返回的FFT值是没有意义的.有人能指出我制定这种规模吗?

Edit2:通过执行以下操作,我得到了非常好看的结果:

size_t count2   = 0;
size_t max2     = kFFTSize + 2;
while( count2 < max2 )
{
    const float realValue   = buffer[(count2) + 0];
    const float imagValue   = buffer[(count2) + 1];
    const float value   = (log10f( sqrtf( (realValue * realValue) + (imagValue * …
Run Code Online (Sandbox Code Playgroud)

c++ fft spectrogram intel-ipp

12
推荐指数
4
解决办法
9938
查看次数

std :: sort vs intel ipp排序性能.我究竟做错了什么?

我试图比较std::sort(使用std::vector结构)和英特尔ipp排序的性能.

我在Intel Xeon处理器上运行此测试 model name : Intel(R) Xeon(R) CPU X5670 @ 2.93GHz

我正在排序长度为20000个元素的向量并排序200次.我尝试了2种不同的ipp排序程序即.ippsSortDescend_64f_IippsSortRadixDescend_64f_I.在所有情况下,ipp排序至少比5至10倍慢std::sort.我期待ipp较小阵列的排序可能会慢一些,但除此之外通常应该更快std::sort.我在这里错过了什么吗?我究竟做错了什么?

std::sort 在我的所有测试用例中始终更快.

这是我的计划

#include <array>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <sys/timeb.h>

#include <vector>
#include <chrono>

#include "ipp.h"

using namespace std;

const int SIZE = 2000000;
const int ITERS = 200;

//Chrono typedefs
typedef std::chrono::high_resolution_clock Clock;
typedef std::chrono::microseconds microseconds;

//////////////////////////////////// std /////////////////////////////////// …
Run Code Online (Sandbox Code Playgroud)

c++ performance intel-ipp

11
推荐指数
2
解决办法
1276
查看次数

如何在运行时删除LD_LIBRARY_PATH?

我正在构建一个使用Intel的IPP库的C++应用程序.默认情况下,此库安装在/ opt中,并且要求您设置LD_LIBRARY_PATH编译和运行软件(如果选择共享库链接,我会这样做).我已经修改了我configure.ac/ Makefile.am我在编译时不需要设置该变量,但是我仍然无法在运行时找到共享库; 我怎么做?

我正在使用-Wl, -R/path/to/libdir标志进行编译g++

更新1:实际上我的二进制程序有一些正确链接的IPP库,但只有一个不是:

$ ldd myprogram
linux-vdso.so.1 =>  (0x00007fffa93ff000)
libippacem64t.so.6.0 => /opt/intel/ipp/6.0.2.076/em64t/sharedlib/libippacem64t.so.6.0 (0x00007f22c2fa3000)
libippsem64t.so.6.0 => /opt/intel/ipp/6.0.2.076/em64t/sharedlib/libippsem64t.so.6.0 (0x00007f22c2d20000)
libippcoreem64t.so.6.0 => /opt/intel/ipp/6.0.2.076/em64t/sharedlib/libippcoreem64t.so.6.0 (0x00007f22c2c14000)
[...]
libiomp5.so => not found
libiomp5.so => not found
libiomp5.so => not found
Run Code Online (Sandbox Code Playgroud)

当然图书馆在那里:

$ locate libiomp5.so
/opt/intel/ipp/6.0.2.076/em64t/sharedlib/libiomp5.so
Run Code Online (Sandbox Code Playgroud)

c++ g++ autotools shared-libraries intel-ipp

10
推荐指数
2
解决办法
9068
查看次数

是否有任何ARM等效的英特尔IPP?

在与英特尔IPP库链接时,某些DSP类型的工作负载似乎在英特尔x86 x86_64处理器上显示出非常显着的性能提升.

想知道ARM方面是否有类似的东西?特别是那可能适用于ARM9,ARM11和Cortex-A8/A9(不一定具有相同的性能提升水平).

最后,这个问题可能在这里可能不正确/可接受,所以mods应该留下评论并且我可以编辑它.

我一直在努力阅读IPP的许可协议,但目前尚不清楚Linux上的商业IPP许可证(售价为199美元以上的税)是否可以使用一个个人副本(但可能用于商业用途). ,或者可以将他们的申请与该图书馆联系起来并出售以获取商业利益?或者这需要不同类型的许可证?想知道在英特尔网站上的一个地方问这个问题(没有像联系销售)!

performance arm intel intel-ipp

9
推荐指数
2
解决办法
5612
查看次数

关于如何使用英特尔集成性能基元评估openCV的建议?

我们有相当数量的openCV代码,我们计划调查英特尔的IPP,并了解我们在应用程序中可以实现哪种加速.

英特尔有一篇关于如何链接OpenCV和IPP的白皮书. 将英特尔IPP与OpenCV一起使用 在某些情况下,链接可能是自动的,但支持的数量尚不清楚.

我们是一家门店,对任何战争故事或者在进行此类评估时需要注意的问题/问题感兴趣.

谢谢

c++ performance opencv image-processing intel-ipp

6
推荐指数
1
解决办法
980
查看次数

英特尔性能原始IPP安装

我已经在计算机上安装了Intel IPP,我按照特定的步骤在这里找到它:

http://software.intel.com/zh-CN/articles/intel-integrated-performance-primitives-intel-ipp-for-linux-how-to-install-intel-ipp-for-linux/

并将该库链接到我的IDE(即Eclipse),它可以完美编译,但是当我运行代码时出现此错误:

加载共享库时出错:libippcv.so.7.0:无法打开共享库文件:没有这样的文件或目录

知道可能是什么问题吗?

谢谢

eclipse opencv intel-ipp

5
推荐指数
1
解决办法
3023
查看次数

英特尔IPP卷积已弃用 - 是否有不同的IPP 2D卷积方法?

我正在尝试使用 英特尔集成性能基元(IPP),我很好奇在IPP中进行2D卷积的"正确方法".

根据英特尔IPP文档,ippiConvFull(文档)和ippiConvValid(文档)已弃用.但是我没有在IPP中看到任何其他2D卷积例程.

我做了一些搜索,我没有找到任何替代IPP功能的2D图像卷积.

  • 是否有替代ippiConvFullippiConvValid在IPP?
  • 或者,英特尔刚刚从IPP中删除了卷积?

c c++ image-processing intel-ipp

5
推荐指数
1
解决办法
1734
查看次数

什么是英特尔IPP库中的外部线程?

我正在阅读英特尔针对C和C++ 的集成性能基元库.他们提到外部线程作为新功能之一.

外部线程的新API比内部线程更有效.资源

什么是外部线程以及它与std::threadC++有什么关系?

c++ multithreading intel-ipp

5
推荐指数
1
解决办法
585
查看次数

为什么iplRotate()没有给我正确的结果?

感叹我很遗憾地说我正在使用英特尔IPL(图像处理库)处理我正在处理的一些图像处理代码.这是我努力让我的图像正确旋转的故事.

  1. 我有一个源图像.它的大小(w,h)不一定是正方形.
  2. 它将以角度θ旋转.
  3. 我已经计算出适合旋转角度θ的尺寸(w,h)的图像所需的输出尺寸.这个大小是(dw,dh).我已经分配了一个具有该大小的目标缓冲区.
  4. 我想通过角度旋转所述源图像THETA有关源图象的中心(W/2,H/2)和具有旋转后的图像在我的目标缓冲区居中.

iplRotate()采用2个移位参数xShiftyShift,它们表示在执行旋转后图像应沿x和y轴移动的距离.

问题是我无法让iplRotate将旋转的图像置于目标图像的中心.它总是偏离中心.

我最好的XSHIFT和YSHIFT什么猜测应该是这样的:

  • xShift = dw - w
  • yShift = dh - h

但这不起作用,我不知道还有什么办法来计算xShiftyShift.有没有人有任何关于如何使用iplRotate做我想要的建议?

最后一点信息: 我试图使用iplGetRotateShift()再次计算xShift和yShift无济于事.我想这会起作用:

iplGetRotateShift(dw / 2.0, dh / 2.0, theta, &xShift, &yShift);
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.


编辑: 我使用英特尔IPP 6.0而不是IPL重写代码,我看到相同的错误结果.我无法想象,英特尔有旋转错误在2个不同的库,所以我必须做一些错误的.


编辑: 我尝试了Dani van der Meer建议的以下(IPP)代码:

xShift = (dw - w) / 2.0;
yShift = (dh - …
Run Code Online (Sandbox Code Playgroud)

c++ windows image-processing intel-ipp

4
推荐指数
1
解决办法
1043
查看次数