NKUCS.ICU icon indicating copy to clipboard operation
NKUCS.ICU copied to clipboard

COSC0025 并行程序设计

Open Emanual20 opened this issue 3 years ago • 8 comments

https://nkucs.icu/#/courses/grade-2/COSC0025

NKUCS,一个充满了「神仙」和「神仙」课程的专业,本网站旨在记录 NKUCS 的信息以及历届学生的评价

Emanual20 avatar Dec 02 '21 08:12 Emanual20

我认为该课程是比较 A Brief Introduction of Parallel Programming 的. 作为本科生, 各种层次的并行可以都尝试一下, 还是挺不错的.

ps. 据说研究生并行程序设计课程和本科生设置的内容没什么区别.

感受:

  • 难度 --- 一般

  • 收获 --- 较多(看个人)

  • 给分 --- 正常范围

  • 或许不满意的地方 --- 该课程可以自选题目, 这就产生了自选题目不同, 实现难度不同的情况. 或许有些同学会出现: "啊我这个代码很难写呀, 我也觉得自己做的项目非常有意义" 但是给分主要看书面报告的情况, 助教是不会实际运行一下你的代码的. (如果助教确实运行了的话算你纽币, 我道歉) 这就产生了可能的情况:

    • 第一种: 我的代码没法跑但编了个很好看的报告
    • 第二种: 我的代码很完备, 但只把能说服自己的结果放在了报告中, 结果报告很单薄

    你猜助教如果只看报告, 他怎么给分? 是不是可能有更好的办法评价?

用C/C++, 编写这种运行时间长达数分钟的软件, 很容易发生内存泄漏. 我在改课程中学会了使ps用"valgrind + gdb"方式捕捉多进程内存泄漏问题, 非常有意思(阴间).

yoko2001 avatar Dec 03 '21 13:12 yoko2001

上课时间:2021年春

授课教师:王刚老师

课程体会:

我坚持在大二下学期学完了这门课,但是现在看来,也许再晚一两年上更合适(当然不排除这课对我的锻炼也很重要)。刚开课时有一个关于最新并行体系结构的研究报告,这个作业我其实比较摸不着头脑,因为对体系结构的知识了解得很少。中期有一个开题报告,为自己的最终大作业选题,且为了减少最后的工作量,之后的每一次作业都鼓励在自己的应用场景下完成,我感觉选题最好是一些计算密集型的任务,像我这样当时啥也不了解选了个背包问题之后做起来是真的痛苦(体谅我比较菜)。每次实验我都需要花费很长的时间才能完成代码部分,然后再花费相当的时间完成latex的实验报告。回想起来,说这是我在该学期投入时间最长的课也不为过。不过我觉得如果前期深入思考了,可能不会像我这样做出来一堆阴性结果然后疯狂解释。 没有考试,给分的化,只能说真实地反映了我的能力相比于同期选课的同学或学长学姐,还有待提高吧。

从积极的角度看: 将学会共享式和分布式的一些编程技巧(具体实现用什么C/C++的库老师不在意),还能简单学习cuda,学习并行计算机集群的使用。

ashun989 avatar Dec 22 '21 09:12 ashun989

选课时间:2021Spring

  • 王刚老师上课讲的非常细致,如果想在知识上有收获,可以认真看课前预习的 PPT。
  • 本课程没有期末考试,对一个自选课题进行研究并撰写研究报告。
  • 本课程拥有丰富的实验环境和资源,包括华为云平台、金山云平台、英伟达 CUDA 在线平台、英特尔 oneAPI DPC++ 在线平台等。
  • 课程需要完成的任务(所有任务均需要提交报告)
    • 体系结构调研
    • 性能测试相关
    • SIMD 编程实验
    • Pthread 编程实验
    • OpenMP 编程实验
    • MPI 编程实验
    • GPU 及异构相关的实验(三选一)
      • 完成英伟达 CUDA 在线课程
      • 完成自选题目本地 CUDA 实验
      • 完成英特尔 oneAPI DPC++ 在线课程
    • 自选题目期中开题
    • 自选题目期末结题

个人评价(仅供参考):4.6/5

tinsir888 avatar Jan 14 '22 15:01 tinsir888

我没选,不过我看身边计科人写了整整一学期并行(可能一门课占用了50%的时间),直到六月底还没写完这九个实验。我只能说,不擅长时间管理or能力有限的信安同学慎选。 相当一部分人的代码根本不能跑,但是报告写的很长,里面的图画的很好看,这门课确实不一般,把大家都给锻炼出来了,挺有那方面特色的,学完这门课很可能对未来搞科研有帮助。助教就看报告,谁写得多画的好看。万幸反内卷斗士打算出手整治这个课,希望21级不会变成20级这样。

TephrocactusHC avatar Jun 23 '22 07:06 TephrocactusHC

