【发布时间】:2020-07-01 14:15:46
【问题描述】:
我正在编写一个大量使用英特尔内部函数(不包括 AVX512)的软件光栅化器。颜色由 32 位无符号表示,实际上只是 4 个压缩的 8 位颜色 (RGBA)。因此,一个 8 种颜色的向量可以保存在单个 __mm256 颜色变量中。但是,我需要通过将单个颜色乘以浮点数来操作此数组中的单个颜色。换句话说,我可能有另一个浮点/ps 值向量,__mm256 rLight,我想将颜色向量中 R 的相应 8 个无符号位乘以 rLight 变量中的浮点数。我找不到任何理智的方法来做到这一点。看来我需要做的是将感兴趣的 8 个字节提取到 __mm256 浮点数组中,然后进行乘法运算,然后转换回无符号并将它们放回原始数组中,但我很挣扎。
任何看起来很有希望的说明将不胜感激。
【问题讨论】:
-
您真的需要将它们乘以浮点数还是该因子的定点 8 位近似值就足够了?
-
那么浮点值(应该)总是小于 1。所以我真的需要做一个除法。出于这个原因,我认为转换为浮点数可能会使这更简单。
-
例如,乘以 0 到 255 之间的值并将结果向右移动 8 就足够了吗? (或 0 到 2^16-1 之间的值并移位 16)