csapp archlab PartC满分解答

任务

修改ncopy.ys和pipe-full.hcl以尽可能的提高ncopy.ys的运行速度

思路

pipe-full.hcl

  1. 实现iaddq指令(家庭作业4.54)
  2. 实现加载转发(家庭作业4.57)

ncopy.ys

  1. 使用循环展开(第5.8节),由于代码长度限制,最终使用十路循环展开
  2. 使用区间判断处理循环展开之后的余数,并利用技巧减少跳转指令
  3. 利用总是选择分支策略的特性控制分支优先级,决定优先级的有两个因素:一是区间越大(发生的概率越大)的分支优先级越大;二是余数越小优先级越大,因为每个长度的成绩是CPE(cycles per element),而综合成绩又是每个长度成绩的平均值
  4. 寄存器默认为零,因此删除xorq %rax, %rax指令不会造成错误

由于采用了十路循环展开,因此余数为[0, 9],由于跳转指令可以为jl,je,jg,因此区间判断的搜索树为一个三叉搜索树,选择3和7进行判断是综合考虑统计因素和余数优先级的结果

未命名文件-1

代码

##################################################################
# You can modify this portion# Loop header# ten-way loop unrollingiaddq $-10, %rdx        # len - 10 < 0?jl L0R9
Loop1:mrmovq (%rdi), %r8      # val = *srcrmmovq %r8, (%rsi)      # *dst = valandq %r8, %r8           # val <= 0?jle Loop2               # if so, goto Loop2iaddq $1, %rax          # count++
Loop2:mrmovq 0x8(%rdi), %r8rmmovq %r8, 0x8(%rsi)andq %r8, %r8jle Loop3iaddq $1, %rax
Loop3:mrmovq 0x10(%rdi), %r8rmmovq %r8, 0x10(%rsi)andq %r8, %r8jle Loop4iaddq $1, %rax
Loop4:mrmovq 0x18(%rdi), %r8rmmovq %r8, 0x18(%rsi)andq %r8, %r8jle Loop5iaddq $1, %rax
Loop5:mrmovq 0x20(%rdi), %r8rmmovq %r8, 0x20(%rsi)andq %r8, %r8jle Loop6iaddq $1, %rax
Loop6:mrmovq 0x28(%rdi), %r8rmmovq %r8, 0x28(%rsi)andq %r8, %r8jle Loop7iaddq $1, %rax
Loop7:mrmovq 0x30(%rdi), %r8rmmovq %r8, 0x30(%rsi)andq %r8, %r8jle Loop8iaddq $1, %rax
Loop8:mrmovq 0x38(%rdi), %r8rmmovq %r8, 0x38(%rsi)andq %r8, %r8jle Loop9iaddq $1, %rax
Loop9:mrmovq 0x40(%rdi), %r8rmmovq %r8, 0x40(%rsi)andq %r8, %r8jle Loop10iaddq $1, %rax
Loop10:mrmovq 0x48(%rdi), %r8rmmovq %r8, 0x48(%rsi)andq %r8, %r8jle Stepiaddq $1, %rax
Step:iaddq $0x50, %rdiiaddq $0x50, %rsiiaddq $-10, %rdxjge Loop1# applying range checks to remainders
L0R9:iaddq   $7,%rdx         # Test 3 (len + 10 - 3)jl      L0R2            # len < 3jg      L4R9            # len > 3je      Rem3            # len == 3
L0R2:iaddq   $2,%rdx         # Test 1 (len + 3 - 1)je      Rem1            # len == 1jg      Rem2            # len == 2ret                     # len == 0
L4R6:iaddq   $2,%rdx         # Test 5 (len + 7 - 5)jl      Rem4            # len == 4je      Rem5            # len == 5jmp     Rem6            # len == 6
L4R9:iaddq   $-4,%rdx        # Test 7 (len + 3 - 7)jl      L4R6            # len < 7je      Rem7            # len == 7
L8R9:iaddq   $-1,%rdx        # Test 8 (len + 7 - 8)je      Rem8            # len == 8# dealing with remainders
Rem9:mrmovq 0x40(%rdi), %r8rmmovq %r8, 0x40(%rsi)andq %r8, %r8jle Rem8iaddq $1, %rax
Rem8:mrmovq 0x38(%rdi), %r8rmmovq %r8, 0x38(%rsi)andq %r8, %r8jle Rem7iaddq $1, %rax
Rem7:mrmovq 0x30(%rdi), %r8rmmovq %r8, 0x30(%rsi)andq %r8, %r8jle Rem6iaddq $1, %rax
Rem6:mrmovq 0x28(%rdi), %r8rmmovq %r8, 0x28(%rsi)andq %r8, %r8jle Rem5iaddq $1, %rax
Rem5:mrmovq 0x20(%rdi), %r8rmmovq %r8, 0x20(%rsi)andq %r8, %r8jle Rem4iaddq $1, %rax
Rem4:mrmovq 0x18(%rdi), %r8rmmovq %r8, 0x18(%rsi)andq %r8, %r8jle Rem3iaddq $1, %rax
Rem3:mrmovq 0x10(%rdi), %r8rmmovq %r8, 0x10(%rsi)andq %r8, %r8jle Rem2iaddq $1, %rax
Rem2:mrmovq 0x8(%rdi), %r8rmmovq %r8, 0x8(%rsi)andq %r8, %r8jle Rem1iaddq $1, %rax
Rem1:mrmovq (%rdi), %r8rmmovq %r8, (%rsi)andq %r8, %r8jle Doneiaddq $1, %rax##################################################################
# Do not modify the following section of code
# Function epilogue.
Done:ret
##################################################################
# Keep the following label at the end of your function
End:
#/* $end ncopy-ys */

