有没有办法在AVX上模拟_m256类型的整数按位运算?

 采蘑菇的雨天戴草帽_412_715 发布于 2023-02-11 14:03
  • cpu
  • 我有一个布尔表达式,我已设法在SSE2中实现.现在我想尝试在AVX中实现它,在并行性增加中利用额外的因子2(从128位SIMD类型到256).但是,AVX不支持整数操作(AVX2可以使用,但我正在使用Sandy Bridge处理器,因此它目前不是一个选项).但是,由于存在用于按位运算的AVX内在函数.我想我可以尝试将我的整数类型转换为浮点类型并查看它是否有效.

    第一次测试是成功的:

    __m256 ones = _mm256_set_ps(1,1,1,1,1,1,1,1);
    __m256 twos = _mm256_set_ps(2,2,2,2,2,2,2,2); 
    __m256 result = _mm256_and_ps(ones, twos);
    

    我正在按照自己的意愿来训练所有的0.模拟AND'ing两个而不是我得到2的结果.但是当相应地尝试11 XOR 4时:

    __m256 elevens = _mm256_set_ps(11,11,11,11,11,11,11,11); 
    __m256 fours = _mm256_set_ps(4,4,4,4,4,4,4,4); 
    __m256 result2 = _mm256_xor_ps(elevens, fours); 
    

    结果是6.46e-46(即接近0)而不是15.模拟地做11 OR 4给出的值为22而不是15应该是.我不明白为什么会这样.这是一个我错过的bug还是一些配置?

    我实际上期待我使用float的假设,好像它们是整数不起作用,因为初始化为浮点值的整数可能实际上不是精确值而是近似值.但即便如此,我对我得到的结果感到惊讶.

    有没有人有这个问题的解决方案或者我必须升级我的CPU才能获得AVX2支持吗?

    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有