向量化数学函数的免费/开源 C/C++ 库? [关闭]
Posted
技术标签:
【中文标题】向量化数学函数的免费/开源 C/C++ 库? [关闭]【英文标题】:Free/open source C/C++ library of vectorized math functions? [closed] 【发布时间】:2011-07-31 11:25:36 【问题描述】:我正在寻找一个免费/开源 C/C++(任何一个都可以)库,该库包含常见数学函数(例如 ln 或 exp)的矢量化版本,类似于 Intel 的 Linux 向量数学库。我想要一个库,它可以让我编写如下内容:
double a[ARRAY_SIZE], b[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; ++i)
a[i] = ln(b[i]);
作为:
double a[ARRAY_SIZE], b[ARRAY_SIZE];
vectorized_ln(a, b, ARRAY_SIZE);
并让它使用 Intel 和 AMD 架构上可用的 SIMD 指令的全部功能。开发环境由在 Linux 上运行的 GNU 工具组成。英特尔的数学内核库包含一个叫做向量数学库的东西,它宣传“计算密集型核心数学函数的向量实现”,包括基本函数、三角函数等,所以我正在寻找类似的东西,但免费。
【问题讨论】:
'C/C++' 是我能读到的最糟糕的东西,因为它们不是一回事。 已编辑以表明任何一种语言都可以接受。 【参考方案1】:我开发了一个开源(BSD)Yeppp! mathematical library,它提供了一些向量基本函数(log、exp、sin、cos、tan),在性能上可以与 MKL 竞争。 Here is an example 使用 Yeppp 的向量对数函数!
【讨论】:
干得好,伙计!谢谢! The site 目前已关闭(至少对我而言),但这里是存储库:bitbucket.org/MDukhan/yeppp【参考方案2】:Felix von Leitner 写了an extensive presentation on the actual assembly produced by various c compilers。
他关于简单操作矢量化的笔记从幻灯片 28 开始。
对于 GCC 4.4 和 memset
类型循环
幻灯片 41 的标题为“超越编译器 - simd-shift”,并得出结论“gcc 在所有平台上都比视频编解码器程序员更聪明”
幻灯片 42 是 gcc 将自动矢量化幼稚代码的另一种情况。
所有这些加起来首先要检查您使用的编译器是否会简单地为您处理它。
【讨论】:
我已经打算使用各种方法编写这个程序的几个版本,包括 OpenMP、编写成适合自动向量化的循环,以及可能的内在函数。因为我正在处理的函数包括 exp() 和 log(),所以我正在寻找一个库,其中包含这些函数的版本已经矢量化,以便我可以将它们嵌入到我的程序中,看看是否有性能改进.为调查的链接 +1。 很公平,但我对已经支持的一些转换和优化感到惊讶,并认为其他人可能在同一条船上。【参考方案3】:您可能会发现 AMD 的 LibM 库(但它适用于 x64)与 SSEPlus 结合使用。还有一个Sony's Vector Math library 的开源 x86 变体。
【讨论】:
我一定会看到如何使用 libM/SSEPlus 来解决这个问题,因为 AMD 是我们的目标架构之一。看起来矢量数学库已嵌入到用于游戏物理的 Bullet 库中(目前托管在 code.google.com/p/bullet)。快速查看类层次结构表明它可能对我的目的来说太高了,但我会更深入地研究它以确定,无论如何我在那里看到了一些其他有趣的东西。 @dbliss:已修复,但令人讨厌的是他们无法永久链接这些东西......【参考方案4】:除了自己编写这些函数(这不是什么火箭科学)或使用 Ignacio 的链接..
英特尔的 SPMD 编译器可能适合您:http://ispc.github.com/
它是一个 C 风格的编译器,您可以在其中以串行/标量方式编写内容,它会根据特定的目标架构将它们并行化。生成的函数很容易从您的常规 CPP 项目中调用。
我引用:“ispc 编译了一种基于 C 的 SPMD 编程语言以在 CPU 的 SIMD 单元上运行;它通常在具有 4 宽 SSE 单元的 CPU 上提供 3 倍或更多的加速,而没有任何编写内在函数的困难代码。”
我还得自己尝试一下,但它看起来很适合通用计算。并行化。
【讨论】:
根据上面的石油运行时编译器,我没有考虑用单独的语言编写链接到我的代码,但我现在正在考虑。 只要您不以任何方式进行改造,我可以想象拥有一组处理繁重数学任务的小程序(与图形着色器不同)会非常优雅。而且 ISPC 有不同的后端(免费的多平台),未来可能还会有更多。以上是关于向量化数学函数的免费/开源 C/C++ 库? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章