处理器核心具有多个矢量流水线时的simdlen值

问题描述 投票:1回答:1

我正在阅读qazxsw poi标准并试图让我对qazxsw poi / qazxsw poi指令有所了解。具体来说,我不清楚允许的OpenMP 4.5值是多少。

如果我的处理器内核有一个浮点单元(FPU),可以使用256位向量运算,我会使用!$omp simd作为64位浮点变量。

但是,如果核心有两个独立的矢量流水线和128位寄存器,我应该使用什么#pragma omp simd值?

openmp vectorization simd fpu
1个回答
2
投票

tl;博士:

该标准在特定硬件体系结构和simdlen构造的simdlen(4)子句之间没有任何关联,因此它的实现已定义。


我首先要补充一个问题:你是否需要使用simdlen

根据我对AVX2和AVX-512的不同实现的经验,我会说:不,为了在Xeon和Xeon Phi上使用每个核心的VPU,没有必要,但它对于生成的性能有点有益。代码使用两次本机寄存器大小作为参数。我认为预期的用途是不同的(见背景)。

从标准:

根据标准(p.74,l.22),simdlen构造的simd子句(与simdlen构造相对)指定了首选行为,而实际行为,以及原始问题的答案,是实现定义:

如果使用,则simdlen子句指定要同时执行的首选迭代次数。 simdlen子句的参数必须是常量正整数。在任何给定时间同时执行的迭代次数是实现定义的。

标准中规定的允许值的唯一限制是:

safelen子句的参数必须是常量正整数表达式。

如果同时指定了simdlen和safelen子句,则simdlen参数的值必须小于或等于safelen参数的值。

背景:

simdlen子句被添加到simd构造中(参见第72页的第2.8.1节),以支持指定每个SIMD块所需的精确迭代次数。

这可用于调用使用simdlen构造和相应的simd子句生成的匹配SIMD函数,其中后者具有稍微不同的语义:

如果创建了SIMD版本,则函数的并发参数数由simdlen子句确定。

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.