C# 不一样的洗牌算法---Simd指令
洗牌算法,以随机打乱数组中元素的位置
测试数据创建
int[] _data;
Random rng = new Random();
protected override void CreateData()
{_data = new int[_size];for (int i = 0; i < _data.Length; i++){_data[i] = i;}
}
普通打乱数组元素位置
protected override void OrdinaryMethod(){int n = (int)_size;while (n-- > 1){int k = rng.Next(n + 1);int value = _data[k];_data[k] = _data[n];_data[n] = value;}}
simd打乱
readonly int[] mask = { 30, 39, 45, 54, 57, 75, 78, 99, 108, 114, 120, 135, 141, 147, 156, 177, 180, 198, 201, 210, 216, 225, 228 };
protected override void SimdMethod()
{int n = (int)_size;int vsize = Vector128<int>.Count;int m = n - (n & (vsize - 1));fixed (int* ptr = _data, maskPtr = mask){int j = 0;int i = 0;for (j = 0; j < m; j += vsize){Vector128<int> v = *(Vector128<int>*)(ptr + j);// 打乱var t = Sse2.Shuffle(v, (byte)*(maskPtr + rng.Next(mask.Length)));// 拷贝Sse2.Store(ptr + j, t);j += vsize;}for (; j < n; j++){int* t = ptr + rng.Next(n);int* val = ptr + j;*val = (*t ^= *val ^= *t) ^ *val;}}
}
指令说明

Shuffle指令:用于根据提供的控制值(control)重新排列 Vector128<int> 类型向量中的元素。(比如洗牌算法打乱数组中元素的位置)。
Store指令:将向量的数据存储到内存地址。
补充,上面Simd打乱数组位置为局部打乱,下面是全局打乱
protected void SimdMethod2(){int n = (int)_size;int vsize = Vector128<int>.Count;int m = n - (n & (vsize - 1));Vector128<int>[] vectors = new Vector128<int>[m / vsize];fixed (int* ptr = _data, maskPtr = mask){fixed (Vector128<int>* vptr = vectors){int j = 0;int i = 0;for (j = 0; j < m; j += vsize){*(vptr + i++) = *(Vector128<int>*)(ptr + j);}j = 0;for (i = 0; i < vectors.Length; i++){Sse2.Store(ptr + j, Sse2.Shuffle(*(vptr + i), (byte)*(maskPtr + rng.Next(mask.Length))));j += vsize;}for (; j < n; j++){int* t = ptr + rng.Next(n);int* val = ptr + j;int temp = *t;*t = *val;*val = temp;}}}}
相关文章:
C# 不一样的洗牌算法---Simd指令
洗牌算法,以随机打乱数组中元素的位置 测试数据创建 int[] _data; Random rng new Random(); protected override void CreateData() {_data new int[_size];for (int i 0; i < _data.Length; i){_data[i] i;} } 普通打乱数组元素位置 protected overrid…...
LVGL系列3--纯物理(外部)按键,数字键盘控制控件
LVGL系列 一、LVGL移植 LVGL系列1–AT32移植LVGL_V8具体步骤 LVGL系列2–linux lvglv8 vscode 移植 LVGL系列3–纯物理(外部)按键,数字键盘控制控件 文章目录 LVGL系列一、LVGL移植 一、背景方式一:自定义事件发送与处理函数方式二:利用l…...
FPGA开发——UART回环实现之接收模块的设计
一、简介 因为我们本次进行串口回环的实验的对象是FPGA开发板和PC端,所以在接收和发送模块中先编写接收模块,这样可以在后面更好的进行发送模块的验证。(其实这里先编写哪个模块)都不影响,这里看自己心情,反…...
Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案
Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案 一、背景二、查看CDC表情况三、 排查数据库是否开启代理四、排查表是否开启CDC五、下游承压情况六、解决方案一、背景 Connector状态正常,但几十台SQLServer数据库…...
Linux线程基础学习记录
0.线程特点 (1).线程共享资源:一个进程下的多个线程共享以下资源 可执行的指令 静态数据 进程中打开的文件描述符 当前工作目录 用户ID 用户组ID (2).线程私有资源: 线程ID PC(程序计数器)和相…...
【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示
功能和 QTabWidget 类似,它也有助于高效利用窗口的客户区域。 QStackedWidget 提供了一个窗口堆栈,每次只能查看一个窗口。它是建立在 QStackedLayout 之上的一个有用的布局。 样式如下: 右键可以变型为QTabWidget...
Mybatis中好用的元对象反射工具类 - MetaObject
一、前言 在获取map对象或者是其他深层嵌套对象,如果你的做法是挨个取出判空然后继续再向下查找,那么可以看看本文的方案,它或许能让你打开新的思路。 作为一名java开发人员,Mybatis几乎是我们无法避开的ORM框架,如果你…...
javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域
文章目录 1. 前置知识2. 原理和解决方案总结2.1. 跨域不通过原理流程图2.2. 实现原理:添加以下http响应头2.3. 四种跨域实现方式及优先级(从高到低) 3. 具体实现代码3.1. 跨域全局配置方式-Filter(全适用)3.2. 跨域全局配置方式-SpringMvc3.3…...
深入理解JavaScript性能优化:从基础到高级
引言 在当今快速发展的Web世界中,性能已经成为衡量应用质量的关键指标。随着Web应用复杂度的不断提升,JavaScript作为前端开发的核心语言,其性能优化变得尤为重要。本文旨在全面深入地探讨JavaScript性能优化的各个方面,从基础概念到高级技巧,帮助开发者构建高效、流畅的Web应用…...
java+springboot实现定时任务
由于是初级程序员,基于注解的形式实现了一个简单的定时任务; 1. 使用Scheduled注解 Spring的Scheduled注解是一种非常简单和便捷的实现定时任务的方式。通过在方法上添加Scheduled注解,我们可以指定方法在特定的时间间隔或固定的时间点执行…...
1.3 数据库的发展历史与演变
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...
The field file exceeds its maximum permitted size of 1048576 bytes
场景: 再系统后台上传解析对账文件时大小超过1M就会报错 分析: 排查错误时了解MultipartFile默认上传大小就是1M,但是发现项目配置文件配置了上传大小100M,但是这个大小没有生效 因为项目启动并没有使用到这个配置大小并把他应用到file配置里面,经过测试发现只需要增加配置…...
【Es】python es操作
表 因为es是集群所以es_hosts是列表 from elasticsearch import Elasticsearch ES_HOSTS ["127.0.0.1:9200"] ES_HTTP_AUTH "******************"# 连接Es es Elasticsearch(hostsES_HOSTS ,http_authES_HTTP_AUTH ,maxsize60,timeout30,max_retries3…...
吃透前端文件上传与文件相关操作 多文件上传 大文件切片上传 拖拽上传 后续还会更新 断点续传等等
最近在学文件上传的操作,所以想把学习到东西写成一文章 这片文章是我以小白视角 慢慢学习并熟悉前端文件相关操作的流程总结出来的 前端文件上传 我首先想到是 <input type"file">**选择文件**</input>如果我们想限制上传文件的格式,大小或进行裁剪分片…...
用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)
用python制作88键赛博钢琴 前言 恭喜这位博主终于想起了自己的账号密码! 时光荏苒,转眼间已逾一年未曾在此留下墨香。尽管这一年间,博主投身于无尽的忙碌与挑战之中,但令人欣慰的是,那份初心与热情似乎并未因岁月的流…...
zdpgo_gin_login 框架20240815更新,增加注册路由的功能,一个方法自动拥有注册和登录两个API接口
zdpgo_gin_login 适配gin框架的登录注册功能组件,通过本框架轻松拥有登录注册相关的API接口 特性: 自动生成注册接口,具备密码加密的功能自动生成登录接口,具备JWT Token生成的功能 安装 go get github.com/zhangdapeng520/z…...
搭配Intel第13代酷睿处理器
高性能内存硬盘这么买 intel第13代酷睿已经于2022年10月底正式上市。相比于第12代酷睿性能大涨,内置20条PCle通道(16条PCle 5.0和4条PCle 4.0)、可最多支持128GB DDR5 5600/DDR4 3200双通道内存,搭配Z790系列主板组建高端性能平台,满足未来设计、游戏、专业应用等需求。如…...
uniapp快速回顾,新学websocket连接和BLE连接
Uni APP的学习 官方文档 uni-app官网 (dcloud.net.cn) 任何的博客都不如官方文档 一、快速复习 文件结构 main.js 功能:项目的入口文件,初始化 Vue 实例。 App.vue功能:根组件,包含应用的基本结构和全局样式。 manifest.js…...
激光测距传感器
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、产品原理:二、产品介绍:三、应用特点四、应用案例:1.冶金钢铁板卷材开卷工…...
从数据分析到智能生产:AI在工业中的应用与未来
导语 | 人工智能技术的迅猛发展,正在引领第四次工业革命悄然而至。尽管 AI 技术在工业领域的部署仍有诸多难题亟待解决,但这并不能阻挡历史趋势的车轮滚滚向前,AI 正在为工业领域带来新的变革。今天,我们特邀了上海腾展长融董事 &…...
创新型音乐收藏管理:用Listen1构建个人音乐生态的完整指南
创新型音乐收藏管理:用Listen1构建个人音乐生态的完整指南 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_extension …...
从手势识别到创意应用:用Python+MediaPipe打造你的第一个手势控制程序(附完整源码)
手势交互革命:用PythonMediaPipe构建智能控制系统的5种实战方案 当你的手指在空气中划动就能操控幻灯片翻页、调节音量甚至指挥游戏角色时,这种未来感十足的交互方式已经可以通过Python轻松实现。MediaPipe提供的21个手部关键点就像一组精密的传感器&…...
别再拍脑袋定A/B测试样本量了!用Python/Excel/R三分钟算出靠谱结果
别再拍脑袋定A/B测试样本量了!用Python/Excel/R三分钟算出靠谱结果 每次启动A/B测试前,团队总会陷入同样的争论:"这次实验需要多少流量才够?"产品经理凭经验说"10万用户应该够了",运营同学翻出上次…...
如何解决Bitcoin Core中createwallet命令仅支持legacy wallets的问题(code -4)
1. 遇到"Only legacy wallets are supported"错误怎么办? 最近在帮朋友调试比特币全节点时,遇到了一个典型问题:当尝试用createwallet命令创建新钱包时,控制台突然报错"Only legacy wallets are supported by this…...
Linux 系统调用实现原理
Linux 系统调用实现原理 系统调用的重要性 作为科技创业者,我深刻理解系统调用在操作系统中的核心地位。系统调用是用户空间与内核空间交互的桥梁,是应用程序访问操作系统服务的唯一途径。深入理解系统调用的实现原理,对于系统性能优化和安全…...
SEO_网站SEO诊断与性能优化的关键步骤
<h3 id"seo">网站SEO诊断与性能优化的关键步骤</h3> <p>在当今竞争激烈的互联网环境中,一个成功的网站不仅需要精美的设计,还需要优化的搜索引擎优化(SEO)和高效的性能。SEO和性能优化不仅能够提高网…...
Python3.8环境管理:用Miniconda轻松创建多个项目环境
Python3.8环境管理:用Miniconda轻松创建多个项目环境 1. 为什么需要Python环境管理 在日常开发中,我们经常会遇到这样的问题:项目A需要Python3.6和TensorFlow1.15,而项目B需要Python3.8和TensorFlow2.4。如果直接在系统上安装这…...
在普通PC上运行macOS的完整教程:OneClick macOS Simple KVM深度解析
在普通PC上运行macOS的完整教程:OneClick macOS Simple KVM深度解析 【免费下载链接】OneClick-macOS-Simple-KVM Tools to set up a easy, quick macOS VM in QEMU, accelerated by KVM. Works on Linux AND Windows. 项目地址: https://gitcode.com/gh_mirrors/…...
HUST计组实验通关秘籍:手把手教你搞定单总线CPU的定长指令周期与三级时序
HUST计组实验通关秘籍:单总线CPU定长指令周期与三级时序全解析 实验前的认知准备 第一次接触单总线CPU设计实验的同学,往往会被"定长指令周期"和"三级时序"这些专业术语吓到。其实换个角度想,这就像搭积木——只不过我们…...
这是什么编码 - writeup by AI
这是什么编码 - writeup by AI 📋 题目信息项目内容题目名称这是什么编码来源平台BUGKU CTF题目类型Crypto (密码学)核心考点Base 家族编码识别、多层嵌套解码涉及编码Hex、Base32、Base64 🎯 题目描述 给定的密文文件 encode.txt 中包含一串经过多重编码…...
