如何在避免溢出的同时对字符的特征矩阵求和?
How do you take the sum of an Eigen matrix of chars while avoiding overflows?
我是 Eigen C++ library 的新手。
我想对一个 8 位整数的矩阵求和,然后将结果放入 32 位整数的矩阵中,以避免溢出。
我也想避免铸造。例如,这是一个使用转换的解决方案:
Eigen::Matrix<uint8_t, 2, 2> input;
Eigen::Matrix<uint32_t, 2, 1> summation;
input << 255, 255,
3, 4;
summation = input.cast<uint32_t>().colwise().sum(); // [258, 259]
此外,请注意,手动编写这将是一个简单的 for 循环,但是,我想利用 SIMD 指令。
有没有办法对 uint8_t
进行逐列求和,从而避免强制转换并使用 SIMD 指令?
请注意,由于表达式模板,强制转换操作不会创建临时文件,生成的代码将通过手动循环在 uint32_t
中累积 uint8_t
。
我是 Eigen C++ library 的新手。
我想对一个 8 位整数的矩阵求和,然后将结果放入 32 位整数的矩阵中,以避免溢出。
我也想避免铸造。例如,这是一个使用转换的解决方案:
Eigen::Matrix<uint8_t, 2, 2> input;
Eigen::Matrix<uint32_t, 2, 1> summation;
input << 255, 255,
3, 4;
summation = input.cast<uint32_t>().colwise().sum(); // [258, 259]
此外,请注意,手动编写这将是一个简单的 for 循环,但是,我想利用 SIMD 指令。
有没有办法对 uint8_t
进行逐列求和,从而避免强制转换并使用 SIMD 指令?
请注意,由于表达式模板,强制转换操作不会创建临时文件,生成的代码将通过手动循环在 uint32_t
中累积 uint8_t
。