当前位置: 首页 > news >正文

建设门户网站的意义哈尔滨新闻头条今日新闻

建设门户网站的意义,哈尔滨新闻头条今日新闻,郑州最近14天疫情情况,网站开发网站制作报价一、SIMD编程中的条件分支问题 在传统标量代码中&#xff0c;我们习惯使用if-else进行条件判断&#xff1a; void scalar_conditional(float* arr, int n) {for (int i 0; i < n; i) {if (arr[i] > 0) {arr[i] * 2;}} }但在AVX向量化编程中&#xff0c;直接条件分支会…

一、SIMD编程中的条件分支问题

在传统标量代码中,我们习惯使用if-else进行条件判断:

void scalar_conditional(float* arr, int n) {for (int i = 0; i < n; ++i) {if (arr[i] > 0) {arr[i] *= 2;}}
}

但在AVX向量化编程中,直接条件分支会引发两个关键问题:

  1. ​分支预测失败惩罚:当条件模式不规则时,流水线频繁刷新
  2. SIMD并行性破坏:8个float元素(256位寄存器)可能同时包含满足和不满足条件的元素

二、AVX掩码操作原理

2.1 核心思想

通过向量比较生成掩码(mask),使用位操作混合计算结果:

寄存器A: [ 1.0, -2.0, 3.0, -4.0, 5.0, -6.0, 7.0, -8.0 ]
掩码   : [ 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00 ] 
结果   = 原始值 * (掩码 ? 2.0 : 1.0)

2.3 AVX掩码操作指令集

指令类别典型指令操作描述延迟周期
比较指令_mm256_cmp_ps生成全通道掩码3
混合指令_mm256_blendv_ps根据掩码选择通道2
位逻辑运算_mm256_and_ps/_mm256_or_ps掩码逻辑操作1
条件加载_mm256_maskload_ps根据掩码加载内存4
算术运算_mm256_mask_add_ps带掩码的加法(AVX-512)N/A

三、VS2022实现示例

3.1 向量化条件处理

#include <immintrin.h>void avx_conditional(float* arr, int n) {const __m256 zero = _mm256_setzero_ps();const __m256 mul = _mm256_set1_ps(2.0f);for (int i = 0; i < n; i += 8) {__m256 data = _mm256_loadu_ps(arr + i);// 生成比较掩码(arr[i] > 0)__m256 mask = _mm256_cmp_ps(data, zero, _CMP_GT_OQ);// 计算两种可能的结果__m256 res_true = _mm256_mul_ps(data, mul);__m256 res_false = data;// 根据掩码混合结果__m256 result = _mm256_blendv_ps(res_false, res_true, mask);_mm256_storeu_ps(arr + i, result);}
}

3.2 完整代码

#include <immintrin.h>
#include <chrono>
#include <iostream>void scalar_conditional(float* arr, int n) {for (int i = 0; i < n; ++i) {if (arr[i] > 0) {arr[i] *= 2;}}
}void avx_conditional(float* arr, int n) {const __m256 zero = _mm256_setzero_ps();const __m256 mul = _mm256_set1_ps(2.0f);for (int i = 0; i < n; i += 8) {__m256 data = _mm256_loadu_ps(arr + i);// 生成比较掩码(arr[i] > 0)__m256 mask = _mm256_cmp_ps(data, zero, _CMP_GT_OQ);// 计算两种可能的结果__m256 res_true = _mm256_mul_ps(data, mul);__m256 res_false = data;// 根据掩码混合结果__m256 result = _mm256_blendv_ps(res_false, res_true, mask);_mm256_storeu_ps(arr + i, result);}
}void benchmark() {const int SIZE = 10000000;float* data = new float[SIZE];// 初始化随机数据for (int i = 0; i < SIZE; ++i) {data[i] = (i % 2) ? i * 0.1f : -i * 0.1f;}auto t1 = std::chrono::high_resolution_clock::now();scalar_conditional(data, SIZE);auto t2 = std::chrono::high_resolution_clock::now();avx_conditional(data, SIZE);auto t3 = std::chrono::high_resolution_clock::now();std::cout << "Scalar: "<< std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count()<< "ms\n";std::cout << "AVX:    "<< std::chrono::duration_cast<std::chrono::milliseconds>(t3 - t2).count()<< "ms\n";delete[] data;
}int main() {benchmark();return 0;
}

3.3 测试结果

在这里插入图片描述

http://www.cadmedia.cn/news/9542.html

相关文章:

  • 建设020网站需要多少钱网络客服
  • 开发一款app大概多少钱推广学院seo教程
  • wordpress分享可见seo接单
  • 市政府网站建设会议网站建设公司大全
  • 关于公司网站建设的请示中国联通业绩
  • 北京营销型网站推广hyein seo是什么牌子
  • 淄博手机网站建设正规电商培训班
  • 郑州手机网站建设价格明细表企业网络营销策略分析
  • 做任务用手机号登录网站谷歌play商店官网
  • 做网站怎么做起来的武汉武汉最新
  • 建设网站的功能包括哪些石家庄头条今日头条新闻
  • 政府网站建设经费预算方案seo网站关键词优化多少钱
  • 简洁大方网站建设微信营销推广软件
  • 坪山网站建设渠道成功的营销案例及分析
  • 做微信公众号的网站吗百度指数功能模块有哪些
  • 学做美食视频网站重庆seo排
  • 网络公关公司电话网站seo优化方案设计
  • 如何做微信小程序开发seo关键字优化软件
  • 宝安住房和建设局网站电话百度seo点击器
  • 微网站自助建设如何做推广
  • 东莞浩智建设网站哪家比较好品牌推广工作内容
  • 网站制作泉州公司百度推广怎么开户
  • 建设银行忘记密码网站首页外贸网站推广seo
  • 免费企业建站百度搜索什么关键词排名
  • 简单的编程代码班级优化大师简介
  • 阿盟住房和城乡建设局门户网站怎样做网络推广
  • 淄博微网站建设重庆网站建设维护
  • 东莞网站建设推广seo推广专员工作好做吗
  • 网站建设氵金手指下拉国际新闻网
  • 宁波江北区网站推广联系方式b2b电子商务网