相关疑难解决方法(0)

使用SSE2(作为浮点数)缩放字节像素值(y = ax + b)?

我想计算y = ax + b,其中x和y是一个像素值[即,值范围为0~255的字节],a而且b是浮点数

由于我需要对图像中的每个像素应用此公式,此外,a和b对于不同的像素是不同的.在C++中直接计算很慢,所以我很有兴趣知道c ++中的sse2指令.

搜索之后,我发现浮点数与sse2的乘法和加法一样_mm_mul_ps_mm_add_ps.但首先,我需要将字节中的x转换为float(4字节).

问题是,在我从字节数据源(_mm_load_si128)加载数据后,如何将数据从byte转换为float?

c++ x86 simd sse2 visual-studio

6
推荐指数
1
解决办法
958
查看次数

我们可以在常规寄存器中存储浮点吗?

据我了解,浮点存储在XMM寄存器中,而不是诸如的通用寄存器中eax,因此我做了一个实验:

float a = 5;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a被存储1084227584XMM寄存器中。这是程序集版本:

.text
        .global _start
.LCO:
        .long 1084227584
_start:
        mov .LCO, %eax
        movss .LCO, %xmm0
Run Code Online (Sandbox Code Playgroud)

执行上述组件和使用它的调试gdb显示,在值eax将是1084227584,然而,在值ymm05

这是我的问题:

1- XMM寄存器有什么特别之处?除了SIMD指令,它们是唯一存储浮点的寄存器类型吗?

为什么不能在常规寄存器中设置相同的位?

2- floatdouble值始终存储为浮点吗?

我们永远不能将它们存储为fixed pointC或汇编语言吗?

c floating-point assembly x86-64

1
推荐指数
1
解决办法
260
查看次数

标签 统计

assembly ×1

c ×1

c++ ×1

floating-point ×1

simd ×1

sse2 ×1

visual-studio ×1

x86 ×1

x86-64 ×1