AIRobot

AIRobot quick note


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

神威太湖之光基本操作

发表于 2018-11-16 更新于 2019-01-02 分类于 未分类
本文字数: 2.1k 阅读时长 ≈ 2 分钟

系统基本组成

系统总体架构

系统总体架构

国产计算系统架构与参数

系统架构与参数

神威基础众核编译软件

基础众核编译软件

神威MPI编译软件

MPI编译软件

商用计算系统主要参数

系统主要参数

商用计算系统编译软件

系统编译软件

作业管理

“神威·太湖之光”以下简称为“神威”

qload

用 qload 命令即可查询出节点对应的状态,也能查出节点队列的名称为q_sw_expr

“神威”系统提供两类计算资源:国产高速计算系统(申威26010异构众核)和商用辅助计算系统(Intel Xeon),因此计算资源分成两个资源队列:

  • 高速计算系统:q_sw_xxxx,系统缺省队列:q_sw_expr

  • 辅助计算系统:q_x86_xxxx,系统确幸队列:q_x86_expr
    队列资源限制条件:

  • 每个任务的并行规模不能超过64

  • 每个任务的计算墙钟时间不能超过1小时
    资源队列
    国产计算系统举例:

    1
    bsub -I -b -q q_sw_expr -host_stack 1024 -share_size 6500 -n 128 -np 4 -cgsp 1 ./wrf.exe 2>&1

-q选项为要提交的队列名称,可根据qload查询出的可用队列名称更改; -n为进程数; -np为每个节点启用的核组书; -csgp为每个核组启用的从核个数。

商用计算系统举例:

1
bsub -I -q q_x86_expr -n 4 ./example

:)详细参数说明查文档

  • -h 显示帮助信息
  • -I 提交交互式作业,使作业输出在作业提交窗口,无该选项时为批式作业 -q 向指定的队列中提交作业,必选项
  • -p 在作业输出中打印作业分配的节点列表及位图
  • -exclu | -shared | -cpuexclu 指定使用 CG 独占/CG 共享/CPU 独占模式
  • -n 指定需要的所有主核数
  • -N 指定需要的节点个数
  • -np 指定每节点内使用的主核数
  • -cgsp 指定每个 CG 内需要的从核个数,指定时该参数必须<=64。
  • -asy 指定使用非对称资源,表示各个 CG 内使用的从核的个数可以不同
  • -js 指定作业对应的课题代号
  • -lfs_proj 指定作业使用的局部文件代号
  • -node 指定运行作业的节点(CG 列表)
  • -cross 要求分配全片 CPU(4CG 的 CPU)
  • -health 指定分配资源的健康度级别
  • -o 将作业的 stdout 和 stderr 的输出定向到指定文件,可选项指定每个 switch 中分配的节点数
  • -switchnode 指定每个 switch 中分配的节点数
  • -midnode 指定每个 中板 中分配的节点数
  • -cabnode 指定每个 机舱 中分配的节点数
  • -b 指定从核栈位于局存
  • -share_size 指定核组共享空间大小 -priv_size 指定每个核上私有空间大小
  • -cross_size 指定交叉段大小
  • -ro_size 指定只读空间大小
  • -m value 提供从核自陷模式的控制,指定-m 2时,将浮点控制状态寄存器 fpcr的最后两位设为01,允许除不精确结果之外的所有浮点算术异常自陷, 相当于编译器使用-OPT:IEEE_arith=2选项;指定-m 1时,将fcpr最后两位设 为00,允许所有浮点算术异常自陷,相当于编译器使用-OPT:IEEE_arith=1 选项;其他所有值将不对默认的fpcr进行修改。
  • -pe_stack 指定从核栈空间大小,默认为64K
  • -host_stack 指定主核栈空间大小,默认为 8M

