1 '''
2 Created on May 31, 2011
3
4 @author: Eleftherios Avramidis
5 '''
6
7
8
9
10 import pprocess
11 from sentence.parallelsentence import ParallelSentence
12 from sentence.sentence import SimpleSentence
13 from featuregenerator.featuregenerator import FeatureGenerator
14
16 """
17 classdocs
18 """
19
21 """
22 Constructor
23 """
24
26 for i in range(2000000):
27 pass
28 print "done: " + string
29 return string
30
31
36 return {"berkeley" : taketime("BerkeleyFeatureGenerator")}
38 return {"parallelsentenceberkeley" : taketime(
39 "parallelsentenceBerkeleyFeatureGenerator")}
40
43 return {"parseMatch" : taketime("ParseMatchFeatureGenerator")}
45 return {"parallelsentenceparseMatch" : taketime(
46 "parallelsentenceParseMatchFeatureGenerator")}
47
50 return {"length" : taketime("LengthFeatureGenerator")}
52 return {"parallelsentencelength" : taketime(
53 "parallelsentenceLengthFeatureGenerator")}
54
59 return {"parallelsentenceSRILM" : taketime(
60 "parallelsentenceSRILMFeatureGenerator")}
61
64 return {"ratio" : taketime("RatioGenerator")}
66 return {"parallelsentenceratio" : taketime(
67 "parallelsentenceRatioGenerator")}
68
71 return {"diff" : taketime("DiffGenerator")}
73 return {"parallelsentencediff" : taketime(
74 "parallelsentenceDiffGenerator")}
75
76
78 """
79 Add features to the object of parallel sentence.
80 @param sentence: Object of ParallelSentence()
81 @type sentence: sentence.parallelsentence.ParallelSentence
82 @return: Object of ParallelSentence() with added features
83 @rtype: sentence.parallelsentence.ParallelSentence
84 """
85 for arg in args:
86 sentence = arg.add_features_parallelsentence(arg(), sentence)
87 return sentence
88
89
91 """
92 Parallelize the execution of classes that can be executed parallel. It distributes the processes on more CPUs.
93 @param parallelizedSeries: list of lists of classes that can be executed parallel
94 @type parallelizedSeries: list
95 @param ps: empty object of parallel sentence
96 @type ps: sentence.parallelsentence.ParallelSentence
97 @param nproc: number of available CPUs
98 @type nproc: int
99 """
100 results = pprocess.Map(limit=nproc, reuse=1)
101 parallel_function = results.manage(pprocess.MakeReusable(run_serial))
102 ps0 = ps
103 n = 0
104 for parallelized in parallelizedSeries:
105 for args in parallelized:
106 parallel_function(args, ps)
107
108 parallel_results = results[0+n:len(parallelized)+n]
109 n = len(parallelized)
110
111
112 for ps in parallel_results:
113 ps0.merge_parallelsentence(ps)
114
115
116
117 if __name__ == '__main__':
118
119
120
121 generatorseries1 = [BerkeleyFeatureGenerator, ParseMatchFeatureGenerator]
122 generatorseries2 = [LengthFeatureGenerator]
123 generatorseries3 = [SRILMFeatureGenerator]
124
125
126
127 parallelized1 = [generatorseries1, generatorseries2, generatorseries3]
128
129
130 generatorseries4 = [RatioGenerator]
131 generatorseries5 = [DiffGenerator]
132
133
134 parallelized2 = [generatorseries4, generatorseries5]
135
136
137
138 parallelizedSeries = [parallelized1, parallelized2]
139
140 src = SimpleSentence("I am a student")
141 tgt1 = SimpleSentence("Ich bin ein Student")
142 tgt1.add_attribute("system", "moses")
143 tgt2 = SimpleSentence("Ich bin Student")
144 tgt2.add_attribute("system", "lucy")
145 ps = ParallelSentence(src, [tgt1, tgt2])
146
147 nproc = 2
148
149 run_parallel(parallelizedSeries, ps, nproc)
150