-
Notifications
You must be signed in to change notification settings - Fork 5
/
Credits
302 lines (205 loc) · 11.4 KB
/
Credits
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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
To RedHat Engineers:
Paul Howarth,
Denis Fateyev,
Near the very end of the 1.8 cycle were several revisions. Each time, an
email was sent to you stating that MCE was completed. But each morning,
I woke up with a sense that something else was missed.
(a) Running MCE and MCE::Shared inside an eval block.
(b) Check for EINTR condition during sysread and syswrite.
(c) Check the OS while running with ~ 200 workers.
(d) Test MCE with the Wx toolkit - wxWidgets.
(e) Test MCE and MCE::Shared by running taint mode via perl -T.
(f) Validate DESTROY for shared Condvar and Queue objects.
(g) Improve MCE::Shared::Handle for non-shared use, was not 100%.
Going from 99.7% to 100.0% required so much effort. I am deeply sorry
for the many emails sent. Although far away in miles, you were there
in keeping me from going insane. For this I thank you.
Best,
Mario
--
###############################################################################
# * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * #
###############################################################################
What follows are many people reporting problems, fixes or solutions.
More specifically in alphabetical order by last name.
Also, not to forget all the people mentioned in the change log.
Baumgart, Philippe
For trying the MCE interval option and calling MCE->yield. I felt bad for
Philippe spending many hours that it caused me to simulate the interval
option over and over again. It turns out that there can be unnecessary
delays from a worker taking extra time. MCE 1.815 resolves the issue by
allowing the next available worker to run versus workers running orderly.
Thank you, Philippe for your patience.
Berger, Joel
The inspiration for the sixth model (MCE::Step) came from reading a blog
by Joel, "Writing Non-Blocking Applications with Mojolicious: Part 3":
https://blogs.perl.org/users/joel_berger/2014/01/
writing-non-blocking-applications-with-mojolicious-part-3.html
Bouras, George
For reporting sockets failing under the Windows environment due to a
period of inactivity. An example is when workers execute an external
command taking beyond 4 minutes to complete. On returning, the sockets
have gone stale with a CPU core going 100% at that point.
The MCE 1.601 release is attributed to the many use cases I received
from George.
Cantrell, David (DrHyde on perlmonks.org)
For reporting on MCE hanging with cpan -t MCE under his environment. Also,
thank you for providing me a guest account via ssh. I was able to reproduce
the issue. Thus, added writeable check and croak if tmp dir is not writeable.
One cannot assume that /dev/shm is writeable by everyone. :)
Collet, Eric
For the inspiration to the tre-agrep binary.
I first learned of tre-agrep from Eric. He emailed me running times for a
couple scenarios utilizing a single core. Thus increasing the need to have
a MCE-driven wrapper to run tre-agrep in parallel.
The bin/mce_grep script was created to show folks how one may go about
chunking data between Perl and an external C binary efficiently without
invoking the shell. The script supports grep, egrep, fgrep, agrep and
tre-agrep.
Eldai, Hisham
While working on the biofasta examples, Hisham introduced me to hg19.fa.
A couple records inside hg19 (driven by $/ = "\n>") are 250 MiB in size.
Memory optimizations in v1.600 came about by running against hg19.fa
hundreds of times.
###############################################################################
# * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * #
###############################################################################
Farrell, David
David wrote a nice article about MCE (love the picture). What stood out was
his example. I never thought about using mce_grep { ... } <$fileHandle>
without the _f (mce_grep_f). At the time, updated MCE::Grep and MCE::Map
to be fully aware of wantarray.
The blog "Make your code run faster with Perl's secret turbo module" is
located at:
https://www.perl.com/article/61/2014/1/21/
Make-your-code-run-faster-with-Perl-s-secret-turbo-module/
Gasper, Felipe
For test scripts found in IO::SigGuard. I was able to get MCE::Mutex
to fail with similar testing. The result from testing is that MCE too,
must check for EINTR during sysread and syswrite operations. The same
is true for MCE::Shared.
Golden, David
For the Hash::Ordered module. I learned a lot from this *GEM* on CPAN.
Particularly, the use of overload. I didn't know that was possible.
For the time during collaborative efforts in making Hash::Ordered faster.
I learned some new tricks along the way.
Thank you for alarming me of the memory leaks with the on-demand hash
dereferencing inside MCE::Shared::Ordhash. MCE::Shared::Object was also
impacted. I'd never forget that dreadful day.
MCE::Shared::{ Array, Hash, and Ordhash } are inspired by Hash::Ordered.
In particular, the clone and iterator methods. Also, keys and values on
taking arguments. I confess for never getting used to the "as_list"
method name, initially. :)
Gorwits, Oliver
For reporting on a couple issues with MCE along with a solution for each.
Pointed me in the right direction for improving the logic for the die
handler. Basically, eval { die 'this should not cause MCE to die' };
This has reached 100% (all cases, threads and processes) in MCE 1.600.
Halpenny, Shawn
For reporting an issue (bug RT#94706) with signal handling in MCE::Signal.
Also, thank you for tip on getpgrp.
Hedden, Jerry
From reading threads::shared. In particular the make_shared function.
That was helpful in getting MCE::Shared working.
Hluchan, Yary
For providing a benchmark script which I used to compare IPC performance
between 1.6 and 1.7. For many kind words near the end of the development
cycle for MCE 1.7 and MCE::Shared.
###############################################################################
# * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * #
###############################################################################
Jacobsen, Dana
For reporting an issue with get_ncpu on AIX. In addition, suggesting
various solutions. Also, thank you for your time with Sandboxing with
Perl + MCE + Inline::C at https://github.com/marioroy/mce-sandbox/.
Karasik, Dmitry
For bug (RT#102802) and elegant solution for the die handler inside
MCE::Core::Worker and MCE::Signal.
Kharchenko, Oleksandr
Someone once asked Oleksandr why not use MCE. Oleksandr created 2 modules
on CPAN, Parallel::DataPipe and Parallel::parallel_map. I used his example
heavily in comparing IPC between pipe-driven and socket-driven. Not pleased
with MCE's performance with chunk_size => 1, although 2 was as fast if not
faster, I tried various things to include IO::Select. Finally, realized
increasing the number of data channels was all that was needed (v1.500).
Kulow, Stephan
For making the OpenSUSE package for MCE.
https://build.opensuse.org/package/show/devel:languages:perl:CPAN-M/perl-MCE
Mabon, Philip
For reporting on a couple issues with MCE in particular bug RT#92627.
McKeown, Benjamin
For reporting several edge cases with MCE in particular bugs RT#105557,
RT#105559, and RT#111780.
Mertens, David
I am thankful for the tip on making PDL + MCE a possibility. Workers were
crashing during exiting. Adding "sub PDL::CLONE_SKIP { 1 }" inside MCE.pm
solved this issue entirely. Also, for tips on effectively using PDL in
his example at https://gist.github.com/run4flat/4942132.
Barrier synchronization in MCE came from reading parallel_sync in David's
Perl module; PDL::Parallel::threads::SIMD.
Mughal, Zakariyya
First, Demian Riccardi introduced me to Devel::IPerl by Zakariyya. The die
handlers in MCE broke the user experience. It seems that looking at $^S
(for Perl state) is not enough. MCE v1.600 fixes this once and for all.
The answer is in perl-5.20.1/cpan/CGI/lib/CGI/Carp.pm (Carp::longmess).
###############################################################################
# * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * #
###############################################################################
Ogulin, Joseph
For providing the initial perl-MCE.spec file.
For the cool remarks at work about MCE being really big :)
Riccardi, Demian
I received a message from Demian asking for mce_map. His message requested
( my @a = mce_map { ... } 1..100 ). Five models were introduced in v1.500;
MCE::Flow, MCE::Grep, MCE::Loop, MCE::Map, and MCE::Stream.
Find capability were limited in MCE::Shared 1.001. For example, not able to
mix :AND(s) and :OR(s) together. One day, I clicked on recent distributions
on metacpan.org and came across HackaMol::Roles::SelectionRole. The trick
is to eval the query string together with grep or map. Thank you Demian.
Rowe, Jillian
For reporting on IO::File handles not working with MCE. Fixed in 1.515.
For believing in possibilities beyond text-book thinking.
Roy, Sylvia (spouse)
For supporting me from v1.0, especially during later 1.6 revisions and 1.7.
But not to forget the journey during 1.8. So little was known on the hurdles
to cross. It's all over now with MCE 1.827 and MCE::Shared 1.823.
Šabata, Petr
For initial package submission at Red Hat.
https://bugzilla.redhat.com/show_bug.cgi?id=1162531
Sasser, Tom
For reporting on bin/mce_grep failing with Perl 5.8.x.
Schlichting, Florian
For making a Debian package for MCE: libmce-perl
Shen, Wei
For the BioUtil CPAN module. BioUtil::Seq::FastaReader inspired me to
create parallel examples (biofasta folder) in MCE 1.600. We tried to
make FastaReader in BioUtil::Seq even faster.
###############################################################################
# * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * # * #
###############################################################################
Sjøgren, Adam
For reporting on running /usr/bin/time mce_script.pl and pressing Ctrl-C
failing. The default behavior in MCE::Signal is to call setpgrp. MCE 1.403
adds a new option to MCE::Signal to not call setpgrp. This also gives the
developer finer control as to where setpgrp should be called, if ever
needed, such as in the child process and not the manager process.
use MCE::Signal qw(-no_setpgrp);
use MCE;
Smith, Marcus
For reporting a problem with MCE including a sample script demonstrating
MCE not 100% UTF-8 safe. All this time, totally overlooked the fact that
the length function deals in logical characters, not physical bytes. :)
Timmermans, Leon
The inspiration for not having to backslash variables for MCE::Shared came
from reading Const::Fast: e.g. mce_share my @array => ( list );
Thalhammer, Jeffrey Ryan
For submitting a feature request for lazy arrays support.
Although a lazy array cannot be used directly for input_data, support for
iterator objects was added to MCE 1.505; e.g. input_data => $iterator_ref;
This enabled support for lazy arrays using closures.
I am thankful for the small code snippet highlighting a use-case of MCE.
I would have failed initially without it. Your example was placed under
the "SYNTAX for INPUT_DATA" section in MCE::Core for others to see on
how to process output from Path::Iterator::Rule in parallel.
Warm regards,
Mario