gpt4 book ai didi

c - 转换位 vector 需要多少个时钟周期?

转载 作者:行者123 更新时间:2023-11-30 19:14:56 24 4
gpt4 key购买 nike

我正在尝试将位 vector 算法修改为使用 float 而不是整数。听起来很荒谬,但想法是使用 AVX 优化,对于许多当前的处理器来说,这将允许同时处理四倍的数据量。

现在 float 缺少 |、& 和 ^ 操作,因此我认为可能必须将位 vector 解释为整数才能应用这些操作。 (希望算法的其余部分仍能获得足够的速度。)

澄清:我基本上想将 |、^、& 应用于 double 。我知道这些是结构化数据类型,并且这些操作对于 float 没有任何意义。我知道位摆弄可能必须限于有效数。我知道很难控制浮点的移位(我可能需要一些前导零)。我对汇编语言一无所知。重点是使用 larger parallelism/throughput in floating point SIMD calculations .

我的问题是如何以最好的方式做到这一点以及它在速度方面是否可行。 (毕竟我正在与原始的基于整数的算法竞争。)

鉴于我在 C 编程方面相对菜鸟,我也感谢有关此工作的一般建议。

编辑:代码可能会在 Ivy 或 Sandy Bridge 处理器上运行。

进一步说明:假设原始算法有这一步:

X <- A + B

现在,我用 double 重新创建此步骤,注意指数等于零,并且隐含的第一个零后面有一个前导零。

X <- A + B - 1.0

在这种情况下, double 尾数的最后 51 位将经历与原始整数的 64 位相同的过程。不同之处在于,我可以同时对四个数据点执行此操作。 IE。 204 位而不是 64 位(好吧,这是两个操作,所以可能只是 102 位)。但下一步要求 X <- A | B,或 A & B,或 A ^ B …该怎么办?

当然,这个概念可能存在许多误解和错误。毕竟,对于一个相对初学者来说,这是一个相当复杂的想法。

最佳答案

为什么不直接使用 VORPS、VANDPS 和 VXORPS 指令,这些指令在 AVX vector 上精确地按位或、与和异或?无需限制 52 位有效数或玩任何其他有趣的游戏;尽管这些指令位于浮点域,但它们只是对 256b vector 进行按位运算。你把这件事搞得太复杂了。

关于c - 转换位 vector 需要多少个时钟周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com