gpt4 book ai didi

c - 根据比较将浮点变量设置为 0.0f 或 1.0f 的 SSE 代码

转载 作者:太空狗 更新时间:2023-10-29 16:59:41 36 4
gpt4 key购买 nike

我有两个数组:char* cfloat* f 我需要做这个操作:

// Compute float mask
float* f;
char* c;
char c_thresh;
int n;

for ( int i = 0; i < n; ++i )
{
if ( c[i] < c_thresh ) f[i] = 0.0f;
else f[i] = 1.0f;
}

我正在寻找一种快速的方法来做到这一点:没有条件,如果可能的话使用 SSE(4.2 或 AVX)。

如果使用 float 而不是 char 可以产生更快的代码,我可以更改我的代码以仅使用 float :

// Compute float mask
float* f;
float* c;
float c_thresh;
int n;

for ( int i = 0; i < n; ++i )
{
if ( c[i] < c_thresh ) f[i] = 0.0f;
else f[i] = 1.0f;
}

谢谢

最佳答案

非常简单,只需进行比较,将字节转换为双字,并使用 1.0f:(未经测试,无论如何这并不是要复制和粘贴代码,而是要展示您的操作方式)

movd xmm0, [c]          ; read 4 bytes from c
pcmpgtb xmm0, threshold ; compare (note: comparison is >, not >=, so adjust threshold)
pmovzxbd xmm0, xmm0 ; convert bytes to dwords
pand xmm0, one ; AND all four elements with 1.0f
movdqa [f], xmm0 ; save result

应该很容易转换为内在函数。

关于c - 根据比较将浮点变量设置为 0.0f 或 1.0f 的 SSE 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19686330/

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