【性能】【算法】for循环,性能提高
目录
■提高性能的方法
・原理
1.1.java处理中,计算阶乘,为什么展开循环可以提高效率
1.2.从cpu的流水线角度,再说明一下
1.3.介绍一下 cup的指令流水线
■实际运用
1.求和
代码
结果
2.求阶乘 (性能提高效果明显)
代码
结果
测试电脑性能
自己电脑
堆内存并非越大,效率越高!!!!!!
电脑001
电脑002(虚拟机,公用一个cup)
媳妇的电脑
堆内存并非越大,效率越高!!!!!!!
爸爸的电脑
====
■提高性能的方法
通过展开循环,提高效率。
(算法,CPU原理)
・原理
1.1.java处理中,计算阶乘,为什么展开循环可以提高效率
展开循环可以提高效率的原因是避免了重复的循环操作。在计算阶乘的过程中,我们需要对一个数从1乘到该数本身,如果使用循环来实现这个操作,就需要每次都进行一次循环迭代,直到达到该数。而展开循环的方式,可以直接将每一次循环的结果串联起来,避免了重复的循环操作。
---
举个例子,假设要计算5的阶乘。使用循环的方式,需要进行5次循环迭代,分别计算1x2、2x3、3x4、4x5,最后得到120。而展开循环的方式,可以直接计算1x2x3x4x5,得到结果120,避免了重复的循环操作。
--
因此,展开循环可以减少循环迭代次数,提高运算效率。但需要注意的是,展开循环在处理大数阶乘时可能会造成溢出问题,需要进行适当的优化处理。
1.2.从cpu的流水线角度,再说明一下
https://rcwap.com/newsdetail_630.html
从CPU流水线的角度来看,展开循环可以提高效率的原因是减少了分支(branch)导致的流水线停顿(pipeline stall)。
----
在计算阶乘的过程中,循环结构通常会引入条件分支,用于判断循环是否继续。当分支预测(branch prediction)失败时,CPU的流水线会发生停顿,等待分支判断结果返回。这会导致流水线中断,浪费了一些CPU周期。
----
而如果采用展开循环的方式,即在代码中展开多个循环迭代,相当于将多个循环迭代的结果直接写入代码中。这样就避免了循环和条件分支的存在,减少了分支预测失败的机会,减少了流水线停顿。
---
通过减少流水线停顿,CPU可以更充分地利用流水线的并行性和吞吐量,提高指令的执行效率,加快计算阶乘的速度。
---
但是需要注意,展开循环也会增加代码量,可能会导致代码膨胀和缓存不命中等问题,因此在选择是否展开循环时需要综合考虑代码大小、缓存使用情况以及具体的计算规模来做出决策。
1.3.介绍一下 cup的指令流水线
CUP(Control Unit Pipeline)是计算机的一种指令流水线执行方式。它将计算机的指令执行过程分为多个阶段,并且每个阶段由一个专门的硬件单元来处理。这种流水线执行方式可以提高计算机的效率和性能。
CUP的指令流水线一般包括以下几个阶段:
取指令阶段(Instruction Fetch):从指令存储器中读取下一条指令,并将其送入指令译码器。
指令译码阶段(Instruction Decode):将指令译码为包含操作码和操作数的控制信号。
执行阶段(Execution):根据控制信号执行指令中的操作,并产生需要的结果。
访存阶段(Memory Access):如果指令需要访问内存,则进行内存读取或写入操作。
写回阶段(Write Back):将执行结果写回到寄存器文件或存储器中。
CUP的指令流水线可以并行地执行多条指令,从而实现指令的重叠执行。当一条指令在某个阶段执行时,下一条指令可以开始在前一个阶段进行处理。这样可以大大缩短指令的执行时间,提高计算机的吞吐量。
然而,CUP的指令流水线也存在一些问题。例如,由于指令之间可能存在数据依赖关系,需要进行冒险(Hazard)处理;还可能存在控制依赖问题,需要进行分支预测等。因此,在设计CUP指令流水线时,需要考虑这些问题,并采取相应的策略来解决。
xxx
https://rcwap.com/newsdetail_630.html