选课时间:2023Spring 这门课在2023年的21级变成了必修课,而且好像并没有学长们提到的整治过程,助教仍然以报告为结果导向(也可能是在工作量上很难对每个程序都进行合理的验证吧)。

由于开始对上课和实际实验讲授课题相关性不大的刻板印象,没有太多去听课程,但后半学期听了一些确实有所收获,可能在学习知识上也有一些遗憾。

实验内容感觉比较超前,如果以结果为导向的话并不需要对程序进行正确性的验证,甚至可能不需要测出来的数据是合理的或者符合你自己的程序的。

和之前留言的大家提到的很类似——“我的代码很完备,但只把能说服自己的结果放在了报告中,结果报告很单薄”(cr:yoko2001)对于整体的分数是不利的,而这也是我对于这个课最大的怨念所在,如果要每个并行实验都做出准确且像样的结果的话,我认为这学期的其他课程就不要想着拿很好的分数了,这个课会耗费掉你大半的时间。

U0Ghost avatar Jun 18 '23 03:06 U0Ghost

上课时间:2023Spring 讲授内容:如课程题目所示。

成绩组成: 出勤(5%,后来改成10%) 作业——体系结构调研和编程(10%) 作业——期末作业开题报告(10%) 作业——SIMD编程(10%) 作业——多线程pthread&OpenMP编程(10%) 作业——MPI编程(10%) 作业——GPU编程(oneAPI或CUDA,10%) 作业——期末研究报告(30%) Open Topic(5%,后来改成额外加分)

听课还是能有不少收获的,但状态不好的话很容易困死。

课程没有考试,只用做平时作业和期末作业。

这门课的作业有点……一言难尽,反正到时候看到作业要求就知道了。。

个人的一点写作业心得(个人想法,未必完全适合于实际情况,仅供参考):

0、尽早定好选题,不要纠结,一条道走到黑就完事。

①latex肯定逃不过,有一本非常好的latex电子pdf教程(这本pdf本身也是latex写的), 其pdf开头标题为:一份(不太)简短的 LATEX 2ε 介绍 或 112 分钟了解 LATEX 2ε 很好用的资料,可以随查随用

②画图上,展示数据时,个人使用matlab。如果想要用自己画的示意图展示算法原理等等,个人使用的是Adobe illustrator(导出.eps)或者直接从网上找图。

③单个作业过程中,个人总结其有三道坎,依次为:写程序,测数据,瞎扯B。

对于写程序: 一是要设计好算法,熟悉串行算法和并行化策略,设计好并行任务划分方式,同步问题等等。 二是有余力要多设计和实现几种算法。比如实现不同的任务划分方式;优化程序编写的小细节,然后做一些对比分析。 三是要编写代码。如果感到细节问题纷繁复杂,那不妨先抱着彻底不考虑好坏的觉悟,先解决有无后解决好坏。 四是要在实验报告中给出算法设计,以及相应的分析。对于算法分析,定性地口胡口胡,或者再更细致地口胡也行。

对于测数据: 一是要想清楚:自变量是什么?因变量是什么?我测这个数据是为了什么?我最终真正能呈现出来并重点瞎扯的数据又能有多少? 二是熟悉测数据的方法。如果想测运行时间,建议用std::chrono(跨平台)。对于VTune工具的使用,会有相应的实验指导资料。上手之后其实都还好。 三是遇到重复性劳动时,可以想一些小办法以减少重复量,增加测试的便利程度。

