×
加载中...
代写CS 6290: High-Performance Computer Architecture
code 2024-05-03

CS 6290:高性能计算机体系结构

项目 1

 

此项目旨在帮助您了解无序处理器的分支预测和性能。您将再次需要“CS6290 Project VM”虚拟机,与我们用于 Project 0 的虚拟机相同。就像项目 0 一样,您将把答案放在此 Word 文档的红色框中,然后在 Canvas 中提交(提交的文件名现在应PRJ1.docx)。

在每个答案框中,您必须首先提供实际问题的答案(例如一个数字)。然后,您可以使用方括号提供问题没有要求但您认为可能有助于我们为您的答案评分的任何解释。例如,答案 9.7102 可以输入为 9.7102 [因为 9.71+0.0002 是 9.7102]。对于问“为什么”和/或“解释”的问题,正确的答案是简明扼要地说明问题所描述的原因,并说明你有什么证据。猜测,即使完全正确,也只能产生此类问题的 50% 的分数。

本文档的每个部分都指定了要上传的其他文件。提交文件时,请勿存档(zip、rar 或其他任何内容)——每个文件都应单独上传,并带有此分配中指定的文件名。如果不遵循文件提交和 CS 6290:高性能计算机体系结构命名指南,您将失去最多 20 分,如果缺少任何文件,您将失去与丢失文件相关的任何答案的所有分数(是的,这意味着如果缺少PRJ1.docx文件,则自动获得零分)。此外,如果不是很清楚哪个提交的文件与哪个请求的文件匹配, 代 写CS 6290: High-Performance Computer Architecture我们会将提交视为缺少该文件。如果您提交的多个文件似乎与同一请求的文件匹配(例如,多个同名文件),情况也是如此。简而言之,如果对应使用哪些提交的文件进行评分有任何歧义,则评分将像根本没有提交这些模棱两可的文件一样进行。

大多数数值答案应至少有两位小数的精度。加速应使用周期数计算到至少 4 位小数的精度,而不是 IPC(report.pl 报告的 IPC 四舍五入到仅两位小数)。如果四舍五入到比要求的小数点少,或者截断数字而不是正确舍入(例如,四舍五入到小数点后 3.141592 的加速是 3.1416,而不是 3.1415),则会丢分。

正如课程规则中所解释的,这是一个个人项目:不允许与其他学生或其他任何人合作。

第 1 部分 [20 点]:分支的配置[ 请注意,在本项目中,“分支”用于指代影响控制流的所有指令,其中包括分支指令,但也包括跳转、函数调用等。此外,“分支预测”是指对下一条指令地址的整体预测,而不仅仅是对方向的预测(采取或不采取)。预测

配置文件中描述了模拟计算机的硬件。在这个项目中,我们将再次使用 cmp4-noc.conf 配置文件,但这次我们将修改这个文件,所以现在是制作副本的好时机,这样我们就可以在需要时恢复原始配置。

处理器(内核)在文件开头附近的“cpucore”参数中指定。在本例中,该文件指定计算机具有 4 个编号为 0 到 3 的相同内核(procsPerNode 参数为 4),并且每个内核在 [issueX 部分中描述]。转到 [issueX] 部分,我们看到一个内核有很多参数,其中我们看到时钟频率设置为 1GHz,这是一个无序内核(无序设置为 false),每个周期最多获取、发出和停用 2 条指令(“issue”参数在文件前面设置为两个)。内核具有 [BPredIssueX] 部分中描述的分支预测器,从 [IMemory] 部分中描述的名为“IL1”的结构中获取指令(这是由 instrSource 参数指定的),并从 [DMemory] 部分中描述的名为“DL1”的结构读取/写入数据。在这个项目的这一部分中,我们将修改分支预测器,所以让我们仔细看看 [BPRedIssueX] 部分。它说预测变量的类型是“混合”(这并不能告诉我们太多),然后指定该预测变量的参数。

“混合”预测器实际上是一个锦标赛预测器。现在,您需要查看其源代码(位于 BPred.h 中,BPRed.cpp 文件位于 ~/sesc/src/libcore/ 目录中),并确定配置文件中的哪些参数控制预测器的哪个方面。提示:“混合”预测器是在 BPHybrid 类中实现的,因此它的构造函数和预测方法将告诉您需要了解的大部分内容。

A)此混合预测器中的元预测器是一个包含条目的表,每个条目都是一个 –bit 计数器。该元预测器根据 PC 地址(即我们从中获取分支/跳转指令的地址)决定是使用简单(无历史)计数器数组进行预测,还是使用(是本地还是全局?)历史预测器。更简单的(非历史记录)预测器使用 -bit 计数器,并具有 -bit 计数器(此数字使用配置文件的 BPredIssueX 部分中的参数标签指定)。基于历史记录的预测器具有历史记录位,这些历史记录与 PC 地址相结合,以索引到具有

条目(此条目数在配置文件中使用参数标签指定),每个条目都是一个 -bit 计数器。

第 2 部分 [30 点]:更改分支预测器

现在我们将比较一些分支预测变量。我们在 Project 0 中使用的 LU 基准测试并没有真正强调分支预测器,因此我们将使用光线追踪基准测试:

cd ~/sesc/apps/Splash2/raytrace

现在是时候做一些模拟了:

A)使用未修改的

