如果找到了对您有用的资料,烦请点击右手边的Google广告支持我继续共享知识,谢谢! http://dengpeng.spaces.live.com/

2007年5月15日星期二

Grid Resources Brokers

/* Keywords: Grid, Grid middle ware, Globus Toolkit, Gridway, Gridbus, Gridbus Broker, Nimrod/G, Grid Resource Broker */

Grid Resources Brokers Term Paper

I reserve all rights for this document. Cite it and email me for permission before use. Thank you for your co-operation :)

My email is dengpeng dot cn (at) gmail dot com.

2007年5月13日星期日

悠悠锦官城——记成都

日期:2005-11-29/ 来源:校报第14期 第4版

    写下“成都”这两个字的时候,感动的滋味突然在心里无可抑制地蔓延开来。我所生长的地方,是一个弥漫着氤氲水气的城市,带着南方特有的纤巧和精致。

    成都确是被水萦绕着的城市。它的水不仅是自然的,更是历史与意志的。这水好似它的灵魂,若没了它,便失了那灵气。整座城市都浸在淡淡的、湿润的雾气中,记忆里的那些薄雾好像也带着一抹暗绿。薄雾如纱、天色沉沉,在暗绿色的湿润空气中,成都竟让人疑惑身处江南。

    府南河和春熙路,是成都的两大标志。前者承载着厚重的历史,荡漾着悠远的古风,仿佛依稀可见昔日浣纱溪畔的万种风情;后者则是这个城市都市味道最浓郁的一面,流光溢彩,熙来攘往,红粉如云。漫步在号称西南第一步行街的成都春熙路上,仿佛走在时尚的前沿。街上的行人神色从容,满目都是小巧精致,有着润泽、粉白肌肤的娇俏女子,衣着入时,手上拿着串串香,迈着轻盈的步子,边吃边走、旁若无人,让人目不暇接。成都盛产“红粉”,女孩子娇俏可爱、古灵精怪,但辣妹子火爆的脾气却也是不好消受的。

    成都的美食可谓一绝。夜晚街边的“鬼饮食”让清理违章占道的部门十分头疼,却也形成了一道别样的风景。几十桌上百桌地沿街边铺展开来,其阵容十分壮观。这里的食客是不能按社会阶层划分的,沿街停着奔驰、宝马,也有夏利、奥托,更多的是自行车。这种场景在其他城市很难目睹。在成都浓酽且平和的市井空间里,所谓阶层之间的差距,在一定的场合和特定的时刻,是很容易被模糊的。夜幕下的成都别具一番风情。灯火辉煌、人流如织,人们似乎才从白日的慵懒中苏醒,开始丰富多彩的夜生活。这座不夜城展示出它激情四溢的一面。

    成都人的生活就像杯青花磁茶碗装的盖碗茶,不张不扬,不温不火,不疾不徐,喜怒哀乐随袅袅茶香慢慢蒸发。都说成都人活的悠闲,这主要取决于一种平和笃定、安之若泰的心境。也许正是成都天气的温和湿润,造就了这个奇妙的城市。闲散,安适,滋润,唯美,微微颓废,一切都恰到好处。作个比喻,成都,一块玉!
(信管系  02B11班 左冰洁

摘自大连东软学院校园文学

2007年5月11日星期五

Term Paper: Processing High Volumes of Streaming Data 巨量数据流处理

/* keywords: Data Stream, Continuous Query Language, Data Stream Management System, 数据流, 连续查询语言, 数据流管理系统 */

433-654 Sensor Networks and Applications论文演讲幻灯片和论文。

Presentation slide:

Processing High Volumes of Streaming Data

巨量数据流处理

Term paper:

Processing High Volumes of Streaming Data (Google Document)

Processing High Volumes of Streaming Data (PDF)

2007年5月3日星期四

Opensource: Parallel Matrix Multiply

Requirements are here: http://www.cs.mu.oz.au/678/assignment2.html or http://www.csse.unimelb.edu.au/678/assignment2.html

 

/*
Name: 433-678 Cluster and Grid Computing
Student Number: 263497
Author: Peng Deng
Login Name: pdeng
Date: 18-04-07 07:50
*/

#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int Number_Of_Nodes, My_Rank, Source=0;

int Number_of_Elements = 0 ;
int Number_of_Rows = 0;
int Remainder;
int Remaind_Elements;

int i, j, k;

double StartTime, EndTime;

char Processor_Name[MPI_MAX_PROCESSOR_NAME];
int NameLength;

int * matrixA; //pointer to matrix A
int * matrixB; //pointer to matrix B
int * matrixC; //pointer to matrix C
int * matrixTemp;
int * matrixTempResult;

int * Data_Counts;
int * Data_Displs;

int size;
size=atoi(argv[1]); // The first argument of the program receives the size of matrices
/* NOTE: The MPICH NT 1.2.5 implementation is different from Linux distributation.*/
/* ONLY Rank = 0 can get the values from command line arguments in Linux distributation. But in mpich nt, every node has this value */

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &Number_Of_Nodes);
MPI_Comm_rank(MPI_COMM_WORLD, &My_Rank);
MPI_Get_processor_name(Processor_Name,&NameLength);