对于瞎扯B: 测到数据后,就是对着数据瞎扯一通。 个人采取的瞎扯范式: 0、摆一张图。要清晰、明了、醒目,个人最常采用柱状图,图里有标题,xy坐标的标题(标题里含单位),图例等等。如果数据很少,采用表格也行,又有图又有表格也会显得不单调。 1、纯纯描述数据:解释图表含义,横纵坐标含义,数据含义,数据趋势等等(看图/看表说话)。 2、试着解释数据为什么会这样。如果数据和你的预期不符,那就想想可能是什么导致的。实在想不出来,那就硬想一个出来(玩原神太多导致的),然后加一个“可能是”“笔者猜测/笔者推测”之类,如果你甚至还有精力和手段,可以试着再去验证你的猜想,从而进一步扩充报告内容(无论验证结果是怎样的都可以写进去,如果你感觉报告内容似乎不够丰富而且篇幅还运允许的话)。 3、下结论。根据之前的东西,(试着)归纳一个什么结论之类的出来,或者写写自己的思考。 在语言组织上,如果高中学过,可以回忆回忆高中生物/化学里面实验题的答题语言。虽然不是同一个学科,但这种语言组织的思路真的让笔者梦回高中实验题(

很多时候,数据未必是如你预期的那样,可能有很多结果不大理想,想做出非常理想的结果是很困难的事。但是还是要好好珍惜自己已经测出来的数据,至少做得漂亮点,看着比较充实,让人知道你其实做了相当量的工作,不要当闷葫芦。毕竟人人都忙,批报告的也很忙。所以批改标准……嗯!懂的都懂,,

//以上均为个人瞎扯淡的观点,仅供参考,未必与实际情况完全相符

CH3COOL avatar Jul 09 '23 17:07 CH3COOL

选课时间

2024Spring

课程内容:

大体上同前几届,但是这届改成了1个OpenTopic

给分情况

作业间波动性大,总体给分很好,大致在85-95之间

出现问题

  • 这门课首当其冲的问题就是数据造假和抄袭现象非常严重,由于判分的标准完全依靠实验报告,而真正测试数据的时间又相当冗长,如果不作测试的严格要求(例如明确指明项目运行的方法和测试脚本运行的方法)或者无心对每个实验报告都进行严格的测试(我也当助教,助教也是人,这种事情会浪费助教相当多的时间,且不能百分之百的把造假和抄袭的给抓住),那么从体系结构编程到最后的大作业,一行代码不写,实验报告纯抄往年和csdn,甚至也能取得95+的分数(不知道存不存在这样一两个的漏网之鱼,纯抄完全能达到90+),这对于前段的学生是非常不能接受的,花了一整周时间从零开始编写代码,到数据范围的测试和大批量数据的处理,到最后的报告编写,比一晚上速抄csdn的分数低。

  • 助教的评分标准也是造成矛盾巨大的原因,各个助教的评分标准不一,助教间平均分差也极大,除了老师亲自批阅和部分助教的批阅外,很难得到信息反馈,与PA的区别可能只有总体给分很好,不存在抄袭就挂零(当然也跟报告页数实在是太多,区分不出抄袭有关)。

  • 另外,实验安排的时间也有待商榷,在期末考试前的两周,需要提交mpi实验报告,gpu实验报告和OpenTopic,且不会进行延期(好在是期末报告延期了),导致这种情况的原因是开学讲课速度较慢,导致4月前并没有开始真正的并行实验,或许可以适当缩减前两个实验的时间。

  • 总的来说,在这门课程上付出努力并不值当,虽然从零开始认真学习并行,的确能学到非常多的东西,外加王老师讲课很出色(当然上座率低的可怜),对于大三的编译和体系结构课程和未来的系统的相关优化比较有用。但作为一门必修课,这门课存在严重的公平性失衡,完全依赖实验报告进行打分使得这门课程付出与回报会完全不成正比,通过数据造假和直接抄袭完全能取得非常漂亮的成绩,而真材实料的学习这一课程会占据大二下这一学期一半的时间(另一半是计科的数据库oceandb和cmu15445),除了硬造自主选题并行优化的代码外,更占据时间的是实验报告编写的时间,往往报告写得好得分就能高,因此大多数都在想尽一切办法卷报告,导致浪费时间在代码编写和数据测试上显得无足轻重(这也是抄袭和造假现象严重的原因)。最理想的解决办法是学习计组创新性实验,固定几个选题,统一收缴串行和并行代码并测试时间,最后将并行测试时间和实验报告一同当作得分的标准,期望后几年能有所改革。

一些经验

如果重得分而轻知识,推荐把编写代码和测试的时间缩减,毕竟没人知道你的代码是不是正确的,数据是不是捏造的,而去多花时间让报告变得更漂亮一些,尤其是临近期末的几个实验更需要如此,将这部分时间花在期末复习上往往会让这学期的某些八股文科目有更充足的复习时间。而如果重知识而轻分数,推荐选择一些有创新性的算法,尤其重点学习多线程和多进程,这会是本学期为数不多的提升码力的机会(到大二下结束为止,得高分并不需要很强的码力),以应对大三上比较恐怖的几门实验课。

sodakkk avatar Jul 11 '24 16:07 sodakkk

上课时间:2024 春 授课老师:王刚老师 给分:不错(本人85+,身边统计学普遍85+,90+) 总体评价:性价比很低(就这门课的工作量即使给100性价比也很低,我认为其除非10学分并且给100分,性价比上才能算一门好课),所以不推荐非计科的同学选修。 分数构成:编程作业60 +课堂练习6(本学期直接给这6分)+主题调研4+期末研究报告30 上课签到:开学说会有签到,但实际无签到,实验课线上进行,不确定是否有签到。 上课内容:关于并行的一些相关知识,十分的晦涩和难以理解,个人认为没有学到有用的知识 作业: 编程作业:非常非常非常非常多,平均每两周需要抽半周完成作业(40h+),并且让人很怀疑并行是否是一种科学,在实验中出现了各种不科学的现象,服务器出现各种问题,以及认真完成不如编数据编报告的高,所以建议和光同尘。(或者闹一闹似乎有效果,虽然前期的分不会提高,但之后的分会给高) 主题调研:完成PPT,从优秀作业的标准来看,可能需要扩展尽量多的内容,不要局限在主题上。

1973315112 avatar Jul 12 '24 14:07 1973315112