实验成绩

未命名文件-2未命名文件-3

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

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

相关文章

openai多模态大模型:clip详解及使用

引言 CLIP全称Constrastive Language-Image Pre-training&#xff0c;是OpenAI推出的采用对比学习的文本-图像预训练模型。CLIP惊艳之处在于架构非常简洁且效果好到难以置信&#xff0c;在zero-shot文本-图像检索&#xff0c;zero-shot图像分类&#xff0c;文本→图像生成任务…

windows服务器下java程序健康检测及假死崩溃后自动重启应用、开机自动启动

前两天由于项目需要&#xff0c;一个windows上的批处理任务&#xff08;kitchen.bat&#xff09;&#xff0c;需要接到mq的消息通知后执行&#xff0c;为了快速实现这里我们通过springboot写了一个jar程序&#xff0c;用于接收mq的消息&#xff0c;并调用bat文件。 本程序需要实…

缺少或找不到vcruntime140_1.dll的解决方法

某天&#xff0c;当我准备打开电脑上的一个应用程序时&#xff0c;突然收到一个错误提示&#xff0c;显示缺少了vcruntime140_1.dll文件。这个文件是一个重要的系统组件&#xff0c;它的丢失导致了我无法正常运行该应用程序。于是&#xff0c;我开始了一场寻找和修复旅程。然而…

总线超时导致的bus hang 相关问题介绍

1、前提背景&#xff1a; 在一些嵌入式机器的系统运行过程中&#xff0c;时常会发生一些bus hang的问题&#xff0c;直接导致的后果是系统卡住或者触发重启&#xff0c;最终整体系统运行异常。 2、什么是bus hang&#xff1a; 简单说&#xff0c;就是系统的某个模块已经停止…

【Python】Python文件转为可执行文件

将py文件打包成可执行文件 安装pyinstaller pip install pyinstaller打包执行文件 pyinstaller -F F:\AutomationTest\perf_tools.py --onefile 将所有依赖项合并为单个可执行文件&#xff0c;而不是多个文件打包成功后&#xff0c;当前目录生成一个dist文件夹 生成的可执行…

这是我的纪念日

我的1460天 写这篇文章&#xff0c;是为了纪念自己这一千多个日日夜夜&#xff0c;我的热爱总算有了回报。 每次看到有小伙伴点赞&#xff0c;评论的时候&#xff0c;我都很开心&#xff0c;我知道自己的选择是正确的&#xff0c;我喜欢分享自己的所见所学&#xff0c;我也很…

python3.7 安装pywin32报错,完美解决方法

本机环境 python&#xff1a;3.7 遇到2种报错 第一种 ImportError: DLL load failed: The specified module could not be found.第二种&#xff1a; import win32gui ModuleNotFoundError: No module named ‘win32gui‘解决方法 我安装pywin32时候&#xff0c;是直接pi…

什么是反射机制?为什么反射慢?

