1059
1059
< svg viewbox ="0 0 24 24 " xmlns ="http://www.w3.org/2000/svg "> < path d ="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25Z "> </ path > </ svg >
1060
1060
</ a >
1061
1061
< div class ="admonition warning ">
1062
- < p class ="admonition-title "> 1705847815 </ p >
1062
+ < p class ="admonition-title "> 1736743329 </ p >
1063
1063
</ div >
1064
1064
< h1 id ="_1 "> 计算机体系结构< a class ="headerlink " href ="#_1 " title ="Permanent link "> < span > < span class ="heti-spacing "> </ span > ¶</ span > </ a > </ h1 >
1065
1065
< div class ="badges ">
@@ -1081,7 +1081,7 @@ <h3 id="_3">先修要求<a class="headerlink" href="#_3" title="Permanent link">
1081
1081
</ ul >
1082
1082
< p > 直接承接计组的内容,基础部分的内容就是计组的高级部分,如果计组学得很好,这门课的难度将大大降低。</ p >
1083
1083
< h3 id ="_4 "> 实验要求< a class ="headerlink " href ="#_4 " title ="Permanent link "> < span > < span class ="heti-spacing "> </ span > ¶</ span > </ a > </ h3 >
1084
- < div class ="tabbed-set tabbed-alternate " data-tabs ="1:2 "> < input checked ="checked " id ="__tabbed_1_1 " name ="__tabbed_1 " type ="radio "/> < input id ="__tabbed_1_2 " name ="__tabbed_1 " type ="radio "/> < div class ="tabbed-labels "> < label for ="__tabbed_1_1 "> 姜晓红< span class ="heti-skip "> < span class ="heti-spacing "> </ span > /< span class ="heti-spacing "> </ span > </ span > 王小航< span class ="heti-skip "> < span class ="heti-spacing "> </ span > /< span class ="heti-spacing "> </ span > </ span > 何水兵</ label > < label for ="__tabbed_1_2 "> 常瑞</ label > </ div >
1084
+ < div class ="tabbed-set tabbed-alternate " data-tabs ="1:3 "> < input checked ="checked " id ="__tabbed_1_1 " name ="__tabbed_1 " type ="radio "/> < input id ="__tabbed_1_2 " name ="__tabbed_1 " type ="radio "/> < input id =" __tabbed_1_3 " name =" __tabbed_1 " type =" radio " /> < div class ="tabbed-labels "> < label for ="__tabbed_1_1 "> 姜晓红< span class ="heti-skip "> < span class ="heti-spacing "> </ span > /< span class ="heti-spacing "> </ span > </ span > 王小航< span class ="heti-skip "> < span class ="heti-spacing "> </ span > /< span class ="heti-spacing "> </ span > </ span > 何水兵</ label > < label for ="__tabbed_1_2 "> 常瑞</ label > < label for =" __tabbed_1_3 " > 卜凯 </ label > </ div >
1085
1085
< div class ="tabbed-content ">
1086
1086
< div class ="tabbed-block ">
1087
1087
< ul >
@@ -1110,10 +1110,20 @@ <h3 id="_4">实验要求<a class="headerlink" href="#_4" title="Permanent link">
1110
1110
< li > lab6:Tomasulo(bonus)</ li >
1111
1111
</ ul >
1112
1112
</ div >
1113
+ < div class ="tabbed-block ">
1114
+ < ul >
1115
+ < li > lab1(6%):< span > forwarding + predict not taken< span class ="heti-spacing "> </ span > </ span > 的流水线</ li >
1116
+ < li > lab2(4%):带异常处理的流水线</ li >
1117
+ < li > lab3(3%):缓存设计</ li >
1118
+ < li > lab4(4%):将缓存加入到流水线中</ li >
1119
+ < li > lab5(7%):完成乱序流水线的执行单元</ li >
1120
+ < li > lab6(8%):完成< span class ="heti-skip "> < span class ="heti-spacing "> </ span > scoreboard< span class ="heti-spacing "> </ span > </ span > 乱序流水线</ li >
1121
+ </ ul >
1122
+ </ div >
1113
1123
</ div >
1114
1124
</ div >
1115
1125
< h2 id ="_5 "> 任课教师< a class ="headerlink " href ="#_5 " title ="Permanent link "> < span > < span class ="heti-spacing "> </ span > ¶</ span > </ a > </ h2 >
1116
- < div class ="tabbed-set tabbed-alternate " data-tabs ="2:4 "> < input checked ="checked " id ="__tabbed_2_1 " name ="__tabbed_2 " type ="radio "/> < input id ="__tabbed_2_2 " name ="__tabbed_2 " type ="radio "/> < input id ="__tabbed_2_3 " name ="__tabbed_2 " type ="radio "/> < input id ="__tabbed_2_4 " name ="__tabbed_2 " type ="radio "/> < div class ="tabbed-labels "> < label for ="__tabbed_2_1 "> 姜晓红</ label > < label for ="__tabbed_2_2 "> 常瑞</ label > < label for ="__tabbed_2_3 "> 何水兵</ label > < label for ="__tabbed_2_4 "> 王小航</ label > </ div >
1126
+ < div class ="tabbed-set tabbed-alternate " data-tabs ="2:5 "> < input checked ="checked " id ="__tabbed_2_1 " name ="__tabbed_2 " type ="radio "/> < input id ="__tabbed_2_2 " name ="__tabbed_2 " type ="radio "/> < input id ="__tabbed_2_3 " name ="__tabbed_2 " type ="radio "/> < input id ="__tabbed_2_4 " name ="__tabbed_2 " type ="radio "/> < input id =" __tabbed_2_5 " name =" __tabbed_2 " type =" radio " /> < div class ="tabbed-labels "> < label for ="__tabbed_2_1 "> 姜晓红</ label > < label for ="__tabbed_2_2 "> 常瑞</ label > < label for ="__tabbed_2_3 "> 何水兵</ label > < label for ="__tabbed_2_4 "> 王小航</ label > < label for =" __tabbed_2_5 " > 卜凯 </ label > </ div >
1117
1127
< div class ="tabbed-content ">
1118
1128
< div class ="tabbed-block ">
1119
1129
< p > 姜老师的专业知识能力和讲课水平还是不错的,重要的知识点能讲的比较清楚。但是因为这门课她一年只上一次,部分地方(比如< span > < span class ="heti-spacing "> </ span > GPU</ span > )会出现< span class ="heti-skip "> < span class ="heti-spacing "> </ span > PPT< span class ="heti-spacing "> </ span > </ span > 不熟悉开始现场回忆或者口胡的情况,这个时候如果遇到不懂的内容可以下课去问她,她回忆起来了就可以讲的很清楚。不是很会使用学在浙大的小测功能,容易花< span class ="heti-skip "> < span class ="heti-spacing "> </ span > 20min< span class ="heti-spacing "> </ span > </ span > 研究小测怎么打开。如果平时分太高,可能会调分数比例压分,但是基本影响不大;期末考批卷比较捞,能不扣分就不扣分,但是批完以后是不会再捞人的。期末成绩会提前几天公示,可以及时的去争取分数。</ p >
@@ -1129,6 +1139,12 @@ <h2 id="_5">任课教师<a class="headerlink" href="#_5" title="Permanent link">
1129
1139
< div class ="tabbed-block ">
1130
1140
< p > < span > 21< span class ="heti-spacing "> </ span > </ span > 级新开体系结构的老师,讲课较枯燥,分数组成和< span class ="heti-skip "> < span class ="heti-spacing "> </ span > PPT< span class ="heti-spacing "> </ span > </ span > 完全沿袭姜老师的体系。< span > 21< span class ="heti-spacing "> </ span > </ span > 级情况是实验可以不用验收,也没有小测,且最后给分相当慷慨。</ p >
1131
1141
</ div >
1142
+ < div class ="tabbed-block ">
1143
+ < p > 卜凯老师的课是国际化课程,上课会使用英文进行授课。不过在< span > < span class ="heti-spacing "> </ span > 2024</ span > ~< span > 2025< span class ="heti-spacing "> </ span > </ span > 学年的秋冬学期,上课的时候有些时候也会使用中文上课,比如在一些关键的地方或者是他认为不容易讲清楚的地方。< span > kg< span class ="heti-spacing "> </ span > </ span > 的英语水平非常好,不用担心英语难以听懂。卜老师的< span class ="heti-skip "> < span class ="heti-spacing "> </ span > PPT< span class ="heti-spacing "> </ span > </ span > 是单独做的,和姜老师的< span class ="heti-skip "> < span class ="heti-spacing "> </ span > PPT< span class ="heti-spacing "> </ span > </ span > 不太一样,内容基本是按照课本上的内容和顺序进行安排,但是在一些重要的地方会加上个人理解和其他内容。</ p >
1144
+ < p > 卜凯老师偶尔会进行小测或者是点名,但是在< span > < span class ="heti-spacing "> </ span > 24</ span > ~< span > 25< span class ="heti-spacing "> </ span > </ span > 学年的秋冬学期中,只有一次小测,几乎没怎么点名。作业会布置两次,一次是在讲完< span class ="heti-skip "> < span class ="heti-spacing "> </ span > cache< span class ="heti-spacing "> </ span > </ span > 后布置,一次是在期末前两三周布置。题量不大,并且感觉作业的目的并不是追求答案的正确,基本上只要写了就不会扣分。此外,还会有一次组队展示,需要阅读顶会的和体系结构相关的论文并进行展示,需要使用英文展示。</ p >
1145
+ < p > 卜凯老师给分十分慷慨,据笔者课下和老师聊天所知,平时分基本上都会给满。期末改卷的速度也很快,上午考试,下午就登完分了。在实验方面,< span > 24 ~ 25< span class ="heti-spacing "> </ span > </ span > 学年的实验课是全程两人组队,验收是老师亲自验收,但是不用担心像姜老师班级一样那么严格,只要认真做了相信问题不会很大。由于实验室的板子的接口已经非常破旧,有时候可能需要多换几个板子才能正常验收。实验报告需要使用英文撰写,但是不需要提交代码。</ p >
1146
+ < p > 卜凯老师非常热爱教学,对学生也很友好,有问题可以随时问他,课下也可以找他聊天,不论是关于课程内容还是关于自己的其他困惑,他会非常热情地解答。他会尝试记住来上课的学生的名字,如果被他记住了,那么也许在上课前会看看你有没有来听课(开玩笑的,没来也不会扣分)。总的来说,卜凯老师是一位非常好的老师,强烈推荐选择他的课程。</ p >
1147
+ </ div >
1132
1148
</ div >
1133
1149
</ div >
1134
1150
< h2 id ="_6 "> 课程教材< a class ="headerlink " href ="#_6 " title ="Permanent link "> < span > < span class ="heti-spacing "> </ span > ¶</ span > </ a > </ h2 >
@@ -1137,7 +1153,7 @@ <h2 id="_6">课程教材<a class="headerlink" href="#_6" title="Permanent link">
1137
1153
< p > 这本书是体系结构领域非常经典的书籍,值得一读,但是每章后面的练习题难以恭维。</ p >
1138
1154
< h2 id ="_7 "> 分数构成< a class ="headerlink " href ="#_7 " title ="Permanent link "> < span > < span class ="heti-spacing "> </ span > ¶</ span > </ a > </ h2 >
1139
1155
< p > 所有老师的期末考试占比都是< span > < span class ="heti-spacing "> </ span > 40%</ span > ,下面仅列举老师的平时分数构成。</ p >
1140
- < div class ="tabbed-set tabbed-alternate " data-tabs ="3:4 "> < input checked ="checked " id ="__tabbed_3_1 " name ="__tabbed_3 " type ="radio "/> < input id ="__tabbed_3_2 " name ="__tabbed_3 " type ="radio "/> < input id ="__tabbed_3_3 " name ="__tabbed_3 " type ="radio "/> < input id ="__tabbed_3_4 " name ="__tabbed_3 " type ="radio "/> < div class ="tabbed-labels "> < label for ="__tabbed_3_1 "> 姜晓红< span class ="heti-skip "> < span class ="heti-spacing "> </ span > /< span class ="heti-spacing "> </ span > </ span > 王小航</ label > < label for ="__tabbed_3_2 "> 常瑞</ label > < label for ="__tabbed_3_3 "> 何水兵</ label > < label for ="__tabbed_3_4 "> 陈文智</ label > </ div >
1156
+ < div class ="tabbed-set tabbed-alternate " data-tabs ="3:5 "> < input checked ="checked " id ="__tabbed_3_1 " name ="__tabbed_3 " type ="radio "/> < input id ="__tabbed_3_2 " name ="__tabbed_3 " type ="radio "/> < input id ="__tabbed_3_3 " name ="__tabbed_3 " type ="radio "/> < input id ="__tabbed_3_4 " name ="__tabbed_3 " type ="radio "/> < input id =" __tabbed_3_5 " name =" __tabbed_3 " type =" radio " /> < div class ="tabbed-labels "> < label for ="__tabbed_3_1 "> 姜晓红< span class ="heti-skip "> < span class ="heti-spacing "> </ span > /< span class ="heti-spacing "> </ span > </ span > 王小航</ label > < label for ="__tabbed_3_2 "> 常瑞</ label > < label for ="__tabbed_3_3 "> 何水兵</ label > < label for ="__tabbed_3_4 "> 陈文智</ label > < label for =" __tabbed_3_5 " > 卜凯 </ label > </ div >
1141
1157
< div class ="tabbed-content ">
1142
1158
< div class ="tabbed-block ">
1143
1159
< p > 20、< span > 21< span class ="heti-spacing "> </ span > </ span > 级的各部分比例如下</ p >
@@ -1172,11 +1188,22 @@ <h2 id="_7">分数构成<a class="headerlink" href="#_7" title="Permanent link">
1172
1188
< li > bonus: quiz, question, discussion(<=10%)</ li >
1173
1189
</ ul >
1174
1190
</ div >
1191
+ < div class ="tabbed-block ">
1192
+ < p > < span > 22< span class ="heti-spacing "> </ span > </ span > 级的各部分比例如下</ p >
1193
+ < ul >
1194
+ < li > Class participation & performance(4%)</ li >
1195
+ < li > 作业及展示(16%)</ li >
1196
+ < li > 实验(32%)</ li >
1197
+ < li > 小测(8%)</ li >
1198
+ < li > 期末考试(40%)</ li >
1199
+ </ ul >
1200
+ </ div >
1175
1201
</ div >
1176
1202
</ div >
1177
1203
< h2 id ="_8 "> 学习建议< a class ="headerlink " href ="#_8 " title ="Permanent link "> < span > < span class ="heti-spacing "> </ span > ¶</ span > </ a > </ h2 >
1178
1204
< p > 体系结构的任务还是比较轻的,课程内容虽然设计的量比较大,包括< span > < span class ="heti-spacing "> </ span > Cache</ span > 、分支预测、SIMD、多发射、乱序、多核等一系列内容,但是都不是非常深入,大多数重在了解,其中乱序的算法、内存一致性协议达到了定量的程度,其他主要还是定性的程度。< span > lab< span class ="heti-spacing "> </ span > </ span > 比计组的简单很多,不同于计组的纯手搓,体系的< span class ="heti-skip "> < span class ="heti-spacing "> </ span > lab< span class ="heti-spacing "> </ span > </ span > 都给了代码,只需要做适当的填空即可,很多时候一个下午就可以了,甚至< span > < span class ="heti-spacing "> </ span > lab1</ span > 、lab3、< span > lab4< span class ="heti-spacing "> </ span > </ span > 其实计组很多人都做过,可以直接用计组的代码来验收< heti-adjacent class ="heti-adjacent-half "> ,</ heti-adjacent > (姜老师班)如果要做< span class ="heti-skip "> < span class ="heti-spacing "> </ span > bonus< span class ="heti-spacing "> </ span > </ span > 那需要自己写代码,没有框架可以用,所以这门课任务量还是比较少的,不会太占时间。期末考可以带< span class ="heti-skip "> < span class ="heti-spacing "> </ span > 1< span class ="heti-spacing "> </ span > </ span > 张手写< span class ="heti-skip "> < span class ="heti-spacing "> </ span > A4< span class ="heti-spacing "> </ span > </ span > 纸,拿来抄各种策略、协议和算法还是不错的。</ p >
1179
1205
< p > 体系结构这门课为人诟病的一点在于,不同老师讲的内容出入可能会非常大,而且由于期末考试是不同老师出题之后组卷,有可能出现考没有讲过的内容。建议复习时参考多个老师的< span > < span class ="heti-spacing "> </ span > PPT</ span > 、复习课,以及< span class ="heti-skip "> < span class ="heti-spacing "> </ span > 98< span class ="heti-spacing "> </ span > </ span > 的回忆卷。Cache、乱序(Scoreboard、Tomasulo)、< span > Cache< span class ="heti-spacing "> </ span > </ span > 一致性(MESI、Directory)这部分内容相当重要,时常会在大题里出现。</ p >
1206
+ < p > < span > P.S.< span class ="heti-spacing "> </ span > </ span > 如果对乱序执行中的时序感到有点混乱,建议以书为准,虽然书中的描述有些抽象。可以参考姜老师的< span class ="heti-skip "> < span class ="heti-spacing "> </ span > PPT< span class ="heti-spacing "> </ span > </ span > 中展示的具体顺序来学习,不过可能需要注意每个执行单元所需要的时间有可能和书上的不太一样。此外,在复习的时候可以参考历年卷,< span > 23< span class ="heti-spacing "> </ span > </ span > 年何水兵老师的最后一节课上放出来了前一年的试卷,可以去看一下回放。从< span class ="heti-skip "> < span class ="heti-spacing "> </ span > 22< span class ="heti-spacing "> </ span > </ span > 级的考试题目来看,参考的价值还是比较大的。</ p >
1180
1207
< hr />
1181
1208
< style >
1182
1209
# footer-wrapper {
@@ -1206,7 +1233,7 @@ <h2 id="_8">学习建议<a class="headerlink" href="#_8" title="Permanent link">
1206
1233
}
1207
1234
</ style >
1208
1235
< div id ="footer-wrapper ">
1209
- < p > < span class ="twemoji "> < svg viewbox ="0 0 24 24 " xmlns ="http://www.w3.org/2000/svg "> < path d ="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z "> </ path > </ svg > </ span > 2024-01-21 < span class ="twemoji "> < svg viewbox ="0 0 24 24 " xmlns ="http://www.w3.org/2000/svg "> < path d ="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12 "> </ path > </ svg > </ span > Contributors < span class ="contributors "> < a href ="https://github.com/TonyCrane " target ="_blank " title ="TonyCrane "> < img alt ="TonyCrane " src ="https://avatars.githubusercontent.com/u/44120331 "/> </ a > < a href ="https://github.com/ZhouTimeMachine " target ="_blank " title ="ZhouTimeMachine "> < img alt ="ZhouTimeMachine " src ="https://avatars.githubusercontent.com/u/99057383 "/> </ a > < a href ="https://github.com/HobbitQia " target ="_blank " title ="HobbitQia "> < img alt ="HobbitQia " src ="https://avatars.githubusercontent.com/u/89443407 "/> </ a > < a href ="https://github.com/zhouyangye1076 " target ="_blank " title ="zhouyangye1076 "> < img alt ="zhouyangye1076 " src ="https://avatars.githubusercontent.com/u/104267280 "/> </ a > </ span > </ p >
1236
+ < p > < span class ="twemoji "> < svg viewbox ="0 0 24 24 " xmlns ="http://www.w3.org/2000/svg "> < path d ="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z "> </ path > </ svg > </ span > 2025-01-13 < span class ="twemoji "> < svg viewbox ="0 0 24 24 " xmlns ="http://www.w3.org/2000/svg "> < path d ="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12 "> </ path > </ svg > </ span > Contributors < span class ="contributors "> < a href ="https://github.com/TonyCrane " target ="_blank " title ="TonyCrane "> < img alt ="TonyCrane " src ="https://avatars.githubusercontent.com/u/44120331 "/> </ a > < a href ="https://github.com/D2mdlws " target ="_blank " title ="D2mdlws "> < img alt ="D2mdlws " src ="https://avatars.githubusercontent.com/u/117283698 "/> </ a > < a href ="https://github.com/ZhouTimeMachine " target ="_blank " title ="ZhouTimeMachine "> < img alt ="ZhouTimeMachine " src ="https://avatars.githubusercontent.com/u/99057383 "/> </ a > < a href ="https://github.com/HobbitQia " target ="_blank " title ="HobbitQia "> < img alt ="HobbitQia " src ="https://avatars.githubusercontent.com/u/89443407 "/> </ a > < a href ="https://github.com/zhouyangye1076 " target ="_blank " title ="zhouyangye1076 "> < img alt ="zhouyangye1076 " src ="https://avatars.githubusercontent.com/u/104267280 "/> </ a > </ span > </ p >
1210
1237
</ div >
1211
1238
< style >
1212
1239
.md-content .admonition : first-of-type {
0 commit comments