注意事项

  • -I参数与-o参数通常不建议放在一起使用。因为使用-o参数就无法在屏幕输出上看见程序的打印

  • 每道作业提交成功后,都会有一个jobid,这是本作业区别其他作业的唯一特征。

  • 本命令的各种参数都需要在用户程序之前

  • 用户必须在PSN节点上使用

    bjobs作业查询

    用bjobs命令即可查询出当前作业的状态,包括作业号、使用状态、使用者、作业名称、队列名称、运行时间等。

  • -q 指定要查询的队列

  • -l 长格式显示作业详细信息

  • -w 全长度显示,当列值的长度超过列宽时,不按列宽进行截取

  • -a 显示一段时间内的所有作业

  • -u 显示指定用户的作业,all 是特殊的关键字,可显示所有用户的作业信息

  • -d 显示最近正常完成的作业

  • -e 显示最近异常退出的作业

  • -p 显示处于 pend 状态的作业

  • -r 显示正在运行的作业jobid 作业id号
    1)-u 参数只面向管理员开放

2)普通用户只能查看属于本用户的作业的信息

3)对于处于调度状态(pend)的作业,如果作业长时间处理pend状态,可以用bjobs –l jobid 来查看作业不能调度运行的原因。

4)用户在 SN 上使用。

bkill作业终止

  • -h 帮助信息
  • -u 操作指定用户提交的作业
  • -q 操作指定队列内的作业
  • -J 操作指定作业名称的作业
  • -f 当终止批量作业时不需要确认jobId表示作业id标识符

说明:当jobId指定时,忽略-u –q选项

帧差法侦测运动目标

发表于 2018-11-16 更新于 2019-01-02 分类于 未分类
本文字数: 5k 阅读时长 ≈ 5 分钟
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include<iostream>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;

const unsigned char FORE_GROUD = 255;
int thresh = 30;
int maxArea = 100;
int times = 100;

Point getCenterPoint(Rect rect)
{
Point cpt;
cpt.x = rect.x + cvRound(rect.width/2.0);
cpt.y = rect.y + cvRound(rect.height/2.0);
return cpt;
}

int main(int argc,char*argv[])
{

VideoCapture video(0);

//判断如果video是否可以打开
if(!video.isOpened())
return -1;
cout<<"Opened"<<endl;

//用于保存当前帧的图片
Mat currentBGRFrame;

//用来保存上一帧和当前帧的灰度图片
Mat previousSecondGrayFrame;
Mat previousFirstGrayFrame;
Mat currentGaryFrame;

//保存两次的帧差
Mat previousFrameDifference;//previousFrameFirst - previousFrameSecond的差分
Mat currentFrameDifference;//currentFrame - previousFrameFirst;

//用来保存帧差的绝对值
Mat absFrameDifferece;

//用来显示前景
Mat previousSegmentation;
Mat currentSegmentation;
Mat segmentation;


//显示前景
namedWindow("segmentation",1);
createTrackbar("阈值:","segmentation",&thresh,FORE_GROUD,NULL);
createTrackbar("面积:","segmentation",&maxArea,FORE_GROUD,NULL);

//帧数
int numberFrame = 0;

//形态学处理用到的算子
Mat morphologyKernel = getStructuringElement(MORPH_RECT,Size(3,3),Point(-1,-1));

for(;;)
{
//读取当前帧
video >> currentBGRFrame;

//判断当前帧是否存在
if(!currentBGRFrame.data)
continue;

numberFrame++;
//颜色空间的转换
cvtColor(currentBGRFrame,currentGaryFrame,COLOR_BGR2GRAY);

if( numberFrame == 1)
{
//保存当前帧的灰度图
previousSecondGrayFrame = currentGaryFrame.clone();

//显示视频
imshow("video",currentBGRFrame);
continue;
}
else if( numberFrame == 2)
{
//保存当前帧的灰度图
previousFirstGrayFrame = currentGaryFrame.clone();

//previousFirst - previousSecond
subtract(previousFirstGrayFrame,previousSecondGrayFrame,previousFrameDifference,Mat(),CV_16SC1);

//取绝对值
absFrameDifferece = abs(previousFrameDifference);

//位深的改变
absFrameDifferece.convertTo(absFrameDifferece,CV_8UC1,1,0);

//阈值处理
threshold(absFrameDifferece,previousSegmentation,double(thresh),double(FORE_GROUD),THRESH_BINARY);

//显示视频
imshow("video",currentBGRFrame);
continue;
}

else
{
//src1-src2
//subtract(currentGaryFrame,previousFirstGrayFrame,currentFrameDifference,Mat(),CV_16SC1);

//取绝对值
//absFrameDifferece = abs(currentFrameDifference);
absdiff(currentGaryFrame,previousFirstGrayFrame,absFrameDifferece);

//位深的改变
absFrameDifferece.convertTo(absFrameDifferece,CV_8UC1,1,0);

//阈值处理
threshold(absFrameDifferece,currentSegmentation,double(thresh),double(FORE_GROUD),THRESH_BINARY);

//与运算
bitwise_and(previousSegmentation,currentSegmentation,segmentation);

//中值滤波
medianBlur(segmentation,segmentation,3);

//形态学处理(开闭运算)
//morphologyEx(segmentation,segmentation,MORPH_OPEN,morphologyKernel,Point(-1,-1),1,BORDER_REPLICATE);
morphologyEx(segmentation,segmentation,MORPH_CLOSE,morphologyKernel,Point(-1,-1),2,BORDER_REPLICATE);


//找边界
vector< vector<Point> > contours;
vector<Vec4i> hierarchy;
//复制segmentation
Mat tempSegmentation = segmentation.clone();
findContours( segmentation, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );//CV_RETR_TREE
vector< vector<Point> > contours_poly( contours.size() );

/*存储运动物体*/
Rect rect = Rect(0,0,0,0);
vector<Rect> boundRect;
boundRect.clear();

//画出运动物体
for(unsigned int index = 0;index < contours.size() ;index++)
{
approxPolyDP( Mat(contours[index]), contours_poly[index], 3, true );
Rect tmprect = boundingRect( Mat(contours_poly[index]) );
//cout<<getCenterPoint(rect)<<endl;
int currentArea = tmprect.area();
if( currentArea >= rect.area() && currentArea >= maxArea*times )
rect = tmprect;
}
rectangle(currentBGRFrame,rect,Scalar(0,255,255),2);

//显示视频
imshow("video",currentBGRFrame);

//前景检测
imshow("segmentation",segmentation);

//保存当前帧的灰度图
previousFirstGrayFrame = currentGaryFrame.clone();

//保存当前的前景检测
previousSegmentation = currentSegmentation.clone();
}

if(waitKey(33) == 'q')
break;

}
return 0;
}

