C# 使用Vector256写了一个简单的帮助类Vector256Helper

 当数据量大的时候用普通代码计算非常耗时,这里简单利用simd加速处理

 internal unsafe class Vector256Helper{/// <summary>/// 统计元素个数/// </summary>/// <param name="array"></param>/// <param name="elementToCount">需要统计的元素</param>/// <returns></returns>public static int Count(int[] array, int elementToCount){int count = 0;int vectorSize = Vector256<int>.Count;int limit = array.Length - (array.Length % vectorSize);fixed (int* pArray = array){int* ptr = pArray;var target = Vector256.Create(elementToCount);Vector256<int> equalMask = Vector256<int>.Zero;for (int i = 0; i < limit; i += vectorSize){Vector256<int> vector = *(Vector256<int>*)(ptr + i);equalMask += Avx2.CompareEqual(vector, target);}int* equalMaskPtr = (int*)&equalMask;for (int j = 0; j < vectorSize; j++){count += -*(equalMaskPtr + j);}// 处理剩余的元素for (int i = limit; i < array.Length; i++){if (*(pArray + i) == elementToCount)count++;}}return count;}/// <summary>/// 求和/// </summary>/// <param name="buffer"></param>/// <returns></returns>public static int Sum(int[] buffer){int vectorSize = Vector256<int>.Count;int sum4 = 0;Vector256<int> sumV = Vector256<int>.Zero;int j;int m = buffer.Length - vectorSize;fixed (int* p = buffer){for (j = 0; j <= m; j += vectorSize){sumV += *(Vector256<int>*)(p + j);}int* ptr = (int*)&sumV;for (int i = 0; i < vectorSize; i++){sum4 += *(ptr + i);}// 处理剩余的元素for (; j < buffer.Length; j++){sum4 += *(p + j);}}return sum4;}/// <summary>/// 求平均数/// </summary>/// <param name="buffer"></param>/// <returns></returns>public double Avg(int[] buffer){int sum = Sum(buffer);return sum / (double)buffer.Length;}/// <summary>/// 求最大值/// </summary>/// <param name="array"></param>/// <returns></returns>public static int Max(int[] array){int vectorSize = Vector256<int>.Count;int limit = array.Length - (array.Length % vectorSize);fixed (int* pArray = array){int maxElement = *pArray;Vector256<int> vectorMax = *(Vector256<int>*)(pArray);for (int i = 1; i < limit; i += vectorSize){Vector256<int> vector = *(Vector256<int>*)(pArray + i);vectorMax = Avx2.Max(vectorMax, vector);}int* maxPtr = (int*)&vectorMax;for (int j = 0; j < vectorSize; j++){maxElement = Math.Max(maxElement, *(maxPtr + j));}for (int i = limit; i < array.Length; i++){maxElement = Math.Max(maxElement, *(pArray + i));}return maxElement;}}/// <summary>/// 求最小值/// </summary>/// <param name="array"></param>/// <returns></returns>public static int Min(int[] array){int vectorSize = Vector256<int>.Count;int limit = array.Length - (array.Length % vectorSize);fixed (int* pArray = array){int maxElement = *pArray;Vector256<int> vectorMin = *(Vector256<int>*)(pArray);for (int i = 1; i < limit; i += vectorSize){Vector256<int> vector = *(Vector256<int>*)(pArray + i);vectorMin = Avx2.Min(vectorMin, vector);}int* maxPtr = (int*)&vectorMin;for (int j = 0; j < vectorSize; j++){maxElement = Math.Min(maxElement, *(maxPtr + j));}for (int i = limit; i < array.Length; i++){maxElement = Math.Min(maxElement, *(pArray + i));}return maxElement;}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

板凳--------57.Linux/Unix 系统编程手册(下) -- SOCKET : Unix domain

https://blog.51cto.com/u_15567199/5204540 【linux网络编程】容错处理文件 wrap.h、wrap.c_wx623c6c9. // 容错处理 wrap.h #ifndef _WRAP_H_ #define _WRAP_H_#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <error.h> #i…

【BSCP系列第2期】XSS攻击的深度剖析和利用(文末送书)

文章目录 前言一、官方地址二、开始&#xff08;15个&#xff09;1&#xff1a;Lab: DOM XSS in document.write sink using source location.search inside a select element2&#xff1a;Lab: DOM XSS in AngularJS expression with angle brackets and double quotes HTML-e…

北邮《计算机网络》MAC子层笔记

文章目录 缩写复习MAC层所在层次动态分配信道算法们的简要介绍信道的五条基本假设多路访问的协议&#xff08;理论上的协议&#xff09;aloha协议CSMA协议其他冲突避免协议无线局域网协议 &#xff0c;MACA 以太网协议802.3&#xff08;实际协议&#xff0c;刚刚是理论&#xf…

小白学python(第一天)

在有了C语言的基础后&#xff0c;我们学python会变得相当容易&#xff0c;毕竟c生万物&#xff0c;废话不多说&#xff0c;直接进入我们的正题 课前准备 Python环境的搭建以及Pycharm的安装 python环境安装 Download Python | Python.org 因为我的电脑是windows&#xff0c;…

C++精解【6】

文章目录 eigenMatrix基础例编译时固定尺寸运行指定大小 OpenCV概述 eigen Matrix 基础 所有矩阵和向量都是Matrix模板类的对象。向量也是矩阵&#xff0c;单行或单列。Matrix模板类6个参数&#xff0c;常用就3个参数&#xff0c;其它3个参数有默认值。 Matrix<typename…

使用鸿蒙HarmonyOs NEXT 开发 快速开发 简单的购物车页面

目录 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 2.源码&#xff1a; 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 定义了一个购物车页面的布局&#x…

6. Revit API UI: PreviewControl(预览控件)

6. Revit API UI: PreviewControl&#xff08;预览&#xff09; PreviewControl 有时我们需要一个预览功能&#xff0c;而Revit也提供了一个PreviewControl类来帮助我们实现这个功能。 从类的继承关系来看&#xff0c;PreviewControl就是一个用户自定义控件&#xff0c;它就…

accelerate 笔记:进程管理

在使用分布式训练系统时&#xff0c;管理各个进程在 GPU 上的执行时间和顺序非常重要。一些进程会比其他进程更快完成&#xff0c;有些进程在其他进程未完成之前不应该开始执行 1 每台机器进行一次 accelerator.on_local_main_process def do_my_thing():do_thing_once_per_s…

外贸行业 - 收汇日期

“收汇日期”指的是外贸业务中&#xff0c;出口方从进口方收到货款的具体日期。在外贸交易中&#xff0c;特别是使用信用证&#xff08;Letter of Credit, L/C&#xff09;、电汇&#xff08;Telegraphic Transfer, T/T&#xff09;、付款交单&#xff08;Documents against Pa…

HTML【重点标签】

一、列表标签 1.无序列表 父级别&#xff1a; 无序列表的标题 ----表示无序列表的整体&#xff0c;用于包裹li标签 子级别&#xff1a; 无序列表一行的内容 ----表示无序列表的每一项&#xff0c;用于包含一行的内容 语义&#xff1a;构建没有顺序的列表 特点&#xff1a;列…

Linux 中经常见到的 gz 文件

在linux的使用中&#xff0c;.gz格式的压缩文件非常常见&#xff0c;下面整理一下关于.gz格式的压缩和解压缩。 解压缩gz文件 通过gzip解压缩 gzip -d myfile.gz执行该命令后&#xff0c;文件被解压到当前目录&#xff0c;原gz文件被删除。 如果你不想删除源文件&#xff0c…

基于 RGB的热成像无人机树冠数据集(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 摘要&a…

基于PaddleDetection的电路板瑕疵检测

文章目录 1. 数据集与框架介绍2. 任务详情3. Cascade R-CNN简介4. 数据分析各类别样本的数量真实框的宽高比真实框在原图的大小比例 5. 相关配置数据增强数据集路径和评估指标学习率和优化器配置预训练CascadeRCNN 的配置日志记录 6. 训练预测7. 参考链接 1. 数据集与框架介绍 …

问题:以下哪个不是报名“天天特价“活动必须具有的条件( ) #其他#其他#媒体

问题&#xff1a;以下哪个不是报名"天天特价"活动必须具有的条件( ) A、店铺信誉达到一钻 B、开通淘金币抵扣 C、宝贝月销量达到10个 D、店铺同类产品要达到10个以上 参考答案如图所示

C++观察者模式

一、定义 观察者&#xff08;Observer&#xff09;模式 定义如下&#xff1a;是一种对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 二、观察者模式组成&#xff1a; 抽象目标角色&#xff08…

易优cms远程调试

易优cms自ThinkPHP5.0版本开始&#xff0c;提供了Socket日志驱动用于本地和远程调试。 Socket调试 只需要在配置文件中设置如下&#xff1a; ‘log’ > [ ‘type’ > ‘socket’, ‘host’ > ‘slog.thinkphp.cn’, //日志强制记录到配置的client_id ‘force_c…

无人机捕获的视频跟踪UAV123数据集(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 摘要&a…

TC3xx启动的功能安全机制浅析(2)

目录 1.引入 2. 应用启动阶段 3.小结 1.引入 TC3xx启动的功能安全机制浅析(1)-CSDN博客我们简述了SM基本概念以及芯片启动阶段Safety机制&#xff0c;接下来我们继续描述应用启动阶段相关功能安全机制 2. 应用启动阶段 在用户启动阶段&#xff0c;与功能安全相关的内容…

港股再遭重挫,市场到底在恐慌什么?

恒指上周五挫逾300点后&#xff0c;今日早间延续低迷低开超百点&#xff0c;随后一路震荡下行&#xff0c;最低见17789.57点。整体市场都表现相当低迷&#xff0c;但17750附近有一定支撑。截至收盘&#xff0c;恒指收跌0.00%。 港股持续在万八关徘徊&#xff0c;国资委旗下国新…