gpt4 book ai didi

上证所 SIMD 的上限/下限

转载 作者:行者123 更新时间:2023-11-30 18:06:54 31 4
gpt4 key购买 nike

任何人都可以建议一种使用 SSE4.1 之前的 SIMD 计算 float 下限/上限的快速方法吗?我需要正确处理所有极端情况,例如当我有一个 float 值时,它不能用 32 位 int 表示。

目前我正在使用类似于以下代码(我使用 C 内在函数,为清楚起见转换为 asm):

;make many copies of the data
movaps xmm0, [float_value]
movaps xmm1, xmm0
movaps xmm2, xmm0

;check if the value is not too large in magnitude
andps xmm1, [exp_mask]
pcmpgtd xmm1, [max_exp]

;calculate the floor()
cvttps2dq xmm3, xmm2
psrld xmm2, 31
psubd xmm3, xmm2
cvtsq2ps xmm2, xmm3

;combine the results
andps xmm0, xmm1
andnps xmm1, xmm2
orps xmm0, xmm1

有没有更有效的方法来检查浮点值对于 32 位 int 来说是否太大?

最佳答案

下面是单个元素的一些伪代码,应该可以直接转换为 vector 指令:

float f;
int i = (int)f; /* 0x80000000 if out of range (as from cvtps2dq) */
if (i == 0x80000000)
return f;
else
return (float)i;

您将在第二行中使用舍入模式将其转换为 int。您还可以在 MXCSR 中测试 IE 标志来检测超出范围的值。

关于上证所 SIMD 的上限/下限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268036/

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