日韩精品一区二区三区高清_久久国产热这里只有精品8_天天做爽夜夜做爽_一本岛在免费一二三区

合肥生活安徽新聞合肥交通合肥房產生活服務合肥教育合肥招聘合肥旅游文化藝術合肥美食合肥地圖合肥社保合肥醫院企業服務合肥法律

代寫COMP26020、代做c/c++,Java編程設計

時間:2024-03-15  來源:合肥網hfw.cc  作者:hfw.cc 我要糾錯



COMP26020 - Lab exercise for Part III (Compilers)
Register Allocation using Graph Colouring
Background
Computer programs, regardless of the programming language, often use many more variables
than the number of variables that can fit in all CPU registers. When a program is compiled for
execution on a given processor, the compiler needs to consider what variables will stay in
registers and for how long. If we think that moving data from the memory takes several cycles,
there is a performance benefit if the compiler can minimise such transfers. How to do this? By
doing some ‘clever’ register allocation, for example, by making sure that the most frequently used
variables are placed in registers.
To understand the problem, consider the following piece of code:
1. r1=x
2. r2=y
3. r3=r1*r2
4. r4=z
5. r5=r4+r2
6. r6=w
7. r7=r5+r6
8. r8=r7*r3
9. r9=r8+r1
In this piece of code, the programmer has used 9 variables. However, does this mean that 9
registers are needed? To find the answer, let us define the notion of a live range. For any given
variable, there is a live range that starts from the point where a value is assigned to this variable
and lasts until the last time this particular value is used. Note that if a new value is assigned to
the same variable, a new live range starts. For example, a value for r2 is defined in instruction 2.
The last time it is used is in instruction 5, hence, the live range is between 2 and 5. However, if
instruction 4 was r2=z, the live range would be from 2 to 3 and another live range would start at
instruction 4 and end at instruction 5.
To practice, you may want to find all live ranges of the code above. The answer is given: r1:[1,9],
r2:[2,5], r3:[3,8], r4:[4,5], r5:[5,7], r6:[6,7], r7:[7,8], r8:[8,9], r9:[9,9].
Live ranges are important because they indicate how many values need to be live at any given
instruction. For example, the live ranges above tell us that at instruction 6 four values need to be
live. Clearly, the maximum number of values that need to be live at any instruction indicates how
many registers we need to have so that all values (live ranges) can be placed in registers.
However, most importantly, live ranges can guide register allocation: two live ranges that do not
overlap or interfere can use the same register. For example, with the live ranges above, r2 and r6
can share the same register as the corresponding values are needed (or are ‘live’) at different
parts of the code.
Different algorithms have been developed to find how to allocate different live ranges to registers.
This problem is known as register allocation. It is an NP-complete problem, which means that
most of the different solutions proposed over the years are based on heuristics. For additional
information you can refer to Chapter 13 of the ‘Engineering a Compiler’ recommended textbook:
https://www.sciencedirect.com/science/article/pii/B978012088**8000013X
Among the different approaches, register allocation using graph colouring is a common
approach. In register allocation using graph colouring, live ranges are used to create an
interference graph. In this graph, every live range corresponds to a node. There is an edge
between two nodes if the live ranges overlap. Then, register allocation becomes equivalent to the
problem of graph colouring. This is a well-known graph theory problem where the aim is to colour
all nodes of the graph so that two adjacent nodes do not share the same colour. Typically the
goal is to find the smallest number of colours. Every colour corresponds to a register and the
colour of a node corresponds to the register that should be used for a particular live range. There
are various algorithms to colour a graph. Here, we are going to focus on a simple (heuristic)
algorithm, which is known as top-down colouring. The algorithm works as follows:
1. Assume an ordered list of colours (eg, red, black, blue, etc, here denoted by A, B, C, …)
2. Assume an interference graph, where nodes are numbered: 1, 2, 3, …
3. Rank nodes (that is, live ranges) of the interference graph according to the number of
neighbours in descending order. In case of a tie (that is, nodes with the same number of
neighbours) the node with the lowest id takes priority.
4. Follow the ranking to assign colours from the list of colours. For each node, select the first
colour from the list that is not used by the node’s neighbours.
5. Keep following the ranking and repeating step 4 until all nodes are coloured.
Your task
Use a programming language of your choice to write a program that implements graph colouring
as illustrated by the algorithm above, which:
 reads a file that lists an interference graph (input).
 writes a file that lists colours for every node of the graph (output).
