只有题目的简略翻译 我还没做 有的句子不会翻译
Exercise 4
Profiling Lab: Understanding Program Performance
这个练习呢,将给一个程序让你去优化,虽然会有很多可以优化的地方,不过你应该注意那些能更显著地减少运行时间的优化。
这个程序呢,可以perform string substitutions on a list of files。这个程序的输入是specified on the command line的。举个例子:
substitute.exe replacements.txt file1.txt file2.txt ... fileN.txt
例子中这个叫做replacements.txt的文件,包含a list of substitutions to perform。每个Each string substitution is specified in 3 lines:第一行是搜索的关键词(第一个字符串),下一行是替代词(第二个字符串),然后空一行。(感觉就是office里的替代)如下所示:
the
that
his
Her
command line上剩下的文件是要被修改的文件。这个程序读取每个文件,每一次performs the substitutions one line,然后写文件。为了实现替代,这个程序在文件里寻找第一个字符串的精确匹配。匹配的字符将被第二个字符串所替代。然后将继续在这个文件里搜索第一个字符串的匹配。This match is performed on the new state of the file,所以它可能包含之前替代过的字符。实际上,如果替代词包含搜索词,那么这个程序将进入。如果不再找得到匹配,这个程序将进行到替代文件的下一行。
一个好的编程风格将避免一次读进整个文件,因为文件可能会很大。这个练习里呢,你则可以假定总有足够的内存去读取整个文件。
要运行 substitute.Exe的话,把它移到任意一个目录下,在命令行里输入:
substitute.exe replace.txt call.cpp compiler.cpp driver.cpp getopt.cpp jnk.cpp mach.cpp math.cpp semantics.cpp test.cpp
Profiling substitute.exe
Once everything is running (check the test files to see that the substitutions were applied), you are ready to start optimizing. The first step will be to use a profiler to find out where the program is spending its time and what it is doing with that time. Consult Appendix A Profiler Customized for SSD6 for more information about the profiler.
当一切都在运行的时候就可以试着去优化了。第一步呢,先用一个profiler(分析器)去找出这个程序在什么地方很花时间,这段时间程序在做什么。关于分析器呢,看看 Appendix A Profiler Customized for SSD6 吧。
You should make a new version of substitute.exe and demonstrate, using profiling output, that it runs faster. You should be able to obtain at least a factor of 2 speedup (old run time divided by new run time). You do not have to use Microsoft Foundation Class objects, but given that these are well written and probably correct, you should only replace code that is doing unnecessary work as reflected in profiler measurements.
你应该发布一个新的substitute.exe,并且用分析器的输出结果证实你发布的东东的确跑的要快一些。你应该能够获得至少一个 factor of 2 speedup (old run time divided by new run time)。你不一定要用 Microsoft Foundation Class objects,不过既然它们都是well written而且基本上都是正确的,你应该只需要修改那些做无用功的代码,as reflected in profiler measurements.
提交两个文件:
1 你修改过的 substitute.cpp
2 一个文件,包含下面这些东西:
1 一个清楚简明的优化前你所观察到的现象的描述。这个应该是由一个分析器的输出来证实一下子。
2 你注意到的瓶颈。
3 为了address这些瓶颈,你做了什么,然后你观察到了怎样的提升(还是要有empirical evidence)。
4 如果你决定继续下一块最能优化的代码,那么指出要优化的是什么。并且说明你为什么没曾试着去优化这一块。
为了保证你的正确性,比较一下源代码改变前后的输出文件,因为你的优化并不能改变程序的功能,因此对应的输出文件应该是一致的。你可以用comp这个命令来检查下这两个文件是否一致。
另外,Unix工具比如 Find和SED还有Awk、Perl这些语言使这种替代很简单。
=======================
Profiler Customized for SSD6
The Visual C++.Net software bundle does not include a code profiler. However, the bundle includes a set of API (along with some examples) that tool developers can use to build a profiler. iCarnegie has customized the profiler code provided by Microsoft to suit the purposes of this course.
VC++并不包含一个代码分析器,但是包含一组API(还有例子),用这些就能够做个分析器出来。iCarnegie就做了一个。
解压那个下载的zip包,打开命令行,运行EnableProfiler.Bat。这个批处理文件将在你的注册表里加点东西。然后在同一个命令行里运行你的程序。将有一个output.Log记录分析的数据。用excel打开output.log as a csv (comma separated values)。
Note: In Microsoft Excel 2007, choose the "Data" menu, and click on "From Text". Choose Semicolon as the delimiter.
There are nine columns in the csv file:
1 Thread ID: The thread under which the function executed
2 Function: Name of the function
3 Times Called: The number of times the function was called
4 Exclusive Time: Amount of time (in seconds) spent in the function excluding time spent in its callees, Suspended Time and Profiler Time
5 Callee Exclusive Time: Amount of time (in seconds) spent in the function and its callees (children) excluding Suspended Time and Profiler Time
6 Inclusive Time: Amount of time (in seconds) spent in the function including Callee Time, Suspended Time and Profiler Time
7 Callee Time: Amount of time (in seconds) spent in the callees (including Suspended Time and Profiler Time spent under the callees)
8 Suspended Time: Amount of suspended time (in seconds)
9 Profiler Time: Amount of time spent by profiler (in seconds)
Clean the profiler data file: Sometimes you will see some functions such as static void System.AppDomain::OnExitProcess( ) that runs under a different Thread ID. You might see that function included as part of your output.log file (typically as the last few rows). If you see those function listed, delete all rows corresponding to that thread. Also, delete all rows that are empty.
要计算the fraction of time spent in each function (as a percentage of the total time spent across all functions) in column J, perform the following sequence of actions:
1 在J1敲一个恰当的名字(比如Function%)
2 把鼠标停在 J2
3 输入这个公式: =D2/SUM(D:D)
4 把这个公式复制到J的这一列
5 用百分比表示右键点击J列的比率,然后选择 "Format Cells...", 选"Number" tab, 然后specify "Percentage" as the Category.
要计算the fraction of time spent by each function and its callees (as a percentage of the total time spent by the program) in column K, 照着下面的做:
6 在K1敲个恰当的名字(比如Function+Child%).
7 降序排列E 列(Callee Exclusive Time). 这会让main function跑到第一个.
8 把E2标记为TotalTime (since cell E2 gives the time spent in main and its callees) by doing the following:
8 鼠标放在E2
8 选Insert > Name > Define. (In Excel 2007, choose "Formulas" menu, click "Define Name")
8 Type TotalTime as the name
8 click OK
9 选中K2
10 输入 =E2/TotalTime
11 把上面那公式复制到K列的每一格
12 在K列上右键,用百分数表示比率。然后选 "Format Cells...", 选 "Number" tab, 然后specify "Percentage" as the Category.
Now you can examine where your program spends significant amounts of time by sorting the data by Function% or Function+Child%
<!---->
相关推荐
ssd4 ex4 ssd4 ex4 人机界面 QT QT版本的作业 卡耐基网站的作业 ssd4 ex4 ssd4 ex4 人机界面 QT QT版本的作业 卡耐基网站的作业 ssd4 ex4 ssd4 ex4 人机界面 QT QT版本的作业 卡耐基网站的作业
在本实践练习中,我们关注的是“SSD8 Ex4 网络分布式练习四”的解决方案,这是一个关于网络和分布式系统的学习环节。分布式系统是现代计算的重要组成部分,它涉及到多台计算机通过网络协同工作,以解决单一计算机...
SSD4 EX4是关于使用QT库开发人机交互界面的一个练习项目,卡耐基可能指的是美国著名的卡耐基梅隆大学,这所大学在计算机科学领域有着极高的声誉。QT是一个跨平台的C++图形用户界面应用程序开发框架,它为创建现代、...
6. **SSD的寿命与耐久性**:SSD的寿命与每个单元的擦写周期有关。通过监控每个单元的状态,控制器可以预测SSD的剩余寿命,并采取措施延长其使用寿命。 7. **性能优化**:SSD的读写速度通常远超传统硬盘,但受制于...
virtual Listing sort(string field); This is a new method. This method returns a copy of the invoking Listing object sorted by the field name given in the parameter. Use an appropriate STL sorting ...
在本次的"ssd7 ex4数据库系统第四次练习"中,我们主要关注的是数据库系统的应用,特别是使用PostgreSQL数据库和MyEclipse开发环境。这是一个典型的Web应用程序开发项目,涉及了数据存储、用户交互和错误处理等多个...
【SSD6(系统级编程)EX4】是关于深入理解和实践系统级编程的一个练习,主要涉及的内容可能包括操作系统接口、内存管理、进程控制、文件系统以及系统调用等相关知识。由于描述中提到“这个练习真的很恶心”,这可能...
根据提供的文件信息,我们可以推断出这是一段与卡耐基梅隆大学SSD系列相关的代码片段,主要涉及字符串处理和文件操作。接下来,我们将详细分析这段代码中的关键知识点。 ### 1. 字符串解析函数 `parse1` `parse1` ...
6. **SSD的性能测试与基准**:学习如何使用工具如HD Tune、CrystalDiskMark等来评估SSD的读写速度、IOPS(每秒输入/输出操作数)和其他性能指标。 7. **SSD的故障预防与数据保护**:讲解如何通过冗余技术如RAID...
6. **安全性与优化** 数据库安全包括对用户访问的控制、SQL注入防护和数据加密。性能优化则涉及索引创建、查询优化、数据库设计和架构调整,以确保高效的数据处理。 7. **Web框架** 使用Web框架如Django(Python...
在SSD9 Exercise4中,我们主要探讨了类和动态建模,这涉及到了名词抽取、UML初步类图以及状态转换图等核心概念。 首先,名词抽取是需求分析的一个关键环节,它从需求文档或者描述中提取出重要的名词实体,这些名词...
SSD(Single Shot MultiBox Detector)是一种用于目标检测的深度学习模型,由Wang Shuang等人在2015年提出。Carnegie教程中的"SSD1,2,3,4,5相关资料"可能是指一系列针对SSD模型的学习资源,涵盖了从基础到进阶的多个...
很抱歉,根据您提供的信息,"ssd9 exercise4 ex4 满分 答案"似乎是一个关于课程作业或考试练习的标题,描述中并未提供具体的问题或知识点。标签同样重申了这是一个关于练习四(exercise4)且与SSD9(可能是课程代码...
《卡耐基梅隆的SSD7课件》是一份宝贵的学习资源,涵盖了数据库系统、Web技术和Java编程等核心IT领域的知识。这份资料适合不同层次的学习者,无论是非专业人士还是本科生,都能从中受益匪浅。下面,我们将深入探讨...
SSD8-Ex4待办事项列表答案参考:http://wangbaiyuan.cn/mysql-database-data-released-in-java-web-service-and-operations.html ……用户注册 新用户可以注册。新用户必须提供用户名和密码。如果提供的用户名称已经...
在分析EX4这个压缩包中的文件之前,我们先来探讨一下SSD6 Exercise 4可能涵盖的一些核心知识点。 1. **固态硬盘基础**:固态硬盘与传统的机械硬盘(HDD)不同,它使用闪存作为存储介质,没有移动部件,因此读写速度...
6. **wordlist.zip**:这是一个压缩文件,可能包含了一个单词列表,用于扩展测试数据或作为某种搜索操作的基准。解压这个文件后,可以使用其中的数据来测试和优化数据结构的性能。 在SSD5课程的学习中,理解和实现...
-------------------------------------------------------------------------------- Submission Submit the following files: A project archive named Exercise4.zip UAR_sound_control.doc
SSD1,全称为Solid State Drive 1,可能是指一种针对固态硬盘(Solid State Drives)的基础知识或考核标准。在这个压缩包中,我们有多种解答方式的汇总,这通常意味着它包含了针对SSD1相关问题的不同解决策略,可能...
1. "PreliminaryClassDiagram_ssd9ex4.png" - 这是一个初步的类图,是面向对象设计中的一个重要组成部分。类图展示了系统中不同类之间的关系,包括继承、关联和聚合等。在SSD9 Exercise4中,它可能是用来描述系统的...