cmp4-noc 配置(使用“混合”预测器)。以下内容应为单个命令行,在 -ort.out 之前有一个空格。和以前一样,此命令行中的破折号应该是减号字符,但复制粘贴可能会导致其他看起来相似但不是减号字符的内容,因此请注意您正在复制粘贴。

~/sesc/sesc.opt -f HyA -c ~/sesc/confs/cmp4-noc.conf -ort.out -ert.err raytrace.mipseb -m128 输入/reduced.env

然后我们将修改配置文件,因此如果您尚未这样做,请复制它。然后,通过将预测器的“类型”从“Hybrid”更改为“Oracle”来更改配置以对预言机(完美)方向预测器进行建模,然后重新运行仿真(将 -f 参数更改为 -f OrA,以便将仿真结果写入其他文件)。请注意,在这种情况下,整体分支预测精度并不完美 - 只有方向预测器是完美的,但目标地址预测器是(非预言机)BTB!之后,将处理器配置为使用简单的 predict-not-taken 预测器 (type=“NotTaken”) 并再次运行模拟(现在使用 -f NTA)。在 Canvas 中提交三个仿真报告文件(sesc_raytrace.mipseb.HyA、sesc_raytrace.mipseb.OrA 和 sesc_raytrace.mipseb.NTA)以及此项目的其他文件。

B)在下表中,对于每个仿真,请填写总体精度(report.pl 输出中 BPred 下的数字)、循环次数以及与使用混合预测器的配置相关的加速。

BPred 精度循环加速与混合

未采取 % C X

混合 % C X

甲骨文 % C X

C)现在将处理器的 renameDelay 参数(在配置文件的 issuesX 部分中)从 1 更改为 7。这使得处理器的管道延长了 6 个阶段。重复这三个模拟,在 Canvas 中提交模拟报告文件(sesc_raytrace.mipseb.HyC、sesc_raytrace.mipseb.OrC 和 sesc_raytrace.mipseb.NTC)以及此项目的其他文件。

 

 

D)In the table below, fill in the number of cycles with each type of predictor from Part A (simulations with the default pipeline depth) and from Part C (when the pipeline is 6 stages deeper), then compute the speedup of shortening the pipeline for each type of predictor, assuming that the clock cycle time stays the same (so the speedup can be computed using the number of cycles instead of execution time).

 

Cycles w/ renameDelay=1 Cycles w/ renameDelay=7 Speedup of changing renameDelay

from 7 to 1

NotTaken                             C                             C                             X

Hybrid                             C                             C                             X

Oracle                             C                             C                             X

E)The results in Part D) lead us to conclude that better branch prediction becomes (fill in either “more” or “less”)                  important when the processor’s pipeline depth increases. Now explain why the importance of branch prediction changes that way with pipeline depth:

 

 

 

 

 

 

F)From simulation results you have collected up to this point, there are at least two good ways to estimate how many cycles are wasted when we have a branch misprediction in the processor that has the default pipeline depth, i.e. what the branch misprediction penalty (in cycles) was for simulations in Part A). Enter your best estimate here                 and then explain how you got it:

 

 

 

 

 

 

 

 

 

 

Part 3 [50 points]: Which branches tend to be mispredicted?

In this part of the project we again use the cmp4-noc configuration. You should change it back to its original content, i.e. what it had before we modified it for Part 2. We will continue to use the Raytrace benchmark with the same parameters as in Part 2.

Our goal in this part of the project is to determine for each instruction in the program how many times the direction predictor (Hybrid or NotTaken) correctly predicts and how many times it mispredicts that branch/jump. The number of times the static branch/jump instruction was completed can be computed as the sum of two (correct and incorrect predictions) values for that static branch/jump instruction. You should change the simulator’s code to count correct and incorrect predictions for each static branch/jump instruction separately, and to (at the end of the simulation) print out the numbers you need to answer the following questions. The printing out should be in the order in which the numbers are requested below, and your code should not be changing the simulation report in any way. Then you should, of course, run the simulation and get the simulation results with the Hybrid and also with the NT predictor.

G)In both simulations, the number of static branch/jump instructions that are completed at least once but fewer than 20 times (i.e. between 1 and 19 completions) is                , the number of static branch/jump instructions with 20 to 199 completions is                 , the number of static branch/jump instructions with 200 and 1999 completions is                 , and the number of static branch/jump instructions with 2000+ completions is                 .

H)The accuracy for the direction predictor, computed separately for the four groups of static branch/jump instructions (1-19, 20-199, 200-1999, and 2000+ completions), is a follows:

Hybrid Accuracy NT Accuracy


I)We cannot run the raytrace benchmark with a much larger input because the simulation time would become excessive. But if we did, concisely state what would happen to the overall direction predictor accuracy of the Hybrid predictor and of the NT predictor, and then explain why the predictor accuracy should change in the way you stated.

 

J)Submit the BPred.h and BPred.cpp files that you have modified to produce the numbers you needed for Part 3 of this project. If you have modified any other source code in the simulator, create an OtherCode.zip file that includes these files and submit it, too. Also submit the output of the simulator for the two runs (as rt.out.Hybrid and rt.out.NT) Note that there is no need to submit the simulation report files (these should be the same as those from Part A).

请加QQ:99515681  邮箱:99515681@qq.com   WX:codinghelp