目录 面试回答 知识扩展 反射常见的使用方式 反射和 Class 的关系 面试回答 反射指的是程序在运行时能够获取自身的信息。在 java 中&#xff0c;只要给定类的名字&#xff0c;那么就可以通过反射机制来获得类的所有属性和方法。 Java 的反射可以&#xff1a; 在运行时判断…

stm32红绿灯源代码示例(附带Proteus电路图)

本代码不能直接用于红路灯&#xff0c;只是提供一个思路 #include "main.h" #include "gpio.h" void SystemClock_Config(void); void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOB_CLK_ENAB…

Jenkins-CICD-python/Java包升级与回退

Jenkins- CICD流水线 python/Java代码升级与回退 1、执行思路 1.1、代码升级 jenkins上点击 upgrade和 代码版本号 --${tag} jenkins 推送 代码 和 执行脚本 到目标服务器/opt目录下 执行命令 sh run.sh 代码名称 版本号 upgrade 版本号 来自jenkins的 构建参数中的 标签…

Gitlab-第四天-CD到k8s集群的坑

一、.gitlab-ci.yml #CD到k8s集群的 stages: - deploy-test build-image-deploy-test: stage: deploy-test image: bitnami/kubectl:latest # 使用一个包含 kubectl 工具的镜像 tags: - k8s script: - ls -al - kubectl apply -f deployment.yaml # 根据实际情况替换…

LlamaGPT -基于Llama 2的自托管类chatgpt聊天机器人

LlamaGPT一个自托管、离线、类似 ChatGPT 的聊天机器人&#xff0c;由 Llama 2 提供支持。100% 私密&#xff0c;不会有任何数据离开你的设备。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 1、如何安装LlamaGPT LlamaGPT可以安装在任何x86或arm64系统上。 首先确保…

PHP8的字符串操作3-PHP8知识详解

今天继续分享字符串的操作&#xff0c;前面说到了字符串的去除空格和特殊字符&#xff0c;获取字符串的长度&#xff0c;截取字符串、检索字符串。 今天继续分享字符串的其他操作。如&#xff1a;替换字符串、分割和合成字符串。 5、替换字符串 替换字符串就是对指定字符串中…

vue浏览器插件安装-各种问题

方法1&#xff1a;vue.js devtolls插件下载 https://blog.csdn.net/qq_55640378/article/details/131553642 下载地址&#xff1a; Tags vuejs/devtools GitHub npm install 或是 cnpm install 遇到的报错 设置淘宝镜像源&#xff08;推荐使用nrm&#xff0c;这一步是为…

对接聚水潭-胜算接口

获取胜算账单数据【奇门接口】 官方API &#xff1a;获取胜算账单数据【奇门接口】-聚水潭ERP开放平台 对接胜算接口的时候&#xff0c; 需要注意无法直接使用奇门的JKD &#xff0c; 需要重写奇门的请求方法 &#xff0c; 因为有部分参数&#xff0c;奇门JDK中不存在 &…

使用IText导出复杂pdf

1、问题描述 需要将发票导出成pdf&#xff0c;要求每页都必须包含发票信息和表头行。 2、解决方法 使用IText工具实现PDF导出 IText8文档&#xff1a;Examples (itextpdf.com) 3、我的代码 引入Itext依赖&#xff0c;我这里用的是8.0.1版本 <dependency><groupId>…

excel功能区(ribbonx)编程笔记--1 初识功能区

再office2003版本以前,excel是具有菜单栏和工具栏的,再office2007及以后的版本中,界面中没有菜单栏和工具栏,使用功能区替换了菜单和工具栏。 您可能意识到自定义用户界面也变得更加困难,其实设置功能区并不会像您想像的那样困难,因为Microsoft也意识到必须有一种方式供开…

uniapp 上传比较大的视频文件就超时

uni.uploadFile&#xff0c;上传超过10兆左右的文件就报错err&#xff1a;uploadFile:fail timeout&#xff0c;超时 解决&#xff1a; 在manifest.json文件中做超时配置 uni.uploadFile({url: this.action,method: "POST",header: {Authorization: uni.getStorage…

数据管理平台

数据管理平台项目 文章目录 数据管理平台项目业务1-登录验证代码步骤&#xff1a; token 技术token的使用代码步骤 axios 请求拦截器语法代码示例 axios响应拦截器优化axios响应结果发布文章-富文本编辑器发布文章-频道列表发布文章-封面设置发布文章-收集并保存内容管理-文章列…