You are on page 1of 7

TRNG I HC QUY NHN

KHOA CNG NGH THNG TIN

-------

-------

Xy dng chng trnh MPI s dng


th vin OpenGL

Gio vin hng dn : Nguyn Tn Khi


H v tn hc vin

: 1. Bi Cng Phc
2. Dng Huy Trung
3. Nguyn Hu Duy

Lp

: Cao hc Khoa hc my tnh K15

Bnh nh, thng 8 nm 2013

Phn I: Tm tt cc bc thc hin


1.1 Chun b
1. My o Linux ci sn h iu hnh v h thng GridComputing, a ch IP
192.168.1.12.
2. Gi th vin ha OpenGL
3. Source ca chng trnh MPI s dng th vin ha OpenGL: mpiGL.c
4. Chng trnh SecureCRT.exe dng kt ni n my o GridComputing.
1.2

Cc thao tc thc hin


1. Chy my o GridComputing, thit lp IP thng mng t my tht vi my
o.
2. Copy m ngun chng trnh vo th mc home/public/mpiSource ca my o
GridComputing.
3. Ci t th vin ha OpenGL vo my o Linux.
Dng lnh sau ci t th vin OpenGL:
# sudo apt-get install freeglut3-dev

Khi ci t xong, c 3 file trong th mc GL l:


/GL/glut.h
/GL/glu.h
/GL/gl.h
4. T my tnh tht ang dng, chy chng trnh SecureCRT.exe, k t n i n
my o GridComputing tn l bk12

a ch 192.168.1.12 vi ti khon

glubus11, pass:123456.

Kt ni ti my bk12

Nhp tn User v mt khu


5. Sau khi kt ni thnh cng, ta thc hin cc lnh khi to, bin dch v thc
thi chng trnh.

Giao din chng trnh SecureCRT

Phn II: Xy dng chng trnh MPI v hnh s dng th vin ha


OpenGL
Chng trnh ta xy dng y l mt chng trnh song song s dng th
vin MPI, v th vin ha OpenGL v mt hnh c bn (hnh lp phng).
Di y l m ngun chng trnh:
#include
#include
#include
#include

<stdio.h>
"mpi.h"
<stdlib.h>
<GL/glut.h>

double xmin,ymin,xmax,ymax;
int w=400,h=300;
int rank,size,tag=0;
MPI_Status status;
GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0};
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
GLfloat n[6][3] = {
{-1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {1.0, 0.0, 0.0},
{0.0, -1.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0} };
GLint faces[6][4] = {
{0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4},
{4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3} };
GLfloat v[8][3];
void
drawBox(void)
{
int i;
for (i = 0; i < 6; i++) {
glBegin(GL_QUADS);
glNormal3fv(&n[i][0]);
glVertex3fv(&v[faces[i][0]][0]);
glVertex3fv(&v[faces[i][1]][0]);
glVertex3fv(&v[faces[i][2]][0]);
glVertex3fv(&v[faces[i][3]][0]);
glEnd();
}
}
void
display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawBox();
glutSwapBuffers();
}
void
init(void)
{
v[0][0] = v[1][0] = v[2][0] = v[3][0] = -1;
v[4][0] = v[5][0] = v[6][0] = v[7][0] = 1;
v[0][1] = v[1][1] = v[4][1] = v[5][1] = -1;

v[2][1] = v[3][1] = v[6][1] = v[7][1] = 1;


v[0][2] = v[3][2] = v[4][2] = v[7][2] = 1;
v[1][2] = v[2][2] = v[5][2] = v[6][2] = -1;
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective( 40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.);

glTranslatef(0.0, 0.0, -1.0);


glRotatef(60, 1.0, 0.0, 0.0);
glRotatef(-20, 0.0, 0.0, 1.0);

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


{
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
if(rank==0)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("red 3D lighted cube");
glutDisplayFunc(display);
init();
glutMainLoop();
}
else
{
MPI_Finalize();
}
}

return 0;

Bin dch v chy chng trnh:


T giao din ca chng trnh SecureCRT.exe, sau khi kt ni n my bk12
a ch 192.168.1.12 bng ti khon globus11, ta thc hin cc lnh sau bin dch
v thc thi chng trnh nh sau:
globus11@bk12:~$ export MPICH_PATH=/home/condor/binaries/mpich2-1.2.1-LinuxLinux/bin {Lnh thit lp bin mi trng}
globus11@bk12:~$ cat .mpd.conf
globus11@bk12:~$ $MPICH_PATH/mpd&
[1] 3944
globus11@bk12:~$ cp /home/public/mpiSource/ mpiGL.c mpiGLPhuc.c
globus11@bk12:~$ $MPICH_PATH/mpicc -o mpiGLPhuc mpiGLPhuc.c {bin dch chng
globus11@bk12:~$ $MPICH_PATH/mpirun -np 4 ./ mpiGLPhuc {Chy chng trnh}

trnh}

Kt qu:

You might also like