MPI_Bcast (&size, 1,MPI_INTEGER,Source,MPI_COMM_WORLD); // In The MPICH NT 1.2.5, this line is not necessary

matrixA = (int *) malloc(size * size * sizeof(int)); // this matrix will be scatter to every nodes
matrixB = (int *) malloc(size * size * sizeof(int)); // This matrix will be broadcast to every nodes
matrixC = (int *) malloc(size * size * sizeof(int)); // this matrix will be gather to My_Rank==0 from every nodes

Data_Counts = (int *) malloc(Number_Of_Nodes * sizeof(int)); //int array. Every element in this array contains a value describe how many elements per node.
Data_Displs = (int *) malloc(Number_Of_Nodes * sizeof(int)); //int array. Every element in this array contains a value describe the offset related to matrixA

if(My_Rank == 0)
{
/* fill random number into matrix */
for (k=0; k<size*size; k++)
{
matrixA[k]=rand()/1000;
matrixB[k]=rand()/1000;
}
}

/* check the size and number of nodes in MPI_COMM_WORLD */
if(size % Number_Of_Nodes ==0)
{
Number_of_Rows = size / Number_Of_Nodes; // How many rows per node
Number_of_Elements = size * Number_of_Rows; // Length multiply width. How many elements per node
matrixTemp = (int *) malloc(Number_of_Elements * sizeof(int)); //Store elements in temp array from matrix A
matrixTempResult = (int *) malloc(Number_of_Elements * sizeof(int)); //Store result to temp array

for(i=0; i<Number_Of_Nodes; i++)
{
Data_Counts[i]=Number_of_Elements; // How many elements in the i node
Data_Displs[i]=i * Number_of_Elements; // The start offset of data which will be send to node i related to matrixA(send buffer)
}
}else{
/* Last node takes all remain rows */
/*
Number_of_Rows = size / Number_Of_Nodes; // How many rows per node on average. For example, 8/3=2; 5/2=2; ......
Number_of_Elements = size * Number_of_Rows; // Length multiply width. How many elements per node on average
Remainder = size % Number_Of_Nodes; // How many rows remains. For example, 8%3=2; 5%2=1; ......
Remaind_Elements = size * Remainder; // How many elements remains
matrixTemp = (int *) malloc((Number_of_Elements + Remaind_Elements)* sizeof(int)); //Store elements from matrix A
matrixTempResult = (int *) malloc((Number_of_Elements + Remaind_Elements)* sizeof(int)); //Store result to temp array
for(j=0; j<Number_Of_Nodes-1; j++) // Fill properties of Number_Of_Nodes-1 nodes into int array.
{
Data_Counts[j]=Number_of_Elements; // How many elements in j node, j starts from 0 to Number_Of_Nodes-1. The last node is reserved.
Data_Displs[j]=j * Number_of_Elements; // The start offset of data which will be send to node i related to matrixA(send buffer)
}
//Deal with The last node
Data_Counts[Number_Of_Nodes-1]=Remaind_Elements + Number_of_Elements; // The last node take more workload to do -- Remaind_Elements
Data_Displs[Number_Of_Nodes-1]=(Number_Of_Nodes-1) * Number_of_Elements;
*/


/* The difference number of rows to process on every node is restrict to 1 */
Number_of_Rows = size / Number_Of_Nodes; // How many rows per node on average. For example, 8/3=2; 5/2=2; ......
Number_of_Elements = size * Number_of_Rows; // Length multiply width. How many elements per node on average

Remainder = size % Number_Of_Nodes; // How many rows remains. For example, 8%3=2; 5%2=1; ......
Remaind_Elements = size * Remainder; // How many elements remains

matrixTemp = (int *) malloc((Number_of_Elements + size)* sizeof(int)); //Store elements from matrix A
matrixTempResult = (int *) malloc((Number_of_Elements + size)* sizeof(int)); //Store result to temp array

for(j=0; j<Remainder; j++) // Fill properties of first Number_Of_Nodes nodes into int array.
{
Data_Counts[j]=Number_of_Elements + size; // How many elements in j node, j starts from 0 to Remainder. Every node takes one more row from Remainder.
Data_Displs[j]=j * (Number_of_Elements + size); // The start offset of data which will be send to node i related to matrixA(send buffer)
}

for(i=Remainder; i<Number_Of_Nodes; i++) // Fill properties of latter nodes into int array.
{
Data_Counts[i]=Number_of_Elements; // How many elements in i node, i starts from Remainder to Number_Of_Nodes. These nodes take one less row compare to previous nodes.
Data_Displs[i]=Remainder * (Number_of_Elements + size) + (i - Remainder) * Number_of_Elements; // The start offset of data which will be send to node i related to matrixA(send buffer)
}
}

