0%

这个样例代码是$$的一键搭建脚本,老朽常年懒得看代码,唯独对这个又臭又长的神必脚本有点好奇(这里面可是有一千多行呢)

控制台下的颜色

颜色定义

1
2
3
4
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
plain='\033[0m'

使用方法

1
echo -e "[${red}Error${plain}] This script must be run as root!"

记得把颜色切换回来啊

判断是否为ROOT用户执行脚本

if的简略写法

1
[[ $EUID -ne 0 ]] && echo -e "[${red}Error${plain}] This script must be run as root!" && exit 1
阅读全文 »

总体来说,如果希望体验一下不同的教学方式,Make Good Product Great Again (以下简称为Product)这个Topic是可以参加体验的。但是如果希望像传统课程一样,想确保自己能学到计算机知识,就不是特别推荐这门课了。

先从教学方式说起。Product的上课方式并不是我们这种短期交流学生“独享”的。其实NUS Soc在Summer Special Term里的给自己的学生开的部分课程也采用了这种教学方式,即教授给定一个方向,让学生想做什么东西就做什么东西,教授给予指导意见让学生对自己作品进行修改,而不是照本宣科。最后给分的方式取决于某种标准,如东西的创新性或者实用性。简单的堆砌技术并不能保证能让你拿高分。

在Product这Topic中,教授让我们制作一个具有优秀User Experience (简称UX)的手机App,或者说是产品。起初介绍了UX的一些知识,评论了一些产品UX方面的优缺点,然后就放手让我们自由发挥了。我们需要做的是,确定自己要做什么App,先做个Prototype,接着做个Pre,教授和学生给出建议,然后修改Prototype,再做Pre,如此循环几次。然后再用编程做出自己的App,最后Final Showcase上展示。

教授建议我们使用Adobe Xd或是PowerPoint进行Prototype的设计,以及使用Node.JS编写后端。以上内容全部自学,当然要如果使用别的工具来展示自己的创意都是可以的。

其实问题就来了,前几次Prototype的迭代花掉了不少的时间,然后所有的用到的技术都要自学,所以显而易见,App是做不完的。最终Showcase上很多人是直接展示自己的Prototype(也就相当于能操作的PPT),或者展示完成度很低的App。

对于我来说,最困难的一点反而不涉及计算机知识那部分(因为我们组放弃了编程),而是在于,我们要做个什么App的问题上。最初的问题表现在,缺idea,这个情况其实很常见,毕竟好的idea大多数已经有现成的产品了。接着我们确定了idea,找到了日常生活中的一个痛点,但是在痛点的解决方案上我们组里面产生了严重的分歧。由于组内大多数人缺乏产品的设计经验,同时对自己能力的把握不足,以及思考方式不够成熟,考虑事情不充分,最初的几个产品方案有新手常见的几个毛病:在假想的应用场景下去想象用户可能碰到的问题,然后胡乱的给产品添加功能,导致主要功能跑偏; 想做一个包罗一切的大平台却又只能拿出嘴上可行的实现方案; 不能明确自己要解决什么问题; 要解决的问题实际上不存在等等毛病。(以上毛病在我过去参加创新大赛的时候多少都存在。)所以我消耗了大量的时间精力去劝说和阻止他们继续跳坑,也导致了整个组前期根本不在状态上。

或许这种踩坑经验才是老师希望我们获得的东西,毕竟这种经验没踩过都不知道,光靠课本和别人口述也没啥用,因为我们的其他组员也是知道要避免什么,但越想避免什么,什么就发生了。

所以总的来说,这是一门想传授给你课本不能传授,只能在实践中学到的知识的一门课程。当然我还期待着能学学前后端,想看看是不是有如相声般精彩又蕴含着维基百科级的信息量的Lecture,并以此衡量我们系饱受批评的教学质量是否有如传闻中那么不堪。很遗憾,这个愿望只能留给下一次的交流活动了。

另外NUS的建筑物真的是比我们像得罪了设计师一样的建筑美观太多。

阅读全文 »

1. GPU Hackathon 介绍

