相关疑难解决方法(0)

快速跨平台C/C++图像处理库

什么是用于图像处理的一些跨平台和高性能图像库(调整大小和查找颜色/色调直方图).不需要gui.这适用于C/C++.

到目前为止,我一直在寻找

  • OpenCV的
  • GIL是Boost的一部分
  • 魔鬼
  • CIMG

我的问题

  • 我上面列出的那些表现如何
  • 还有什么其他的图书馆

您的意见非常感谢.

c c++ performance cross-platform image-processing

27
推荐指数
2
解决办法
3万
查看次数

SIMD或不SIMD - 跨平台

我需要知道如何以某种方式编写一些可并行化问题的C++跨平台实现,以便我可以利用SIMD(SSE,SPU等)(如果可用).同时我希望能够在运行时在SIMD之间切换而不是SIMD.

你会如何建议我解决这个问题? (当然我不想为所有可能的选项多次实现该问题)

我可以看到这对C++来说可能不是一件容易的事,但我相信我错过了一些东西.到目前为止,我的想法看起来像这样......类cStream将是单个字段的数组.使用多个cStream我可以实现SoA(阵列结构).然后使用一些函数我可以伪造我需要在整个cStream上执行的Lambda函数.

// just for example I'm not expecting this code to compile
cStream a; // something like float[1024]
cStream b;
cStream c;

void Foo()
{
    for_each(
        AssignSIMD(c, MulSIMD(AddSIMD(a, b), a)));
}
Run Code Online (Sandbox Code Playgroud)

其中for_each将负责增加流的当前指针以及使用SIMD和没有SIMD内联仿函数的主体.

像这样的事情:

// just for example I'm not expecting this code to compile
for_each(functor<T> f)
{
#ifdef USE_SIMD
    if (simdEnabled)
        real_for_each(f<true>()); // true means use SIMD
    else
#endif
        real_for_each(f<false>());
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果启用SIMD,则检查一次,并且循环位于主仿函数周围.

c++ metaprogramming simd functor

12
推荐指数
1
解决办法
2823
查看次数