The ordered list of colours is given by the upper-case letters of the alphabet: A, B, C, …, Z. There
is a total of 26 colours (or registers).
Input file specification:
A number of lines equal to the number of nodes of the interference graph. Every line contains the
number of a node (consecutive integers in ascending order, starting with 1) and the numbers of
all nodes with which there is interference (not necessarily in ascending order), separated by a
comma. Example test case:
1,2,3,4
2,4,1
3,1
4,1,2
This means that node 1 interferes with nodes 2, 3, and 4. Node 2 interferes with nodes 1 (we
knew this already) and 4. Node 3 interferes with nodes 1 and 4 interferes with nodes 1 and 2.
You can assume that there are no more than 50 nodes, every node has at least one neighbour
and all interferences are correct. Input files that contain characters other than digits, comma, endof-line or do not adhere to the specification above should be rejected with a simple message.
Output file specification:
For every node (in ascending order), write node number and colour. For the example above:
1A
2B
3B
4C
(other test cases may be posted on BB – you are encouraged to create and post your own too)
Your program should take two command line arguments, which indicate the name of the input file
and the name of the output file. E.g.: % <myprogram> input.txt output.txt
Your program should display a simple message if the input does not meet the specifications
above or the algorithm cannot produce a result with 26 colours or less.
You should be able to complete this task after two weeks of scheduled lab sessions when you
can drop in for any questions. The deadline for submission is Friday 15 March, 6pm. You
should submit through gitlab (and the repository 26020-lab4-s-compilers_<your
username>). Your submission should include all source file(s) and a readme file with instructions
on how to compile and run your code and the tag lab4-submission. You should make sure
that you push to the correct repository in line with UG handbook guidelines, tag the
submission properly and all the files for your code to compile, run and work as intended
are included; failure to do so may result in a mark of 0.
Marking (out of 10) will take place according to the following scheme:
 2 marks for producing the output of the example above correctly.
 3 marks for handling input correctly, code readability and sensible comments.
 5 marks for finding the output of additional test cases correctly.
請加QQ:99515681  郵箱:99515681@qq.com   WX:codehelp 

