HPCGame萌新历险记(?)
Day 0 (+240 pts) 比赛是上午11点开始的, 但主包上午有事, 拖到下午才看 集群使用 HPCGame无论是测试代码or运行, 显然都需要在机房的集群上, 因此主包遇到的第一个难题就是如何登陆平台。 平台使用一个叫k8n的东西管理, 选手可以在上面创建叫容器的东西, 容器类似电脑, 可以写&跑代码。不过运行程序时需要写启动脚本, 之后交给集群排队, 查看结果似乎也很麻烦, 等到用的时候再学吧。 这届HPC给主包这样的新手们准备了一个客户端, 一键配置k8n连接。主包试了一下, 发现需要自己先下载一个叫kubectl的东西, 下载时还需要换源。然后去HPC平台创建k8的config文件, 一键配置时粘贴进终端就行了。 修改了一下创建容器的指令模板, 报错了。把参数写详细之后又成功了, 奇怪。 成功创建第一个容器, 每个容器只能持续2h, 之后会被删除, 连同其中数据。不过主办方提供了根目录的文件夹/partition-data/, 可以实现持久化, 每个集群(机房?)的每个选手的所有容器共享一个文件夹 T0-quine程序 题目很有趣, 给了一段乱七八糟的程序, 让我们判断是什么语言并给出运行的结果 G老师回答是一种闻所未闻的语言, 不过程序很有趣: 它在不读取自身源文件的情况下得到与自身源代码相同的运行结果。 不过不知为何, 主包在本地的运行结果和源代码略有区别, 导致第一次WA, 第二次把源代码直接复制粘贴后AC了 T1-小北问答超速版 一堆关于HPC的填空/简答/多选题 边学边做, 内容有点多学不进去了, 先拿40分 T2-ticker 题目考察对"伪共享"(多个线程修改同一个cache line时被迫串行)的理解以及鲲鹏920的特质。 具体来说, 本题的结构体内含3个double加1个long long, 为32byte, 是一般x86平台cache line的大小的一半, 但在鲲鹏920, cache line的大小为其他平台的两倍, 导致每个cache line包含四个结构体, 被四个线程修改, 因此导致伪共享。 修改方法很简单: 在声明结构体时指定alignas(128)并通过加上long long padding[12]补足大小即可 可以看到速度提升了一倍 ...