Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://compmech.math.msu.su/publ/parallel_time.pdf
Äàòà èçìåíåíèÿ: Tue Feb 21 19:58:31 2012
Äàòà èíäåêñèðîâàíèÿ: Sat Apr 9 21:38:21 2016
Êîäèðîâêà:
1

«-» .., .., ..
, - . , «» « ». «» « » . , . : , , , , .

1.
, () , , . , , [1] : "... , , , <...> , ." , . , , . , , : 1. . 2. , , . «» , [2]. ,


2 , «-». , . , . , , . . « » ­ . , . , ( , ), . , , , . , . . . , , .

2. 2.1. /
, . . , , , . , [3]. . , , , , .


3 . , , , . ­ , .

2.2. -
- , . - . , , . , , . , , , , , . , , -- . . . ( ) .

2.3. /
, . «». , . , , ( ). « » , . , . , « » . «» , , .


4 , « » , .

2.4.
, . . . - . - -- . «» . () «/» ( - ). «» . . -- « ». « » -- . , . . , . , . , . (). -- -- . -- . . -- , 1 . .


5

2.5.
-- , , . , «». «» . , . «» ­ ( ­ ). , . «» . «» , .

3.
, . , - , . PYTHON . OST (Object -- Space -- Time) , , : - «» , ; - «» , OST ; - «» , .


6

3.1.
OST . , , . , . .

3.1.1. .
, , , . , , " " . OST , , , , . . , , . , , , , .

3.1.1.1. .
A B B A. A OST, , B . . , , , . , self.edges. , , , , , . class applied_topology(ost.Topology.Abstract): #, # p1 self.edges[p1] # p2 p1


7 self.edges = { p1: [p1_1,...,p1_k1] p2: [p2_1,...,p2_k2] ... pM: [pM_1,...,p1_kM] } # p2 # , p1 def proximity(self, p1, p2): # in bool # self.edges[p1] p2 return p2 in self.edges[p1]

3.1.1.2. .
, . . class applied_topology(ost.Topology.Abstract): #, # p1 self.edges[p1] # p2 p1 self.edges = { p1: [p1_1,...,p1_k1] p2: [p2_1,...,p2_k2] ... pM: [pM_1,...,p1_kM] } # p # , p def neighborhood(self, p): return self.edges[p] . . . class applied_topology(ost.Topology.Abstract): # def distance(self, p1, p2): return sqrt( (p1[0]-- p2[0])**2 +(p1[1] - p2[1])**2) # . , radius def proximity(self, p1, p2): return self.distance(p1, p2) < radius , . , , , :


8 class applied_topology( def neighborhood(self, return [ [p[0] + 1, [p[0] - 1, [p[0], p[1] [p[0], p[1] ] ost.Topology.Abstract): p): p[1]], p[1]], + 1], -- 1] # # # #

, OST . . , , , . OST «» , . . «» .

3.1.2. .
, . OST , . OST , , . , OST : ( ) ( ). topology . , ost.Topology.Mesh, . # objInit.topology = ost.Topology.Mesh(dimension = 2) , OST , . . , , topology .


9 ost.Topology.Neighborhood, # object.topology = ost.Topology.Neighborhood([[x1,y1],...,[xN,yN]]) object, [x1,y1],...,[xN,yN]. , . # objInit.topology = ost.Topology.Mesh(dimension = 2) # object1 = objectInit.createObject( <...> ) # [0,0] objInit.set(object1, [0,0]) object2 = objectInit.createObject( <...> ) objInit.set(object2, [0,1]) object3 = objectInit.createObject( <...> ) objInit.set(object3, [1,1]) object4 = objectInit.createObject( <...> ) # object4.topology = ost.Topology.Neighborhood([[0,0]]) objInit.set(object4, [2,2]) [0,0], [0,1] [0,1], [1,1]. [2,2] [0,0]. , , .

3.1.3. .
. OST . , , . , , «» « ». « » . - - , , - .


10 - OST , .. , . fun i : # fun i self.neighbors[i].link.fun(<...>) . , : , , . # fun self.left.fun(<...>) . # , . class applied_object(ost.Object.Abstract): # , # # , . # def fun(self, message): print "Call function with", data # def run(self): # while <...>: # for neighbor in self.topology.neighbors: # fun neighbor.fun()

# class applied_object(ost.Object.Abstract): # , # # , . # def fun(self, message): print "Call function with", data #


11 def run(self): # while <...>: self.left.fun() , , OST .

3.1.4. .
, OST. ost.Topology.Mesh. . -- , 1 . . (1,2 3) « ». : # <...>.topology = ost.Topology.Mesh(dimension = <>) # # # # dimension dimension dimension = 1 -- left, right = 2 -- left, right, up, down = 3 -- left, right, up, down, front, behind

ost.Topology.Ring. , N , 1 N. . , . , , , . . # <...>.topology = ost.Topology.Ring(N = < >) # left, right