MPI_Barrier(MPI_COMM_WORLD); // Wait untill all nodes reach this point

StartTime=MPI_Wtime(); // Start time recorded

/* Broadcast matrix B */
MPI_Bcast (matrixB, size*size,MPI_INTEGER,Source,MPI_COMM_WORLD);

/* Scatter matrixA to nodes */
MPI_Scatterv(matrixA, Data_Counts, Data_Displs, MPI_INTEGER, matrixTemp, Data_Counts[My_Rank], MPI_INTEGER, Source, MPI_COMM_WORLD);

/* Do computation matrixTempResult = matrixTemp * matrixB */
for(i=0; i<Data_Counts[My_Rank]/size; i++)
{
for(j=0; j<size; j++)
{
matrixTempResult[size*i+j]=0;
for(k=0; k<size; k++)
{
matrixTempResult[size*i+j] += matrixTemp[i*size+k] * matrixB[k*size+j];
}
}
}
/* Gather matrixTempResult from all nodes to matrixC on source node */
MPI_Gatherv(matrixTempResult, Data_Counts[My_Rank], MPI_INTEGER, matrixC, Data_Counts, Data_Displs, MPI_INTEGER, Source, MPI_COMM_WORLD);

EndTime=MPI_Wtime(); // End time recorded

if(My_Rank==0){
printf("Time: %f\n",EndTime-StartTime); // Print out th time used in the communication and computation
}

/* Free the memory allocations */
free(matrixA);
free(matrixB);
free(matrixC);

MPI_Finalize();
return 0;
}

Resume

Paul Peng DENG (Mr.)                                      Mobile: 04028?????
?????, ?????, Australia                    ????????@????????????

EDUCATION
Master of Engineering in Distributed Computing, University of Melbourne, 2006 – present
Bachelor of Software Engineering, Southwest Petroleum University, 2002 - 2006

HONORS AND AWARDS
3rd Prize “Challenge Cup” National College Science and Technology Competition, China, 2005
ConocoPhillips (China) Scholarship, Southwest Petroleum University, 2004

EXPERIENCE
Sensing Ubiquity Mobility (SUM) Lab Intern, University of Melbourne, 2007 – present

RESEARCH INTERESTS
Wireless Sensor Networks; Human-Computer Interaction; Radio-frequency identification (RFID); High performance cluster and Grid computing; Web application

PROJECTS
Wireless Sensor Network Environmental Monitor: Use WSN to monitor temperature, light changes in physical world. (Sun Small Programmable Object Technology) SUM Research Lab, 2007
Sun SPOT Mouse: Use 3D accelerometer chip in sensor to get human gesture data and emulates mouse actions. SUM Research Lab, 2007
FeedEx RSS Reader: A speech enabled C# RSS Reader. It works like a radio which only speaks news contains keywords defined by you and it also can compress news contents to MP3 files. 2006
Digital Pen: A small pen like device that can record all vector movements while people writing or drawing on any surface and translates recorded data to text or vector image. 2005

SKILLS
Language: Chinese (Native speaker), English
SRA and Documentation: UML, Visio, Rational Rose, LaTex, MS Office, Adobe Acorbat
Implementation: Java, C#, SQL, PHP, Python, C; J2ME, .Net, J2EE, LAMP, MPI, OpenMP; HTML, Ajax, Swing, SWT, WPF; Network Socket, CORBA, RPC, RMI, Web Service, REST; ADO.Net, JDBC, ODBC, ADO; XML, MS SQL 2005/2000, MS Access, Mysql, Oracle 10g, PostgreSQL; Apache Tomcat, Apache Axis, IIS; Windows Server System, Linux/Unix; CVS, SVN
Testing: Mercury WinRunner, Apache JMeter
Build and Installation: Apache Ant, InstallSheild, Nullsoft Scriptable Install System

ACTIVITIES
Lecturer, Introduction to SPOT, Mobile Computing Systems Programming, 8 Aug. 2007
Grid Demo Volunteer, Open Day 2006 at University of Melbourne, 26 Aug. 2006
Founder of Student Photographers’ Task Group, Southwest Petroleum University, 2003-2006
Organizer, Microsoft (China) Presentations in University, Southwest Petroleum University, 2004