=======
■实际运用
1.求和
代码
package com.sxz.study.alogrithm;public class TestAlogrithom {public static void main(String[] args) {long timeBegin = 0;long timeEnd =0;timeBegin = System.currentTimeMillis();long result1 = calc001(1000000000);System.out.println(result1);timeEnd = System.currentTimeMillis();System.out.println(timeEnd-timeBegin);timeBegin = System.currentTimeMillis();long result2 = calc002(1000000000);System.out.println(result2);timeEnd = System.currentTimeMillis();System.out.println(timeEnd-timeBegin);}public static long calc001(int sumNumber) {long count = 0;for (int i = 1; i <= sumNumber; i++) {count += i;}return count;}public static long calc002(int sumNumber) {long count1 = 0, count2 = 0, count3 = 0, count4 = 0;// 假设,sumNuber 是4的倍数for (int i = 1; i <= sumNumber; i+=4) {count1 += i;count2 += i+1;count3 += i+2;count4 += i+3;}return count1 + count2 + count3 + count4;}}
结果
性能提高 了近14% (299 ⇒ 258)
(299-258)/ 299 = 13.71%
299 / 258 =1.1589
改善后,速度是之前的1.16倍
500000000500000000
299
500000000500000000
258
----------------------
2.求阶乘 (性能提高效果明显)
代码
package com.sxz.study.alogrithm;import java.math.BigDecimal;public class TestAlogrithom2 {public static void main(String[] args) {long timeBegin = 0;long timeEnd =0;timeBegin = System.currentTimeMillis();BigDecimal result1 = calc001(10000);System.out.println(result1);timeEnd = System.currentTimeMillis();System.out.println((timeEnd-timeBegin)+"ms");timeBegin = System.currentTimeMillis();BigDecimal result2 = calc002(10000);System.out.println(result2);timeEnd = System.currentTimeMillis();System.out.println((timeEnd-timeBegin)+"ms");}public static BigDecimal calc001(int sumNumber) {BigDecimal count = new BigDecimal(1);for (int i = 1; i <= sumNumber; i++) {count = count.multiply(new BigDecimal(i));}return count;}public static BigDecimal calc002(int sumNumber) {BigDecimal count1 = new BigDecimal(1);BigDecimal count2 = new BigDecimal(1);BigDecimal count3 = new BigDecimal(1);BigDecimal count4 = new BigDecimal(1);// 假设,sumNuber 是4的倍数for (int i = 1; i <= sumNumber; i+=4) {count1 = count1.multiply(new BigDecimal(i));count2 = count2.multiply(new BigDecimal(i+1));count3 = count3.multiply(new BigDecimal(i+2));count4 = count4.multiply(new BigDecimal(i+3));}return count1.multiply(count2).multiply(count3).multiply(count4);}}
结果
性格提高了近69%% (92 ⇒ 29)
(92-29)/ 2 = 68.47
92/29 = 3.17
改善后,速度是之前的三倍。
2846..........0000
92
2846..........0000
29
===
测试电脑性能
自己电脑
小米 笔记本 Pro 点击excel 文件夹 未响应 卡死 如何解决_小米笔记本文件夹未响应-CSDN博客

==

命令行执行
堆内存并非越大,效率越高!!!!!!

==
电脑001

电脑002(虚拟机,公用一个cup)
70~110,30~60
媳妇的电脑
chcp 65001
javac -encoding UTF-8 -d . TestAlogrithom2.java
java com.sxz.study.alogrithm.TestAlogrithom2 | findstr "ms"
java -Xms2g com.sxz.study.alogrithm.TestAlogrithom2 | findstr "ms"

堆内存并非越大,效率越高!!!!!!!
指定堆内存 2g(-xms2g)
78,31
指定堆内存 256m(-xms256m)
78,16
不指定堆内存
79,15
====
爸爸的电脑
xx
==
相关文章:
【性能】【算法】for循环,性能提高
目录 ■提高性能的方法 ・原理 1.1.java处理中,计算阶乘,为什么展开循环可以提高效率 1.2.从cpu的流水线角度,再说明一下 1.3.介绍一下 cup的指令流水线 ■实际运用 1.求和 代码 结果 2.求阶乘 (性能提高效果明显&…...
【入门】字符串对比(UPC)
题目描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到100之间),它们之间的关系是以下4种情况之一: 1:两个字符串长度不等。比如 Beijing 和 Hebei 2:两个字符串不仅长度相等,而且相应位置上的字符完…...
thinkphp美容SPA管理系统源码带文字安装教程
thinkphp美容SPA管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 基于thinkphp3.23B-JUI1.2开发,权限运用了Auth类认证,权限可以细分到每个功能, 增删改查功能一应俱全,整合了…...
apache共享目录文件配置
httpd配置文件路径 /etc/httpd/conf/httpd.conf 配置单个节点 httpd中原本有一个配置 <Directory "/var/www">AllowOverride None# Allow open access:Require all granted </Directory># Further relax access to the default document root: <D…...
kotlin take 和 drop
kotlin take的作用 从头开始获取指定数量的元素 val numbers listOf("one", "two", "three", "four", "five", "six") // 取集合的4个集合 Log.d("take", numbers.take(3).toString()) // 打印结果[…...
SQL-DML增删改
🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…...
雷达信号处理——恒虚警检测(CFAR)
雷达信号处理的流程 雷达信号处理的一般流程:ADC数据——1D-FFT——2D-FFT——CFAR检测——测距、测速、测角。 雷达目标检测 首先要搞清楚什么是检测,检测就是判断有无。雷达在探测的时候,会出现很多峰值,这些峰值有可能是目标…...
k8s的yaml文件中的kind类型都有哪些?(详述版Part1/2)
目录 综述 分块详述 1、Pod 2、Deployment 3、Service 4、DaemonSet 5、ReplicaSet 6、ServiceAccount 7、PodDisruptionBudget 8、PersistentVolumeClaim 9、PersistentVolume 10、Job 11、CronJob 12、StatefulSet 综述 通过yaml文件中的kind可以大致了解kube…...
企业培训系统源码:构建智能、可扩展的学习平台
企业培训系统在现代企业中扮演着至关重要的角色。本文将通过深度解析企业培训系统的源码,介绍如何构建一个智能、可扩展的学习平台,涉及关键技术和代码实例。 1. 技术栈选择与项目初始化 在构建企业培训系统之前,选择适当的技术栈是至关重…...
设计模式—行为型模式之状态模式
设计模式—行为型模式之状态模式 状态(State)模式:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式包含以下主要角色: 环境类&am…...
Linux习题3
解析: grep:查找文件内的内容 gzip:压缩文件,文件经压缩后会增加 gz:扩展名 find:在指定目录下查找文件 解析: A hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,以…...
SpringBoot+策略模式实现多种文件存储模式
一、策略模式 背景 针对某种业务可能存在多种实现方式;传统方式是通过传统if…else…或者switch代码判断; 弊端: 代码可读性差扩展性差难以维护 策略模式简介 策略模式是一种行为型模式,它将对象和行为分开,将行…...
细说DMD芯片信号-DLP3
1, Block diagram 2. 信号介绍 2.1, LS interface: LD_Data_P/N(i), LD_CLK_P/N(i), LS_RDATA_A_BIST(O) 2.2, 视频信号: HSSI(High speed serial interface) High speed Differential Data pair lan A0~7 P/N, High speed Differential Clock A High…...
MySQL从0到1全教程【1】MySQL数据库的基本概念以及MySQL8.0版本的部署
1 MySQL数据库的相关概念 1.1 数据库中的专业术语 1.1.1 数据库 (DB) 数据库是指:保存有组织的数据的容器(通常是一个文数据库 (database)件或一组文件)。 1.1.2 数据库管理系统 (DBMS) 数据库管理系统(DBMS)又称为数据库软件(产品),用于管理DB中的数据 注意:…...
grep常用命令
1. grep常用参数 -i忽略大小写-w精准匹配整词-v结果取反(匹配指定的字符串以外的内容)-A关键字所在行的后几行也一起显示-B关键字所在行的前几行也一起显示-C关键字所在行的前后几行行一起显示 2. 常用命令 2.1 从文件中查找关键词 # 精准匹配 grep linux test.txt# 从多个…...
Spring Data JPA 使用总结
本文记录了Spring data JPA 的一些细碎的规则。 findBy语法规则 :findOOXXByName 实际上等价 > findByName 比如: User findFirstByOrderByLastnameAsc();User findTopByOrderByAgeDesc();Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);…...
融云 CEO 董晗荣获 51CTO 「2023 年度科技影响力人物奖」
(👆点击获取《社交泛娱乐出海作战地图》) 1 月 5 日,由知名 IT 技术媒体 51CTO 主办的第十八届“中国企业年终评选”正式揭晓榜单,融云 CEO 董晗荣获“2023 年度科技影响力人物奖”。关注【融云全球互联网通信云】了解…...
数据洞察力,驱动企业财务变革
我们不得不面对一个现实,就是数据量的剧增。加上大部分企业并不愿意删除历史数据,以防未来预测分析时需要,这造成数据就像一个雪球,越滚越大。然而,过多的数据和数据不足一样会成为企业发展和理解分析的障碍。从海量数…...
Postgresql常见(花式)操作完全示例
案例说明 将Excel数据导入Postgresql,并实现常见统计(数据示例如下) 导入Excel数据到数据库 使用Navicat工具连接数据库,使用导入功能可直接导入,此处不做过多介绍,详细操作请看下图: 点击“下…...
【Docker】数据管理
🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 前言 一.数据卷 示例演示 示例剖析…...
从零到一:DzzOffice开源协同办公平台实战部署与深度应用指南
从零到一:DzzOffice开源协同办公平台实战部署与深度应用指南 【免费下载链接】dzzoffice dzzoffice 项目地址: https://gitcode.com/gh_mirrors/dz/dzzoffice 你是否正在为团队协作效率低下而烦恼?是否在寻找一款能够替代Google Workspace或Offic…...
解锁iOS设备:applera1n工具的安全绕过指南
解锁iOS设备:applera1n工具的安全绕过指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n applera1n是一款开源工具,专门为A9-A11芯片的iOS 15.0-16.6.1设备提供激活锁绕过方案…...
10. 免费GPU资源汇总(二):AutoDL、阿里云免费算力申请与使用
001、系列引言:为什么你需要关注AutoDL与阿里云免费算力? 深夜两点,示波器的波形还在跳,我盯着屏幕里那个诡异的时序毛刺,突然意识到一件事——手头这块老旧的开发板已经跑不动更复杂的模型验证了。同事上周训练一个轻量级YOLO,在自己的笔记本上跑了整整两天,结果因为散…...
实践之漏洞挖掘(弱口令)
前言:经过我的不懈努力,也是挖到了弱口令,嘻嘻,学校的,虽然没有泄露什么隐私,但是我交了要更新就是学校的漏洞,过不过都没关系,没过我下次就找有隐私的后台再交嘻嘻正题:…...
小米平板5变身Windows工作站:开源驱动如何重塑移动生产力边界?
小米平板5变身Windows工作站:开源驱动如何重塑移动生产力边界? 【免费下载链接】MiPad5-Drivers https://github.com/Project-Aloha/windows_oem_xiaomi_nabu 项目地址: https://gitcode.com/gh_mirrors/mi/MiPad5-Drivers 当一款Android平板遇上…...
探索法律AI深度应用:在快马平台集成多模型驱动openlaw智能法律问答助手
最近在做一个法律AI相关的项目,发现用AI辅助开发法律问答系统真的能大幅提升效率。这里分享一下我在InsCode(快马)平台上搭建智能法律问答原型的经验,整个过程特别适合想尝试法律科技的朋友。 项目背景与需求分析 法律咨询场景中,用户的问题往…...
NeuroKit2:Python神经生理信号处理的全流程解决方案
NeuroKit2:Python神经生理信号处理的全流程解决方案 【免费下载链接】NeuroKit NeuroKit2: The Python Toolbox for Neurophysiological Signal Processing 项目地址: https://gitcode.com/gh_mirrors/ne/NeuroKit 神经生理信号处理是连接生理数据与临床洞察…...
Windows苹果触控板驱动完全指南:5分钟实现原生级触控体验
Windows苹果触控板驱动完全指南:5分钟实现原生级触控体验 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad…...
星思半导体系统级通信测试实验室设备齐全,为卫星通信芯片验证提供坚实保障
随着政府工作报告首次为卫星互联网“定调”,资本市场的聚光灯迅速转向这条黄金赛道。业内观察指出,2026年的市场关注点更加务实,聚焦于真正具备核心技术、能参与国际竞争的上游“硬科技”企业。在政策与资本的同频共振下,以星思半…...
用快马平台十分钟复刻lostlife:快速构建你的首个交互式游戏原型
最近想尝试做个简单的交互式游戏原型,正好看到InsCode(快马)平台可以快速生成项目代码,就试了试复刻类似lostlife的玩法。整个过程比想象中顺利,分享下我的实现思路: 确定核心交互逻辑 游戏的核心是点击角色触发反馈,所…...