12 ost.Topology.Graph. . , . . , edges = { P1: [P1_neighbor_1,...,P1_neighbor_N1], ... Pm: [Pm_neighbor_1,...,PM_neighbor_Nm]} P1,...,Pm -- , [Pi_neighbor_1,...,Pi_neighbor_Ni] , i- . # <...>.topology = ost.Topology.Graph(edges = edges) , , Metis: # Metis <...>.topology = ost.Topology.Graph(metis_datafile = datafile.dat) ost.Topology.Neighborhood. , . OST , . , . # object.topology = ost.Topology.Neighborhood([P1,...,Pk]) # Pi = [Pi_x1,...,Pi_xN] -- i-

3.2.
, , . « », . , . , , . OST ­ , .


13 . OST . OST , OST . , -, , . -, , , .

3.2.1.
-. OST . - «» OST , ( ) ( ) c .

3.2.2.
[ 4]. ­ , . , , , , . ( ). ­ , , . . , , , , . , . 3.2.


14

3.3.
OST . -- .

3.3.1.
. , . , , «» . , «» «» , «» «». , , , . , , . : (, ), , . , . "" , , 2.

3.3.2.
OST . , , , . OST , . OST , . , . , , . , , .


15

4.
OST , . , . [5]. , (. 1, 1). M2DGD [6]. . . , . M2DGD, MPI. . , OST , (. 1, 2). , OST.

5.
, , . "". , . : ; ; .. " " , . :


16 1. ? 2. ? , , . 3. () ? , , - (++, , ). , . "-". "" , , . , , . "" " " " " ( - " ") . , " " . , «» , . , . , , , , . , . , , . , .


17

6.
[1] O'Hanlon, C. A conversation with John Hennessy and David Patterson. Queue 4, 10 (Dec. 2005/Jan. 2006), 14­22. [2] Krste Asanovic, Rastislav Bodik, James Demmel, Tony Keaveny, Kurt Keutzer, John Kubiatowicz, Nelson Morgan, David Patterson, Koushik Sen, John Wawrzynek, David Wessel, Katherine Yelick, A view of the parallel computing landscape, Communications of the ACM Volume 52, Number 10 (2009), Pages 56-67
[3] .., .., ..,

, [4] Causality Representation and Cancellation Mechanism in Time Warp Simulations Malolan Chetlur and Philip A. Wilsey Experimental Computing Laboratory Dept. of ECECS, PO Box 210030, Cincinnati, OH 45221-0030 [5] http://math.csu.ru/~rusear/DipKurs/ParMetUmnMatr.html [6] I. Menshov, Y. Nakamura, Hybrid Explicit-Implicit, Unconditionally Stable Scheme for Unsteady Compressible Flows, AIAA Journal, Vol. 42, No. 3, pp. 551-559, 2004. [7] ost.kiam.ru

1. .
rsc4.kiam.ru, 64 , 2 . 1. . 10241024, . , [5]. : - 1 2 4 8 16 32 64 1377,28 c 689,39 c 344,81 c 172,62 c 87,48 c 50,72 31,86 100 % 99 % 99 % 99 % 98 % 84 % 68 %

2. .


18 M2DGD 2- : (OST), (MPI).

2. .
, , OST.

1. , . OST , . .

# class applied_ring_topology(ost.Topology.Abstract): #


19
def __init__(self, N): self.N = N # def neighborhood(self, p): # self - this c++ # p - () , # p_left if p[0] != 0: # p[0] 0, 1 p_left = [p[0] - 1] else: # p_left = [N - 1] # p_right if p[0] != N - 1: # p[0] N - 1, 1 p_right = [p[0] + 1] else: # p_right = [0] # # "left" # "right" return { "left": p_left, "right": p_right }

2. ­ , . , , .

# class applied_object(ost.Object.Abstract): # # def fun_1(self, # # ... def fun_N(self, # , ...): ...):

# , # . # def init_topology(self): # 1- self.init_neighbor(i1, Class_interface_i1, "synonym_i1") # 2-


20
self.init_neighbor(i2, Class_interface_i2, "synonym_i2") ... # - self.init_neighbor(iK, Class_interface_iK, "synonym_iK")

# , # def run(self): # self - this c++ # run for iteration in xrange(0, M): # () # self.topology.neighbors # i- fun_j- self.topology.neighbors[i].link.fun_j() # # fun_j- self.left.fun_j() # # self.time # time_step OST # self.setXYZT(self.time + time_step) # # coord = self.topology.get_coordinates() # OST # self.setXYZT(self.time + time_step, coord) # self.setFinish()

3. ­ . , . , 2, 1. , , .


21
# # # . # modelname.mod obj_init = ost.Core.Init("modelname.mod") # # 10 obj_init.topology = applied_ring_topology (N = 10) # , # 10 , for index in xrange(0,10): # applied_object app_object = obj_init.create_object( applied_object ) # # # , P1,...,Pk app_object.topology = ost.topology.Neighborhood([P1,...,Pk]) # # index obj_init.topology.set(app_object, index) # # obj_init.addSorceFile("applied_objects.py") # obj_init.save()

. , OST .