首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于处理速度的向量类库

用于处理速度的向量类库
EN

Stack Overflow用户
提问于 2016-11-24 10:18:31
回答 3查看 1.1K关注 0票数 1

我正在研究并行处理算法,以提高处理速度。我想测试Agner Fog矢量类库

我想知道如何选择不同的向量类,例如Vec16c (SSE2指令集)和Vec32c (AVX指令集)。

我使用的是Intel Atom™x5-Z8350处理器,根据规范,它支持the 4.2指令集。

在硬件支持方面,如何有效地选择向量类?对于我的处理器,我可以使用Vec32c推荐的AVX指令集吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-24 10:22:22

您可以使用编译器定义的宏来检测为您正在编译的目标启用了哪些指令集,例如:

代码语言:javascript
运行
复制
// Assume SSE2 as a baseline
#include  <vectori128.h>

#if defined(__AVX2__)
#include  <vectori256.h>
using vector_type = Vec32c;
#else
// Vec16c uses whatever is enabled, so you don't have to check for SSE4 yourself
using vector_type = Vec16c;
#endif

这并不能进行运行时检测,因此,只有当您想使二进制文件只在带有AVX2的CPU上运行时,才启用AVX2。

如果您希望代码在不支持VCL的非x86平台上工作,或者在没有x86 SSE2的情况下工作,那么您也需要使用#if来保护#include <vectori128.h>

票数 4
EN

Stack Overflow用户

发布于 2016-11-24 10:37:43

32字节矢量需要AVX .( AVX2表示32B整数向量,如Vec32c)。因为您的Atom没有AVX,所以不要包括Agner的vectorclassi256.hvectorclassf256.h,只包含128头。

使用-march=native进行编译,以获得编译器以启用主机-CPU支持的所有指令集.

Vec16c函数的实现在启用时将自动使用SSE4.2本质,因为Vectorclass检查宏以查看启用了什么。因此,只需使用Vec16c,您将自动获得目标支持的每个函数的最佳实现。

(这是正确的,因为您正在执行编译时CPU /目标选项。如果你想自己执行运行时调度,那就更难了。)

票数 3
EN

Stack Overflow用户

发布于 2019-08-14 13:36:23

对向量类库进行了更新和改进。它被移到Github:

https://github.com/vectorclass

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40783694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档