Hello World on Sunway TaihuLight

发表于 2018-11-16 更新于 2019-01-02 分类于 未分类
本文字数: 1.2k 阅读时长 ≈ 1 分钟

前言

“Hello World”作为经典的编程入门程序,多数学习新编程语言的人都会用新编程语言输出”Hello World”。现在,我要在神威·太湖之光上用C语言编写运行这个经典程序。

阅读全文 »

神威·太湖之光众核基础编译系统

发表于 2018-11-16 更新于 2019-01-02 分类于 未分类
本文字数: 87 阅读时长 ≈ 1 分钟

提纲

  1. 概述
  2. 基础编译器快速入门
  3. Fortran编译器
  4. C/C++编译器
  5. 加速线程库
  6. 加载器
  7. 优化快速入门
  8. 优化选项
  9. 使用SIMD扩展编程
  10. 调试与典型问题解决方法
    阅读全文 »

神威·太湖之光

发表于 2018-11-12 更新于 2019-01-02 分类于 未分类
本文字数: 1.7k 阅读时长 ≈ 2 分钟

神威·太湖之光

1. 系统简介

“神威·太湖之光”计算机系统是由国家并行计算机工程技术研究中心在国家863计划支持下研制的新一代超级计算机系统。根据 2016年6月20日国际 TOP500 排名公布的最新数据,全系统峰值运算速度为每秒12.54亿亿次,持续运算速度为每秒9.3亿亿次,均位居世界第一。性能功耗比每瓦60.5亿次,与其他相同量级计算机相比节能60%以上。“神威·太湖之光”是世界上首台峰值运算性能超过十亿亿次量级的超级计算机,也是我国第一台全部采用国产处理器构建的世界第一的超级计算机。

阅读全文 »
1…2526
AIRobot

AIRobot

AIRobot quick note
130 日志
15 分类
23 标签
GitHub E-Mail
Creative Commons
0%
© 2023 AIRobot | 716k | 10:51