掃一掃在手機打開當前頁
  • 上一篇:代寫CSCI 4176、SQL程序語言代做
  • 下一篇:CEG5301代做、MATLAB編程語言代寫
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    有限元分析 CAE仿真分析服務-企業/產品研發/客戶要求/設計優化
    有限元分析 CAE仿真分析服務-企業/產品研發
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    出評 開團工具
    出評 開團工具
    挖掘機濾芯提升發動機性能
    挖掘機濾芯提升發動機性能
    海信羅馬假日洗衣機亮相AWE  復古美學與現代科技完美結合
    海信羅馬假日洗衣機亮相AWE 復古美學與現代
    合肥機場巴士4號線
    合肥機場巴士4號線
    合肥機場巴士3號線
    合肥機場巴士3號線
    合肥機場巴士2號線
    合肥機場巴士2號線
  • 短信驗證碼 豆包 幣安下載 目錄網

    關于我們 | 打賞支持 | 廣告服務 | 聯系我們 | 網站地圖 | 免責聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網 版權所有
    ICP備06013414號-3 公安備 42010502001045

    日韩精品一区二区三区高清_久久国产热这里只有精品8_天天做爽夜夜做爽_一本岛在免费一二三区

      <em id="rw4ev"></em>

        <tr id="rw4ev"></tr>

        <nav id="rw4ev"></nav>
        <strike id="rw4ev"><pre id="rw4ev"></pre></strike>
        亚洲一二三区视频在线观看| 亚洲伊人伊色伊影伊综合网| 国产精品网站视频| 一本大道久久精品懂色aⅴ| 加勒比av一区二区| 欧美a级大片| 欧美激情一区二区在线| 欧美精品在线一区二区三区| 欧美性做爰猛烈叫床潮| 国内精品免费午夜毛片| 欧美成人免费网| 尹人成人综合网| 欧美一级理论性理论a| 午夜精彩视频在线观看不卡| 欧美日韩天堂| 亚洲精品国产精品国产自| 久久久.com| 亚洲免费人成在线视频观看| 国产精品美女视频网站| 韩日视频一区| 欧美日韩国产在线| 国产欧美在线观看| 欧美日产在线观看| 亚洲欧美制服中文字幕| 国产精品一卡二卡| 亚洲精品久久久久久一区二区| 欧美日韩一区三区四区| 一区二区三区视频观看| 欧美另类变人与禽xxxxx| 99v久久综合狠狠综合久久| 国产精品久久久久久久午夜| 亚洲国产精品一区二区第四页av| 久久成人免费视频| 另类图片综合电影| 黄网动漫久久久| 亚洲久久成人| 国产午夜精品一区理论片飘花| 国产精品盗摄一区二区三区| 日韩网站免费观看| 欧美r片在线| 午夜精品久久久| 欧美成人精品不卡视频在线观看| 欧美精品 国产精品| 亚洲一区二区三区777| 亚洲一区二区视频| 一本色道久久综合亚洲二区三区| 狠狠久久亚洲欧美| 久久免费国产| 国产欧美va欧美va香蕉在| 亚洲精品小视频| 亚洲欧美成aⅴ人在线观看| 性亚洲最疯狂xxxx高清| 欧美人在线观看| 国产日本欧美一区二区| 国外成人在线视频网站| 久热精品视频在线观看一区| 伊人婷婷欧美激情| 亚洲一卡二卡三卡四卡五卡| 欧美永久精品| 欧美乱妇高清无乱码| 亚洲一区二区三区高清| 亚洲免费黄色| 极品av少妇一区二区| 欧美婷婷在线| 国语自产精品视频在线看8查询8| 亚洲高清不卡一区| 亚洲欧洲一区二区三区在线观看| 国产精品夜夜夜| 亚洲精品国产精品乱码不99按摩| 国产无遮挡一区二区三区毛片日本| 亚洲日本无吗高清不卡| 午夜精品一区二区三区在线播放| 在线视频一区观看| 亚洲人成啪啪网站| 国产欧美一级| 欧美精品情趣视频| 久久精视频免费在线久久完整在线看| 亚洲精品之草原avav久久| 宅男精品导航| 国产女同一区二区| 国产偷自视频区视频一区二区| 欧美大尺度在线观看| 国产精品久久久免费| 国产欧美日韩视频在线观看| 亚洲精品专区| 乱人伦精品视频在线观看| 久久国产欧美精品| 美女脱光内衣内裤视频久久网站| 免费欧美视频| 国产精品久久久久免费a∨| 欧美激情日韩| 亚洲视频中文字幕| 欧美gay视频| 黄色一区三区| 欧美一区二区三区播放老司机| 国产精品videossex久久发布| 99精品欧美一区二区蜜桃免费| 欧美日韩一级大片网址| 欧美一区视频| 欧美区在线观看| 国产精品99久久久久久久vr| 欧美午夜免费影院| 亚洲视频一二区| 久久大逼视频| 国内外成人免费激情在线视频网站| 夜夜嗨av一区二区三区网页| 91久久久精品| 国产一区二区三区不卡在线观看| 国产精品蜜臀在线观看| 久久久精品2019中文字幕神马| 亚洲国产欧美日韩另类综合| 狼人社综合社区| 亚洲精品欧美激情| 亚洲精品亚洲人成人网| 欧美日韩精品二区第二页| 欧美视频中文字幕在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 91久久精品一区| 国产欧美日韩免费| 好吊妞**欧美| 欧美日韩亚洲一区二区三区在线观看| 久久久高清一区二区三区| 国产精品一区二区视频| 日韩图片一区| 国产视频精品va久久久久久| 久久综合九色综合欧美就去吻| 国产一区二区精品久久99| 国产精品第一区| 久久精品视频网| 欧美乱人伦中文字幕在线| 欧美人体xx| 国产三区精品| 国产精品日韩一区二区三区| 日韩一级视频免费观看在线| 亚洲精品在线观看免费| 久久麻豆一区二区| 正在播放亚洲| 久久精品国产免费观看| 亚洲国产日韩欧美综合久久| 欧美视频专区一二在线观看| 免费不卡视频| 欧美人妖在线观看| 先锋影音国产一区| 最新国产精品拍自在线播放| 欧美国产丝袜视频| 欧美视频亚洲视频| 国产区精品在线观看| 99精品99| 一区二区av| 欧美日韩另类字幕中文| 亚洲免费视频网站| 午夜视频一区| 久久日韩精品| 国产精品永久| 亚洲男人第一av网站| 亚洲第一在线综合在线| 国产一区日韩二区欧美三区| 欧美a级片网站| 久久久久88色偷偷免费| 欧美 日韩 国产一区二区在线视频| 免费国产一区二区| 亚洲欧美日韩精品一区二区| 狠狠综合久久| 亚洲一区视频在线|