如何矢量化,与海湾合作委员会?
-
03-07-2019 - |
题
V4系列的 gcc
编译器可以自动矢量化循环使用 单指令 处理器在一些现代的Cpu,如AMD速龙或者英特尔处理器/核心筹码。这是怎么做?
解决方案
原来的页面提供的详细信息在得到海湾合作委员会自动矢量 循环,包括一些例子:
http://gcc.gnu.org/projects/tree-ssa/vectorization.html
虽然例子是巨大的,它原来的语法用于调这些选项与最新的海湾合作委员会似乎已经改变了一点,现在看到的:
总之,以下选项将工作x86芯片SSE2, 日志的循环已经矢量的:
gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5
注意-msse也是一种可能性,但它将只有矢量化循环 使用浮动,而不一倍或int.
其他提示
有一个gimple(GCC的中级代表)传递pass_vectorize
。此过程将启用gimple级别的自动矢量化。
要启用自动向量化(GCC V4.4.0),我们需要执行以下步骤:
- 根据目标架构提及向量中的单词数。这可以通过定义宏
UNITS_PER_SIMD_WORD
。 来完成
- 可能需要在单独的文件中定义可能的矢量模式
<target>-modes.def
。此文件必须驻留在包含计算机描述的其他文件所在的目录中。 (根据配置脚本。如果您可以更改脚本,则可以将文件放在您希望的目录中。) -
根据目标体系结构考虑进行矢量化的模式。比如,4个单词将构成一个向量,或者8个半字将构成一个向量或两个双字将构成一个向量。有关详细信息需要在
VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI /
文件中提及。例如:
VECTOR_MODES (INT, 16); / V16QI V8HI V4SI V2DI /
VECTOR_MODES (FLOAT, 8); / V4HF V2SF */-O2 -ftree-vectorize
-
构建端口。可以使用命令行选项<=>启用矢量化。
醇>
不隶属于 StackOverflow