据NVIDIA的员工说,GPU Hackathon 最早是美国橡树岭国家实验室发起的,因为在近些年,GPU的架构非常适合执行并行计算,GPGPU的概念流行后,显卡的GPU可以支持大规模的并行计算,并行计算的速度远超CPU,所以当时的橡树岭在他们的超算平台上配置了不少的GPU。但是如果想用GPU加速计算的话,就需要修改自己的程序,使得程序能够运行在GPU上,然而在当时编写GPU加速代码的门槛比较高,很少的程序能够充分利用GPU的性能,所以橡树岭希望举办一些活动推广GPU计算的技术。后来NVIDIA作为一个GPU厂商,自然也希望更多的用户学会使用GPU,这样他们就能卖出更多的显卡。

这个活动的流程是这样的,每一支队伍拿出自己原先运行在CPU上的程序,然后在为期5天的活动中,NVIDIA会为每一支队伍安排两名导师,在导师的指导下我们修改自己的代码。此外,每一天每个组都要做一个简单的报告,介绍自己的进展,瓶颈,和下一步的工作。最后,会有一场大型的报告,各组总结自己的工作,并汇报所取得的加速效果。

2. 活动前的准备

GPU Hackathon建议我们提前两周,团队就要开始进行一些初步的工作。然而,我因为假期参加了NUS Summer Workshop,活动开始前两天我才回到了学校。

我们组实际上被划分为两个小组,每个小组会负责一份代码的优化,另一个组的成员全部是我们学校力学与航空航天系的一位教授的课题组的研究生和研究助理,而我们组都是对并行计算感兴趣的本科生,我们要优化的代码也是他们课题组提供的。

活动开始前几天的晚上,我去到他们的课题组,大家简单的介绍了一下自己,接着他们打包了一份原始代码让我先看看。他们的代码都是用Fortran写的,我一开始觉得我学过不少现代的高级编程语言,看懂这古老的高级编程语言应该不是什么困难的事,然而后来活动开始后,事情越来越不妙了。

3. 困难和坑

踩坑可以说是第一天就开始踩,不过对于这点我还是有所心理准备的,只不过我没有预计到之后我天天踩而已。

Day 1-2

阅读全文 »

Example 1: MPI-Athread Clang

master.c:

定义计算规模

1
2
#define J 64
#define I 1000

声明从核函数

1
extern SLAVE_FUN(func)();

这一句对应slave.c中的

1
void func() {...}

创建数组

1
2
3
double a[J][I], b[J][I], c[J][I], cc[J][I];
double check[J];
unsigned long counter[J];

因为这个程序运行在主核上,声明变量无修饰,故该数组实际存放在用户共享连续空间中更多信息

阅读全文 »

内存子系统

0. 推荐阅读

Sunway-Taihu-Optimization

Athread

1. 神威太湖之光简介

  • 每个节点有2片SW26010处理器
  • 每片SW26010有4个CGs(核组, Core-Groups)
  • 每个CG有1个MPE(主核, 运算控制核心, Management Processing Element)
  • 每个CG有8x8=64个CPEs(从核, 运算核心, Computing Processing Elements)

讲道理这SW26010确实像把4片PS3上的IBM Cell处理器用胶水糊在了一起

2. Cache

主核存储系统:

存储器 容量
L1 Cache 指令32KB 数据32KB
L2 Cache 512KB
阅读全文 »

ESXi 镜像添加网卡驱动程序

参考文章

1. 安装PowerCLI

下面的Powershell命令可以直接安装最新版PowerCLI

1
PS> Install-Module -Name VMware.PowerCLI

2. 下载ESXi驱动包

下载链接

在List of EXSi packages中寻找自己网卡的驱动,我的网卡是Realtek 8168系列的,故下载包net55-r8168

3. 下载VMware vSphere Hypervisor (ESXi) Offline Bundle

官方下载链接

阅读全文 »

Ubuntu 手动释放获取IP地址

参考文章

不知道电脑搞什么飞机,电脑开机不会获取IPv6地址,导致无法连入IPv6网络。

释放IPv4地址

1
dhclient -4 -r eth0 //或 dhclient -r eth0

获取IPv4地址

1
dhclient -4 eth0 //或 dhclient eth0

释放IPv6地址

1
dhclient -6 -r eth0

获取IPv6地址

1
dhclient -6 eth0

直接获取IPv6地址即可解决我的问题

阅读全文 »

Docker 自启动

Debian系的系统下

1
# service docker start

Docker Container 自启动

Container Restart Policy

–restart的可选参数:

  1. no (默认值) Container退出时不重启
  2. on-failure[:max-retries] exit code非0时重启
  3. always
  4. unless-stopped

未创建Container时

1
# docker run --restart=always

已创建Container时

阅读全文 »