File: overview.html

package info (click to toggle)
libpj-java 0.0~20150107%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 13,396 kB
  • sloc: java: 99,543; ansic: 987; sh: 153; xml: 26; makefile: 10; sed: 4
file content (2201 lines) | stat: -rw-r--r-- 70,031 bytes parent folder | download | duplicates (2)
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
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
<HTML>
<HEAD>
</HEAD>
<BODY>

<P>
Parallel Java (PJ) is
an API and middleware for parallel programming in 100% Java
on shared memory multiprocessor (SMP) parallel computers,
cluster parallel computers,
and hybrid SMP cluster parallel computers.
PJ was developed by Professor Alan Kaminsky
and his student Luke McOmber
in the Department of Computer Science
at the Rochester Institute of Technology.

<P>
I am happy to answer general questions about the Parallel Java Library,
receive bug reports,
and entertain requests for additional features.
Please contact me by email at
ark<FONT SIZE="1" COLOR="#FFFFFF">&shy;</FONT>&#64;<FONT SIZE="1" COLOR="#FFFFFF">&shy;</FONT>cs.rit.edu.
I regret that I am unable to provide technical support,
specific installation instructions for your system,
or advice about configuring your parallel computer hardware.

<P>
<A HREF="#requirements">System Requirements</A>
<BR><A HREF="#installation">Installation</A>
<BR><A HREF="#usage">Usage</A>
<BR><A HREF="#license">License</A>
<BR><A HREF="#history">Revision History</A>

<P>
<HR>
<A NAME="requirements"><H2>System Requirements</H2></A>

<P>
PJ was developed using
Java Development Kit (JDK) 1.5.
When compiling and running PJ programs,
you must use JDK 1.5.
PJ uses features of the Java language and platform
introduced in JDK 1.5
and will not compile with earlier JDK versions.

<P>
PJ will work with JDK 1.6 and 1.7.
However, my tests have revealed serious performance issues
when a multithreaded PJ program
is run on an SMP parallel computer
with JDK 1.6 or 1.7.
Due to some as-yet-unfathomed behavior
of the JIT compiler
and/or the thread scheduler,
SMP parallel programs that experienced near-ideal speedups with JDK 1.5
experience far-less-than-ideal speedups with JDK 1.6 or 1.7
on the same machine.
For now I recommend using PJ with JDK 1.5.

<P>
<HR>
<A NAME="installation"><H2>Installation</H2></A>

<P>
There are two versions of the PJ distribution,
an executable distribution
and a source distribution.

<P>
<B>Executable distribution.</B>
The executable distribution comes in a Java Archive (JAR) file
named <TT>"pj<I>YYYYMMDD</I>.jar"</TT>,
where <I>YYYYMMDD</I> are the year, month, and date.
The executable distribution includes the PJ class files only.
To install the executable distribution,
simply store the JAR file somewhere.
You may wish to change the file name,
say to <TT>"pj.jar"</TT>.

<P>
<B>Source distribution.</B>
The source distribution comes in a Java Archive (JAR) file
named <TT>"pjsrc<I>YYYYMMDD</I>.jar"</TT>,
where <I>YYYYMMDD</I> are the year, month, and date.
The source distribution includes the PJ class files,
source files, and documentation files (Javadoc).
To install the source distribution,
just unpack the JAR file.
The source distribution expands into a subdirectory
named <TT>"pj"</TT>.
If you already have a subdirectory of that name
which you want to save,
be sure to unpack the JAR file
in some other directory.
Documentation is stored under the directory
<TT>"pj/doc"</TT>;
point your HTML browser to that directory.
Java source files and class files
are stored under the directory
<TT>"pj/lib"</TT>.

<P>
<B>Installation on a SMP computer.</B>
To run PJ programs on a shared memory multiprocessor (SMP) parallel computer,
no further installation is required.

<P>
<B>Installation on a cluster.</B>
To run PJ programs on a cluster parallel computer,
in addition to installing the PJ JAR file,
you must configure and run certain daemon processes
on the frontend and backend processors of the cluster.
For further information, see package
<A HREF="edu/rit/pj/cluster/package-summary.html">edu.rit.pj.cluster</A>.

<P>
<HR>
<A NAME="usage"><H2>Usage</H2></A>

<P>
<B>Executable distribution.</B>
When compiling and executing Java programs
that use PJ,
if you have installed the executable distribution,
you must set your classpath
to include the PJ JAR file.
Here is an example of a command for the <TT>bash</TT> shell
to set the classpath to the current directory
plus the PJ JAR file:

<P>
<TT>export&nbsp;CLASSPATH=.:/home/fac/ark/public_html/pj.jar</TT>

<P>
Here is an example of a command for the <TT>csh</TT> shell
to set the classpath to the current directory
plus the PJ JAR file:

<P>
<TT>setenv&nbsp;CLASSPATH&nbsp;.:/home/fac/ark/public_html/pj.jar</TT>

<P>
<B>Source distribution.</B>
When compiling and executing Java programs
that use PJ,
if you have installed the source distribution,
you must set your classpath
to include the top-level directory
under which PJ's Java class files are stored.
Here is an example of a command for the <TT>bash</TT> shell
to set the classpath to the current directory
plus the PJ directory:

<P>
<TT>export&nbsp;CLASSPATH=.:/home/fac/ark/public_html/pj/lib</TT>

<P>
Here is an example of a command for the <TT>csh</TT> shell
to set the classpath to the current directory
plus the PJ directory:

<P>
<TT>setenv&nbsp;CLASSPATH&nbsp;.:/home/fac/ark/public_html/pj/lib</TT>

<P>
<HR>
<A NAME="license"><H2>License</H2></A>

<P>
The documentation files, Java source files, and Java class files
in the Parallel Java Library
("PJ")
are copyright &copy; 2005-2012
by Alan Kaminsky.
All rights reserved.
For further information, contact the author, Alan Kaminsky,
at ark<FONT SIZE="1" COLOR="\#FFFFFF">&shy;</FONT>&#64;<FONT SIZE="1" COLOR="\#FFFFFF">&shy;</FONT>cs.rit.edu.
<P>
PJ is free software; you can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software
Foundation; either version 3 of the License, or (at your option) any later
version.
<P>
PJ is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
<P>
Linking this library statically or dynamically with other modules is making a
combined work based on this library. Thus, the terms and conditions of the GNU
General Public License cover the whole combination.
<P>
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent modules, and to
copy and distribute the resulting executable under terms of your choice,
provided that you also meet, for each linked independent module, the terms and
conditions of the license of that module. An independent module is a module
which is not derived from or based on this library. If you modify this library,
you may extend this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this exception statement
from your version.
<P>
A copy of the GNU General Public License
is provided in the file <A HREF="doc-files/gpl.txt"><TT>gpl.txt</TT></A>.
You may also obtain a copy of the GNU General Public License
on the World Wide Web at
<A HREF="http://www.gnu.org/licenses/gpl.html" TARGET="_top">http://www.gnu.org/licenses/gpl.html</A>.

<P>
<HR>
<A NAME="history"><H2>Revision History</H2></A>

<DL COMPACT>

<P><DT>07-Jan-2015
<DD>
The Parallel Java Library is now released
under the GNU General Public License
with a linking exception.

<P><DT>20-Jun-2012
<DD>
In package edu.rit.pj.cluster:
Added the <TT>backendshell</TT> configuration command
to class Configuration.
If specified, this configures the PJ Job Scheduler
to use a given shell command string
when starting a job backend process
on a given backend node.
The default shell command string
was changed from <TT>"sh&nbsp;-c"</TT>
to <TT>"bash&nbsp;-l&nbsp;-c"</TT>.
The <TT>-l</TT> flag tells the shell to behave as a login shell
and execute the commands in the user's login profile, if any.
Changed class JobFrontend to launch a Parallel Java job
using the configured shell command string
instead of a hard-coded string.
Changed class BackendClassLoader
to support loading resources
as well as class files
from the Java class path.

<P><DT>01-Apr-2012
<DD>
In package edu.rit.mp.buf:
Fixed bugs in the shared object buffer classes;
the objects were not re-serialized properly
after a reduction operation,
causing the reduce and all-reduce message passing methods to fail
when using a shared object buffer.

<P><DT>26-Mar-2012
<DD>
In package edu.rit.util:
Added class Packing
for packing and unpacking bytes
into and out of integers and long integers.
<P>
In class edu.rit.numeric.Statistics:
added a method for doing
an unequal-variance <I>t</I>-test
for equality of means of two data series.

<P><DT>19-Mar-2012
<DD>
In package edu.rit.hyb.keysearch:
Changed class FindKeyHyb
to use the HybridTeam, WorkerRegion, and WorkerIntegerForLoop classes.
<P>
In package edu.rit.hyb.fractal:
Changed class MandelbrotSetHyb
to use the HybridTeam, WorkerRegion, and WorkerIntegerForLoop classes.
Changed class MandelbrotSetHyb2
to use the WorkerTeam, WorkerRegion, and WorkerIntegerForLoop classes.
<P>
In package edu.rit.hyb.prime:
Changed class PrimeCountFunctionHyb
to use the WorkerTeam, WorkerRegion, and WorkerLongForLoop classes.

<P><DT>08-Mar-2012
<DD>
Changed class edu.rit.clu.keysearch.FindKeyClu2
to use a ReplicatedBoolean object for early loop exit
instead of flood-send and flood-receive operations.
<P>
Added features to the Job Scheduler's web interface.
The job queue web page
now has a link to a detailed job status web page
for each job.
The detailed job status web page includes
a "comment" for each backend process.
The program can set its backend process comment
by calling <TT>JobBackend.getJobBackend().setComment()</TT>.
The comment is typically used to report
the backend process's progress.

<P><DT>22-Nov-2011
<DD>
In class edu.rit.numeric.Interpolation:
Removed the restriction that the X values
must be in ascending order;
removed the <TT>fInv()</TT> method.
<P>
Changed class edu.rit.util.RandomSubset
to support both a sparse implementation and a dense implementation.
This change is source compatible with previous code,
which will use the sparse implementation by default as before.
<P>
Added class edu.rit.util.Searching
with methods for searching sorted and unsorted arrays
of primitive types and object types.
<P>
In class edu.rit.util.Sorting:
Each <TT>sort()</TT> method now returns
the array that was sorted.

<P><DT>09-Aug-2011
<DD>
Fixed a bug in class edu.rit.draw.item.Group;
transforms were not applied properly
if a group was nested inside another group.
<P>
In package edu.rit.numeric:
Fixed a bug in class Interpolation;
it calculated the wrong answer
when extrapolating beyond
the last data points in the series;
thank you to Francisco Esquembre for discovering the bug.
Added classes BernoulliPrng, ExponentialPrng, and UniformPrng.
In class Series.Stats,
changed the field names to <TT>mean</TT>,
<TT>var</TT>, and <TT>stddev</TT>,
and set the statistics to NaN
if the series is empty.
In class Series.RobustStats,
changed the field names to <TT>median</TT>
and <TT>meanAbsDev</TT>,
set the statistics to NaN
if the series is empty,
and added the <TT>quantile()</TT> and <TT>histogram()</TT> methods.
In class XYSeries,
removed the <TT>stats()</TT> and <TT>robustStats()</TT> methods;
instead, use <TT>xSeries().stats()</TT>,
<TT>ySeries().stats()</TT>,
<TT>xSeries().robustStats()</TT>,
and <TT>ySeries().robustStats()</TT>.
In class XYZSeries,
removed the <TT>stats()</TT> and <TT>robustStats()</TT> methods;
instead, use <TT>xSeries().stats()</TT>,
<TT>ySeries().stats()</TT>,
<TT>zSeries().stats()</TT>,
<TT>xSeries().robustStats()</TT>,
<TT>ySeries().robustStats()</TT>,
and <TT>zSeries().robustStats()</TT>.
<P>
Added package edu.rit.sim
with classes for discrete event simulation.
<P>
In package edu.rit.util:
Added class RandomSubset.

<P><DT>15-Mar-2011
<DD>
Fixed bugs in package edu.rit.swing;
the JTextField subclasses incorrectly overrode
the JComponent.isValid() method;
this method's name was changed to isOkay().

<P><DT>22-Oct-2010
<DD>
Clarified the documentation for class edu.rit.pj.job.Runner.
<P>
In package edu.rit.numeric:
Added methods to compute the medians and mean absolute deviations
in classes Series, XYSeries, and XYZSeries.
Changed class RobustFit to compute the confidence region
for the fitted parameters
at a given confidence level.
<P>
Added class edu.rit.util.Sorting
with static methods for sorting arrays
of primitive types and object types.

<P><DT>09-Oct-2010
<DD>
Fixed a bug in class edu.rit.util.Instance;
to load the class for the object being created,
it should be using the calling thread's context class loader
instead of a class loader specified as an argument.
<P>
Fixed a bug in class edu.rit.pj.job.Job;
to load the class for the job's main method,
it should be using the calling thread's context class loader
instead of class Job's class loader.

<P><DT>08-Oct-2010
<DD>
In package edu.rit.pj:
Added class WorkerIteration
for doing parallel iterations
in a cluster or hybrid parallel program.
In class WorkerRegion,
added methods to perform a parallel iteration
over an array,
the items returned by an iterator,
or the items contained in an iterable collection.
<P>
Added package edu.rit.pj.job
with programs and classes
for running independent jobs
on parallel computers.
<P>
In package edu.rit.io:
Added class Stdio
providing per-thread standard I/O streams.
<P>
In package edu.rit.numeric:
Added the <TT>linearRegression()</TT> method
to class edu.rit.numeric.XYZSeries.
Added interfaces MDFunction and ParameterizedFunction.
Added classes MDMinimizationDownhillSimplex and RobustFit.

<P><DT>29-Jul-2010
<DD>
Fixed a bug in class edu.rit.pj.cluster.JobScheduler;
if a client opened a socket connection
to the Job Scheduler's web server
but did not send an HTTP request message
and did not close the connection,
the whole Job Scheduler deadlocked.
<P>
In class edu.rit.http.HttpServer:
Added a timeout while reading an HTTP request message
from a socket connection.

<P><DT>22-Apr-2010
<DD>
Fixed a bug in class edu.rit.color.HSB;
the <TT>unpack()</TT> method did not compute
the correct hue, saturation, and brightness components.

<P><DT>18-Feb-2010
<DD>
In package edu.rit.pj:
Fixed a bug involving the fixed schedule classes,
the parallel for loop classes,
and the worker for loop classes;
if the number of loop iterations
was less than the number of team threads,
the <TT>run()</TT> method would be called
with a lower index greater than the upper index
in some threads,
whereas the <TT>run()</TT> method
should not have been called at all
in those threads.
<P>
In package edu.rit.util:
Added classes Mathe and RandomSample.
<P>
In package edu.rit.pj.reduction:
Added classes SharedIntegerMatrix and SharedLongMatrix.

<P><DT>21-Jan-2010
<DD>
In package edu.rit.pj:
Fixed bugs in classes
WorkerIntegerForLoop, WorkerIntegerStrideForLoop,
WorkerLongForLoop, and WorkerLongStrideForLoop;
improper synchronization between worker threads
could cause a deadlock in the master thread
during execution of a worker for loop.
<P>
In class edu.rit.numeric.BigRational:
Added several constructors and methods.
Fixed bugs in the <TT>floatValue()</TT> and <TT>doubleValue()</TT> methods;
the results were not calculated to the proper precision.
<P>
In class edu.rit.numeric.Statistics:
Added the <TT>binomialKsTest()</TT> method.
<P>
In package edu.rit.util:
Added class Instance with static methods
for creating instances of classes.

<P><DT>26-Dec-2009
<DD>
In package edu.rit.pj:
Added components that provide the master-worker pattern
for automatic loop partitioning and load balancing
in cluster parallel programs and hybrid parallel programs.
These include the following classes:
WorkerTeam, HybridTeam, WorkerConstruct, WorkerRegion,
WorkerForLoop, WorkerIntegerForLoop, WorkerIntegerStrideForLoop,
WorkerLongForLoop, WorkerLongStrideForLoop.
<P>
In package edu.rit.clu.keysearch:
Changed the FindKeyClu and FindKeyClu2 programs
to use the new master-worker components.
<P>
In package edu.rit.clu.fractal:
Changed the MandelbrotSetClu2, MandelbrotSetClu3, and MSHistogramClu programs
to use the new master-worker components.
<P>
In package edu.rit.pj.reduction:
In classes ByteOp, CharacterOp, IntegerOp, LongOp, and ShortOp:
Added the AND, OR, and XOR reduction operators.
<P>
In package edu.rit.io:
Added classes DataOutputStream and DataInputStream.
<P>
In class edu.rit.numeric.Statistics:
Added methods to do a chi-square test
for a Bernoulli distribution.
Added a method to do a Kolmogorov-Smirnov test
for an arbitrary distribution.

<P><DT>06-Oct-2009
<DD>
In class edu.rit.numeric.Statistics:
Added methods for doing the chi-square test
and the Y-square test.
<P>
Moved class BigRational
from package edu.rit.smp.ca
to package edu.rit.numeric,
and added several operations.
<P>
In class edu.rit.util.Random:
Added methods to return random values
of the primitive types byte, unsigned byte,
char, short, unsigned short, int, and long.
<P>
Fixed a bug in class edu.rit.numeric.plot.impl.XYPlot:
An exception was thrown if a plot series
had fewer than two data points.

<P><DT>05-Apr-2009
<DD>
In package edu.rit.mp.buf:
Fixed bugs in the matrix buffer classes;
sometimes when receiving a message into a matrix buffer,
an incorrect number of items would be sucked out of the message.
Thank you to Omonbek Salaev for discovering the bug.

<P><DT>23-Mar-2009
<DD>
In package edu.rit.hyb.keysearch:
Fixed a bug in class FindKeyHyb;
the threads did not synchronize with each other properly
when writing the <TT>foundkey</TT> shared variable.
<P>
In package edu.rit.mp.buf:
Fixed bugs in the object reduction buffer classes;
the underlying buffer's serialized representation was not reset
when the underlying buffer's contents were changed
via operations on the reduction buffer.

<P><DT>11-Mar-2009
<DD>
In package edu.rit.mp:
Fixed a bug in class ChannelGroup;
if an I/O error occurred while setting up a channel
for a connection initiated by a far end process,
the thread accepting new connections
would (incorrectly) terminate.

<P><DT>21-Jan-2009
<DD>
In package edu.rit.pj:
Fixed a bug in class Comm;
a non-blocking flood-receive operation
blocked in some processes
because channels were not set up properly.
<P>
In package edu.rit.pj.cluster:
Fixed a bug in class JobFrontend;
the job frontend process
did not pass the correct backend node host name
to the job backend process.

<P><DT>24-Dec-2008
<DD>
The Parallel Java class files are now compiled
using JDK 1.5 again.
Switching to JDK 1.6 proved to be a mistake.
My tests have revealed serious performance issues
when a multithreaded PJ program
is run on an SMP parallel computer
with JDK 1.6.
Due to some as-yet-unfathomed behavior
of the JDK 1.6 JIT compiler
and/or the JDK 1.6 thread scheduler,
SMP parallel programs that experienced near-ideal speedups with JDK 1.5
experience far-less-than-ideal speedups with JDK 1.6
on the same machine.
For now I recommend using PJ with JDK 1.5.

<P><DT>26-Nov-2008
<DD>
The Parallel Java class files are now compiled
using JDK 1.6.
<P>
In package edu.rit.mp.ChannelGroup
and in class edu.rit.pj.Comm:
Added the ability to receive a message
whose tag lies in a given range,
in addition to receiving a message with a specific tag or any tag.
This change is source compatible with existing software
but is not binary compatible;
you may need to recompile your programs.
<P>
In package edu.rit.compbio.phyl:
Redesigned the maximum parsimony
phylogenetic tree construction algorithm classes
to store the results in an object passed in as a parameter.
Added class MaximumParsimonyBnbHyb
and main program class PhylogenyParsBnbHyb
with a hybrid parallel program
for maximum parsimony phylogenetic tree construction.

<P><DT>10-Nov-2008
<DD>
In package edu.rit.image:
Fixed bugs in the PJG image classes;
PJG image files would not be displayed properly
if the height and width were unequal.
Thank you to Paresh Khatri for discovering the bug.

<P><DT>13-Sep-2008
<DD>
Added package edu.rit.pj.replica
with classes for replicated, shared reduction variables
for use in cluster and hybrid parallel programs.
<P>
In class edu.rit.pj.Comm:
Changed the manner in which processes establish connections among themselves,
to eliminate race conditions that could result in incorrect connections.

<P><DT>15-Aug-2008
<DD>
In package edu.rit.compbio.phyl:
Changed class MaximumParsimonyBnbSmp
to update the search bound variable
using a reduction operator
instead of an atomic compare-and-set operation.
<P>
In package edu.rit.smp.monte:
Added the source files for SMP parallel C/OpenMP programs
for estimating pi using a Monte Carlo technique;
these are linked from the package summary page of the Javadoc.
<P>
In package edu.rit.smp.network:
Added the source files for SMP parallel C/OpenMP programs
for Floyd's Algorithm;
these are linked from the package summary page of the Javadoc.
<P>
In package edu.rit.clu.monte:
Added the source files for cluster parallel C/MPI programs
for estimating pi using a Monte Carlo technique;
these are linked from the package summary page of the Javadoc.
<P>
In package edu.rit.clu.network:
Added the source files for cluster parallel C/MPI programs
for Floyd's Algorithm;
these are linked from the package summary page of the Javadoc.

<P><DT>07-Aug-2008
<DD>
In package edu.rit.compbio.phyl:
Added methods to class TreeDrawing
to draw a phylogenetic tree into a given drawing object
or a given drawing group object.
<P>
In class edu.rit.draw.item.Group:
Added methods to retrieve points relative to the group's bounding box
without applying the group's transformations.
<P>
In class edu.rit.numeric.plot.Plot:
Changed the default title font to sans-serif, bold, 14 point.
Changed the default axis and label font to sans-serif, plain, 12 point.
Increased the default margins and title offsets.
<P>
In the unnamed package:
Changed the first parallel programs,
classes Program1Seq, Program1Smp, and Program1Clu,
to do a primality test as the demo computation.

<P><DT>25-Jul-2008
<DD>
In package edu.rit.compbio.phyl:
Added some features to the phylogenetic tree construction programs.
The output report now includes
the Hamming distance matrix
and the Jukes-Cantor distance matrix.
For each maximum parsimony phylogenetic tree,
the least squares branch lengths are computed and displayed,
and the trees are presented in ascending order of squared error.
<P>
In package edu.rit.pj.cluster:
Fixed a bug in class NonPjJobFrontend;
an IllegalMonitorStateException was thrown
when a backend processor was assigned to the job.

<P><DT>20-Jul-2008
<DD>
In package edu.rit.compbio.phyl:
Changed the criterion for deciding when to prune
the branch-and-bound search;
the new criterion can prune the search sooner.

<P><DT>19-Jul-2008
<DD>
Added package edu.rit.compbio.phyl
with sequential and SMP parallel programs
for maximum parsimony phylogenetic tree construction
using branch-and-bound search.
Added package edu.rit.compbio.seq.test
with unit test programs for the above.
<P>
Removed obsolete packages edu.rit.phyl,
edu.rit.phyl.pars, and edu.rit.phyl.pars.test.
Equivalent programs are now in package edu.rit.compbio.phyl.
<P>
In package edu.rit.pj:
In class PJProperties:
Changed the <TT>getPjSchedule()</TT> method to return null
if the <TT>"pj.schedule"</TT> property was not specified.
In class IntegerSchedule:
Added the <TT>runtime(IntegerSchedule)</TT> method.
In class LongSchedule:
Added the <TT>runtime(LongSchedule)</TT> method.
<P>
In class edu.rit.pj.cluster.JobBackend:
Added code to turn on headless mode.
This allows graphics drawing operations
(that do not require a screen, keyboard, or mouse) to work
when a PJ program is run on a backend node of a cluster.

<P><DT>14-Jul-2008
<DD>
Added package edu.rit.compbio.seq
with sequential and parallel programs
for protein sequence database searching
using the Smith-Waterman local alignment algorithm.
Added package edu.rit.compbio.seq.test
with unit test programs for the above.
<P>
In package edu.rit.mp.buf:
Fixed a bug in class EmptyObjectBuf;
the class should not have overridden the superclass's
<TT>sendItems()</TT> and <TT>receiveItems()</TT> methods.

<P><DT>28-Jun-2008
<DD>
In package edu.rit.numeric:
Added interface VectorFunction and class NonLinearLeastSquares
for nonlinear least squares curve fitting.
Added classes DoublePrng and NormalPrng
for generating pseudorandom numbers with a normal distribution.
Added classes ArraySeries, ArrayXYSeries, and ArrayXYZSeries
which provide series objects backed by arrays.
<P>
In package edu.rit.mp:
Added the <TT>objectBuffer(T[])</TT>
and <TT>objectBuffer(T[][])</TT> methods
to class ObjectBuf.
Fixed a bug in class MPObjectInputStream;
the <TT>resolveClass()</TT> method
did not correctly resolve the class for an array of objects.
<P>
In class edu.rit.pj.cluster.JobBackend:
Fixed a bug in the <TT>reportResource()</TT> method;
a NullPointerException was thrown if the resource could not be found.
<P>
In packages edu.rit.draw and edu.rit.draw.item:
Removed the ability to rotate a DrawingItem.
Added the ability to scale, shear, and rotate a Group.
To apply transformations to one or more DrawingItems,
put the DrawingItems in a Group
and apply transformations to the Group.
This change reduces the size of a serialized Drawing object.
As a result of this change,
Drawing objects serialized with previous versions of the Library
are incompatible with the present version of the Library.
<P>
Added package edu.rit.mri
with sequential and parallel programs for solving
a magnetic resonance image spin relaxometry analysis problem.
Added package edu.rit.mri.test
with unit test programs for the above.

<P><DT>08-Jun-2008
<DD>
In class edu.rit.pj.Comm:
Reimplemented the all-reduce operation
to reduce the number of message rounds.
<P>
In package edu.rit.pj.cluster:
Rewrote classes JobScheduler, Configuration, BackendInfo, and JobInfo
to support clusters of single-CPU nodes
and clusters of multi-CPU nodes.
Eliminated classes HybridJobScheduler, HybridConfiguration,
HybridBackendInfo, and HybridJobInfo.
Changed class Configuration
to include the number of CPUs in each backend node.
As a consequence,
this version of the Parallel Java cluster middleware
will not interoperate with previous versions.
<P>
In package edu.rit.hyb.keysearch:
A few revisions to class FindKeyHyb,
a hybrid parallel program for AES partial key search.
<P>
In package edu.rit.hyb.fractal:
Added class MandelbrotSetHyb,
a hybrid parallel program to calculate an image of the Mandelbrot Set
with one-level load balancing.
Added class MandelbrotSetHyb2,
a hybrid parallel program to calculate an image of the Mandelbrot Set
with two-level load balancing.
<P>
In package edu.rit.hyb.network:
Rewrote classes FloydRandom, FloydPrint, FloydSeq, and FloydHyb
to use a DoubleMatrixFile to read and write the input and output files.
<P>
In package edu.rit.hyb.prime:
Rewrote all the programs for calculating the prime counting function.

<P><DT>13-May-2008
<DD>
In package edu.rit.mp:
Fixed a bug in class ChannelGroup;
if the channel group had a connect listener
and another process set up a connection,
there was a race condition between the thread calling the connect listener
and the thread receiving messages from the channel,
possibly causing the channel to be in an incorrect state.

<P><DT>09-May-2008
<DD>
In package edu.rit.clu.monte:
Added programs AesTestSeq and AesTestClu
that perform a Kolmogorov-Smirnov test
on the AES block cipher
operating as a pseudorandom number generator.
The AesTestClu program illustrates
the all-to-all, exclusive-scan, and reduce
collective communication operations.
<P>
In class edu.rit.pj.Comm:
Added the <TT>allToAll()</TT>, <TT>scan()</TT>,
and <TT>exclusiveScan()</TT>
collective communication operations.
Removed the versions of the <TT>reduce()</TT>
and <TT>allReduce()</TT> operations
with separate source and accumulator buffers.
<P>
In class edu.rit.mp.Buf:
Added the <TT>fill()</TT> and <TT>getTemporaryBuf()</TT> methods.
<P>
Fixed bugs in class edu.rit.pj.reduction.ReduceArrays;
in each method,
the number of array elements to reduce was one too large.

<P><DT>07-May-2008
<DD>
In package edu.rit.pj.cluster:
Fixed a bug in class JobScheduler and class HybridJobScheduler.
If a Job Frontend connected to the Job Scheduler,
but the Job Frontend terminated before sending any messages,
the Job Scheduler's channel remained open forever,
eventually leading to resource exhaustion.

<P><DT>25-Apr-2008
<DD>
In package edu.rit.pj.cluster:
Added the <TT>jobtime</TT> configuration command
to class Configuration and class HybridConfiguration.
This configures the PJ Job Scheduler
to impose a maximum running time on each job.

<P><DT>24-Apr-2008
<DD>
Added package edu.rit.clu.heat
with sequential and parallel programs
for computing a heat distribution problem.
The programs solve the partial differential equation
using successive overrelaxation
with Chebyshev acceleration
and red-black mesh updating.
<P>
In package edu.rit.clu.antimatter:
Changed the implementation of the pipelined AntiprotonClu3 program
to use fewer interprocess connections.
<P>
In package edu.rit.image:
Added class PJGHueImage
for reading and writing image files
where the image consists of a continuous range of hues.
(The existing class PJGColorImage is best suited
for images consisting of a small discrete set of colors.)
<P>
In the unnamed package:
Fixed a bug in class mprun;
under JDK 1.6,
class ProcessBuilder requires
the full pathname of the command to execute.
<P>
In package edu.rit.mp:
Fixed bugs in classes ChannelGroup and NetworkChannelReceiveThread;
several I/O error conditions were not handled properly.

<P><DT>30-Mar-2008
<DD>
In package edu.rit.clu.antimatter:
Changed the implementation of the pipelined AntiprotonClu2 program
to use fewer interprocess connections.
<P>
In package edu.rit.util:
Changed the implementation of class DefaultRandom
so that close seed values
do not give closely correlated random sequences.
<P>
In package edu.rit.pj.reduction:
Changed the documentation of class ObjectOp
to state the requirements for an object reduction operation,
which are assumed by the other classes
in the Parallel Java Library.

<P><DT>20-Mar-2008
<DD>
In the unnamed package:
Added program mprun,
which runs MPI jobs through the Parallel Java job queue
on a cluster parallel computer.

<P><DT>19-Mar-2008
<DD>
In package edu.rit.numeric:
Added class Quadratic for solving quadratic equations.
<P>
In package edu.rit.util:
Fixed bugs in class Random;
some precondition checks were missing.
<P>
In class edu.rit.pj.Comm:
Reimplemented the flood and all-gather operations
to reduce the number of message rounds.

<P><DT>03-Mar-2008
<DD>
Added package edu.rit.hyb.monte
with hybrid SMP cluster parallel Monte Carlo programs.
Added classes PiSeq and PiHyb,
sequential and cluster parallel programs
to calculate &pi; using a Monte Carlo technique.
<P>
In package edu.rit.smp.monte:
Changed classes PiSmp, PiSmp2, and PiSmp3
to use a LongForLoop.
<P>
In package edu.rit.util:
Changed the implementation of class Random.
Changed class DefaultRandom to use a hashing algorithm
instead of a multiplicative congruential generator (MCG) algorithm;
the hashing algorithm avoids certain weaknesses of the MCG algorithm.
The previous version of class DefaultRandom,
which uses a MCG algorithm,
is still available as class Mcg1Random.
<P>
In package edu.rit.mp.buf:
Fixed bugs in the object buffer subclasses;
the serialized representation was not reset in all cases
when the buffer contents were changed.
Fixed bugs in the matrix buffer subclasses;
an ArithmeticException was thrown
when receiving into a matrix buffer
for a slice of zero columns.

<P><DT>11-Feb-2008
<DD>
In package edu.rit.clu.antimatter:
Changed programs AntiprotonSeq and AntiprotonClu
to put the antiproton motion calculations in subroutines.
Added program AntiprotonClu2
which uses pipelined send-receive message passing operations
instead of all-gather collective communication operations.
Added program AntiprotonClu3
which uses pipelined send-receive message passing operations
and which overlaps computation with communication.
<P>
In package edu.rit.numeric.plot.impl:
Fixed a bug in class XYPlot;
an exception was thrown when plotting a line
for a data series with one data point.

<P><DT>07-Feb-2008
<DD>
In package edu.rit.clu.antimatter:
Changed the antiproton simulation physics
so the antiprotons are confined by a perpendicular magnetic field
instead of by charged trap walls.
Changed program AntiprotonAni
to display the antiproton positions and the total momentum.
Added class AntiprotonFile,
and changed programs AntiprotonSeq and AntiprotonClu
to store snapshots of the antiproton positions
and the total momentum in a file.
Added the AntiprotonPlot program
to plot the data in an antiproton file.

<P><DT>03-Feb-2008
<DD>
In package edu.rit.clu.fractal:
Added classes MSHistogramSeq and MSHistogramClu,
sequential and cluster parallel programs
to compute a histogram of the Mandelbrot Set
and print it into a file.
<P>
In package edu.rit.smp.fractal:
Changed classes MSHistogramSeq, MSHistogramSmp,
MSHistogramSmp2, and MSHistogramSmp3
to print the histogram into a file.
<P>
In package edu.rit.numeric:
Added class Cubic for solving cubic equations.

<P><DT>19-Jan-2008
<DD>
In package edu.rit.pj:
Fixed a bug in class Comm;
due to a race condition,
a <TT>floodReceive()</TT> operation
would sometimes throw a NullPointerException.
<P>
In package edu.rit.mp:
Added a channel group ID to class ChannelGroup.
Added methods to class Channel
to obtain the channel group IDs
of the near end channel group
and the far end channel group.
These changes were needed to fix the aforementioned bug.
<P>
In the unnamed package:
Added the <TT>pjrun</TT> program;
this lets a user run a non-PJ job on a PJ cluster,
using the PJ job queue to assign backend nodes to the job.

<P><DT>13-Jan-2008
<DD>
In package edu.rit.io:
Added class DoubleMatrixFile
for reading and writing <TT>double[][]</TT> matrices,
or portions thereof,
from and to files.
<P>
In package edu.rit.smp.network:
Changed all the programs
to use class edu.rit.io.DoubleMatrixFile
for input and output of the distance matrix files.
<P>
In package edu.rit.clu.network:
Changed all the programs
to use class edu.rit.io.DoubleMatrixFile
for input and output of the distance matrix files.
Changed class FloydClu
so that each process reads a slice of the distance matrix from the input file
and writes a slice of the distance matrix to a per-process output file.

<P><DT>31-Dec-2007
<DD>
In package edu.rit.pj:
Made the <TT>start()</TT> and <TT>next()</TT> methods
of classes IntegerSchedule and LongSchedule public;
this lets a schedule object divide a range into chunks
apart from a parallel for loop.
<P>
In package edu.rit.clu.fractal:
Rewrote class MandelbrotSetClu2.
Added class MandelbrotSetClu3.
<P>
In package edu.rit.io:
Fixed a bug in class Files;
the <TT>fileForRank()</TT> method
did not return the correct result
if the argument was an absolute path.

<P><DT>23-Dec-2007
<DD>
In package edu.rit.pj.cluster:
Added class HybridJobScheduler,
a Job Scheduler Daemon program
for a hybrid SMP cluster parallel computer
that is able to schedule multiple processes
and multiple threads per process
on each backend node.
Added class HybridConfiguration
to provide configuration information
for the hybrid job scheduler.
Added classes HybridBackendInfo and HybridJobInfo
to hold information about backend nodes and jobs
in the hybrid job scheduler.
<P>
In package edu.rit.mp:
Changed interface ConnectListener
to have separate methods
for reporting near-end-initiated connections
and far-end-initiated connections.
Changed class ChannelGroup
not to start listening for incoming connections
until a new <TT>startListening()</TT> method is called.
Changed class ChannelGroup
to eliminate the methods that query for channels.
These changes were needed
to support the new hybrid job scheduler.
<P>
In package edu.rit.pj:
Changed class Comm
so that when one process
initiates a connection to another process,
the initiating process sends a message
identifying the initiating process's rank.
This change was needed
to support the new hybrid job scheduler.
<P>
Changed several classes throughout the Library
to use 128 extra padding bytes to avert cache interference,
instead of 64.
(128 bytes is the more prevalent cache line size
in modern CPUs.)

<P><DT>12-Dec-2007
<DD>
In the unnamed package:
Added class View,
a main program that can display
either a drawing (class edu.rit.draw.Drawing)
or a plot (class edu.rit.numeric.plot.Plot)
stored in a file.
The new View program supersedes
the old edu.rit.draw.View program
which was removed.
<P>
In class edu.rit.numeric.plot.Plot:
Made the class serializable.
Added static methods to read and write Plot objects
from and to files.
Removed the <TT>display()</TT> and <TT>repaint()</TT> methods;
their functionality is now available through the Viewable interface.
<P>
In package edu.rit.swing:
Added interface Viewable which extends interface Displayable;
to show itself on the screen,
a Viewable object can return a DisplayableFrame.
Drawings and plots are now Viewable objects.
Changed class DisplayableFrame
so that when it saves the displayable object in a PNG file,
the object is saved at its zoomed size.

<P><DT>08-Dec-2007
<DD>
In the unnamed package:
Added class ncc,
a main program to compute
the Non-Comment Characters (NCC) metric
for a group of Java source files.

<P><DT>27-Nov-2007
<DD>
The Parallel Java Library is now released
under Version 3 of the GNU General Public License.
<P>
Rewrote package edu.rit.image.
It now contains classes
for 24-bit color images
and 8-bit grayscale images
in the Parallel Java Graphics (PJG) image file format.
PJG image files are somewhat larger than,
but take much less time to write than,
PNG image files.
For further information, see class PJGImage.
<P>
In the unnamed package:
Added program PJG to display an image read from a PJG file.
<P>
In package edu.rit.smp.fractal:
Updated the Mandelbrot Set SMP parallel programs
to generate a PJG image file
instead of a PNG image file.
<P>
In package edu.rit.clu.fractal:
Updated the Mandelbrot Set cluster parallel programs
to use the matrix allocation and deallocation operations
in class edu.rit.util.Arrays
and to generate a PJG image file
instead of a PNG image file.
<P>
In package edu.rit.mp:
Added a static <TT>emptyBuffer()</TT> factory method
to each buffer subclass.
Fixed a bug in class NetworkChannelReceiveThread;
an incoming message was not received properly
if the number of items in the message
exceeded the number of items in the destination buffer.
Removed the I/O completion hook and chained I/O request capabilities
from class IORequest;
these reduced message passing performance too much.
Changed the non-blocking send and receive methods
in class ChannelGroup
to take an IORequest argument
instead of creating their own new IORequest object.
<P>
In package edu.rit.pj:
Removed enumeration Wait.
In its place, added class BarrierAction
to specify what should happen during a barrier synchronization.
Changed all the <TT>execute()</TT> methods in class ParallelRegion
to use class BarrierAction
instead of enumeration Wait.
In class Comm,
changed the implementation of flood-receive
to use a special subclass of class IORequest
instead of an I/O completion hook.
<P>
In package edu.rit.draw.item:
Added class Polygon.

<P><DT>26-Oct-2007
<DD>
In class edu.rit.util.Arrays:
Fixed bugs in the <TT>copy()</TT> methods;
the wrong index upper bound was calculated.
Added <TT>allocate()</TT>, <TT>deallocate()</TT>,
<TT>length()</TT>, <TT>rowLength()</TT>, and <TT>colLength()</TT> methods.
<P>
In package edu.rit.mp:
Fixed bugs in the factory methods in the buffer base classes;
the factory methods would fail if a matrix row was not allocated;
the factory methods were changed to return a zero-length buffer instead.
<P>
In package edu.rit.mp.buf:
Moved precondition checks
out of the buffer subclass constructors
into the buffer base class factory methods
in package edu.rit.mp.

<P><DT>21-Oct-2007
<DD>
In class edu.rit.pj.cluster.JobFrontend:
The SSH session on the backend processor
now runs the job backend process in the background
and terminates immediately
without waiting for the job backend process to terminate.
The SSH session no longer stays around
while the job is executing.
<P>
In class edu.rit.pj.Comm:
Added the <TT>host()</TT> method.
<P>
In class edu.rit.numeric.Plot:
Added a "Format" menu to the plot window
that lets the user change plot attributes interactively.
<P>
In class edu.rit.swing.DisplayableFrame:
Added a "Fit Window" menu item to the "View" menu
that resizes the window to fit the displayable object.

<P><DT>03-Oct-2007
<DD>
In package edu.rit.pj:
Added the <TT>barrier()</TT> method with a barrier action
to class ParallelRegion.
Added the <TT>floodSend()</TT> and <TT>floodReceive()</TT> methods
to class Comm.
Added the <TT>isFinished()</TT> method to class CommRequest.
<P>
In package edu.rit.mp:
Added the <TT>isFinished()</TT> method to class IORequest.
Added I/O request chaining and I/O completion hook capabilities
to class IORequest and class ChannelGroup.
These are used to implement flood-send and flood-receive.
<P>
In package edu.rit.clu.keysearch:
Changed the FindKeyClu2 program
to use flood-send and flood-receive
to stop the search when any process finds the key.
<P>
In the unnamed package:
Added class Program1Clu,
an introductory parallel program for a cluster.

<P><DT>07-Sep-2007
<DD>
In package edu.rit.smp.fractal:
Added program MSHistogramSmp2
to compute a histogram of the Mandelbrot Set
using the parallel reduction pattern.
Added program MSHistogramSmp3
to compute a histogram of the Mandelbrot Set
using a critical section.
<P>
In package edu.rit.pj.reduction:
In each of the shared array classes,
added a method to reduce a portion of the shared array
with a portion of a given array.
<P>
In package edu.rit.pj:
Added the <TT>team()</TT> and <TT>region()</TT> methods
to class ParallelConstruct.
Added the <TT>isExecutingInParallel()</TT> and <TT>region()</TT> method
to class ParallelTeam.
Changed the implementation of the parallel constructs'
low-level thread synchronization
to improve performance.

<P><DT>22-Aug-2007
<DD>
In package edu.rit.numeric:
Added interface Function,
class SampledXYSeries,
class TransformedSeries,
class TransformedXYSeries,
class TransformedXYZSeries,
and class Interpolation.
<P>
In package edu.rit.numeric.plot:
Added the ability to specify
bold, italic, superscript, and subscript text attributes
in plot labels.
Added the ability to draw a smooth curve for an X-Y data series.
<P>
In package edu.rit.draw.item:
Added class Bow to draw curved (bowed) lines.
Added class Oval to draw ovals.
Added a round corner attribute to class Rectangle.
Added class Group to permit a group of drawing items
to be translated and rotated as a unit.

<P><DT>03-Jul-2007
<DD>
In package edu.rit.pj.cluster:
Certain messages from the job frontend to the job backends
are no longer sent using a parallel broadcast tree;
eliminating the parallel broadcast tree
reduced the program's running time.

<P><DT>28-Jun-2007
<DD>
In package edu.rit.pj:
Re-implemented the SMP parallel programming classes
to use more extensively the Java Concurrency Utilities
in packages java.util.concurrent,
java.util.concurrent.atomic,
and java.util.concurrent.locks.
Eliminated class ParallelSectionGroup;
in its place is a ParallelRegion <TT>execute()</TT> method
that can take any number of ParallelSection arguments.
Eliminated the <TT>noWait()</TT> method
of various parallel constructs;
in its place is a ParallelRegion <TT>execute()</TT> method argument
telling whether the parallel team threads should wait for each other
at the end of a parallel construct.
Changed classes Schedule and LongSchedule
so that user-defined schedule subclasses
can be written;
such schedule subclasses can also be specified at run time
with a command line flag (<TT>-Dpj.schedule</TT>).
<P>
Consolidated packages edu.rit.pj.op and edu.rit.pj.shared
into one package, edu.rit.pj.reduction.
The new package has classes
for thread safe shared reduction variables
of each primitive type and of object types,
and arrays thereof.
The new package also has classes
for binary reduction operators
of each primitive type as well as object types.
Shifted the <TT>getReductionBuf()</TT> method
from class edu.rit.pj.op.Op
to class edu.rit.mp.Buf.
<P>
In package edu.rit.util:
Added a stride to classes Range and LongRange.
<P>
In packages edu.rit.mp and edu.rit.mp.buf:
The factory methods for creating buffer objects
are now in the base classes in package edu.rit.mp.
Factory methods are provided for single items,
arrays, matrices,
thread safe shared items,
and thread safe shared arrays
of each primitive type
and of object types.
All the buffer classes
for slices of arrays and matrices
now support ranges with a stride of 1
and ranges with a stride greater than 1.
<P>
In package edu.rit.pj.cluster:
Added class Configuration
to encapsulate the cluster configuration file.
Added the ability to specify JVM command line flags
in the configuration file.
Fixed a bug in class JobFrontend;
the command to run a job backend process did not work
if the working directory name contained whitespace.
<P>
Added package edu.rit.numeric
with classes for numerical computation.
Added packages edu.rit.numeric.plot
and edu.rit.numeric.plot.impl
with classes for creating plots,
displaying them on the screen,
and writing them to PNG or PostScript files.
<P>
In the unnamed package:
Added programs Speedup and TimeFit
for analyzing parallel program running time measurements.

<P><DT>14-May-2007
<DD>
In package edu.rit.phyl.pars:
Changed class DnaSequence to add extra padding
to the byte array holding the sites,
to avert cache interference in an SMP parallel program.
Added class MaxParsBnb2,
a main program for branch-and-bound search
that does not shuffle the input DNA sequences
into descending distance order.
(Class MaxParsBnb does shuffle the input DNA sequences
into descending distance order.)

<P><DT>06-May-2007
<DD>
In package edu.rit.phyl.pars:
Made several further changes
to reduce the storage requirement and running time
of the MaxParsExh program.
Added the MaxParsBnb and MaxParsSmp programs;
these are a sequential and an SMP parallel version
of a phylogenetic tree construction program
using branch-and-bound search.

<P><DT>02-May-2007
<DD>
Added the <TT>allReduce()</TT> and <TT>barrier()</TT> methods
to class edu.rit.pj.Comm.
Added class edu.rit.mp.buf.EmptyIntegerBuf.

<P><DT>23-Apr-2007
<DD>
In package edu.rit.phyl.pars:
Changed class DnaSequence
to share the base sequence storage array
among different DNA sequence objects where possible;
this reduces the storage requirement and running time
of the MaxParsExh tree construction program.

<P><DT>22-Apr-2007
<DD>
Added packages edu.rit.phyl, edu.rit.phyl.pars,
and edu.rit.phyl.pars.test
with classes and programs
for maximum parsimony phylogenetic tree construction.
At present there is one tree construction program,
class edu.rit.phyl.pars.MaxParsExh,
which uses an exhaustive search.

<P><DT>09-Apr-2007
<DD>
Added package edu.rit.hyb.prime
with hybrid SMP cluster parallel programs
for parallel querying of a datastore of prime numbers
(classes Prime32Seq and Prime32Hyb).

<P><DT>07-Apr-2007
<DD>
In package edu.rit.hyb.antimatter:
Fixed a bug in class AntiprotonHyb;
when running with multiple threads,
the program did not ensure
that all force calculations had completed
before updating the antiproton positions.

<P><DT>02-Apr-2007
<DD>
In class edu.rit.pj.Comm:
Added the <TT>createComm()</TT> method
for creating a new communicator.
<P>
Added package edu.rit.hyb.antimatter
with hybrid SMP cluster parallel programs
for simulating antiproton motion in an antiproton trap
(classes AntiprotonHyb and RenderSeq).

<P><DT>24-Mar-2007
<DD>
Added package edu.rit.hyb.network
with hybrid SMP cluster parallel programs
for calculating all shortest paths in a graph using Floyd's Algorithm.

<P><DT>21-Mar-2007
<DD>
Added package edu.rit.hyb.keysearch
with hybrid SMP cluster parallel programs for AES partial key search.
Added package edu.rit.hyb.fractal
with hybrid SMP cluster parallel programs
for calculating the Mandelbrot Set.

<P><DT>18-Mar-2007
<DD>
In package edu.rit.pj:
Fixed a bug in class Comm;
the <TT>reduce()</TT> method permitted multiple threads
to receive into the reduction buffer simultaneously,
but buffers are not designed to be multiple thread safe
for receiving.

<P><DT>17-Mar-2007
<DD>
In package edu.rit.pj.cluster:
Changed the Job Frontend to use SSH
to spawn Job Backend processes.
This authenticates the Job Backend processes
into the user's account
and allows the Job Backend processes
to access the user's files directly
without having to go through the Job Frontend process.
(Eliminating the use of SSH
in the 06-Nov-2006 version
proved to be a mistake.)

<P><DT>16-Feb-2007
<DD>
Added the <TT>reset()</TT> method
to classes edu.rit.mp.ObjectBuf,
edu.rit.mp.buf.ObjectItemBuf,
edu.rit.mp.buf.ObjectArrayBuf,
and edu.rit.mp.buf.ObjectMatrixBuf.
The <TT>reset()</TT> method must be called
when the state of any object in the buffer changes.

<P><DT>14-Feb-2007
<DD>
Fixed a bug in class edu.rit.pj.Comm;
the <TT>receive()</TT> method sometimes threw a NullPointerException
when receiving a message from any process (<TT>fromRank</TT> = null).

<P><DT>13-Feb-2007
<DD>
In package edu.rit.clu.antimatter:
Added more cluster parallel programs
for simulating antiproton motion in an antiproton trap
(classes AntiprotonClu2 and AntiprotonClu3).

<P><DT>10-Feb-2007
<DD>
In class edu.rit.mp.ChannelGroup:
Added the <TT>channelToHost()</TT>,
<TT>waitForChannelTo()</TT>,
and <TT>waitForChannelToHost()</TT> methods.
<P>
In class edu.rit.pj.Comm:
Rewrote the <TT>allGather()</TT> method
to use a significantly faster message pattern.
Rewrote the logic for connecting channels
between backend processes.
Added caching of message pattern information
in the <TT>broadcast()</TT>, <TT>allGather()</TT>,
and <TT>reduce()</TT> methods.

<P><DT>08-Feb-2007
<DD>
Added package edu.rit.clu.antimatter
with cluster parallel programs
for simulating antiproton motion in an antiproton trap
(classes AntiprotonAni, AntiprotonSeq, and AntiprotonClu).
<P>
Removed package edu.rit.clu.particles;
package edu.rit.clu.antimatter took its place.

<P><DT>06-Feb-2007
<DD>
In package edu.rit.clu.network:
Rewrote the cluster parallel programs
for calculating all shortest paths in a graph using Floyd's Algorithm
(classes FloydSeq and FloydClu).
<P>
In package edu.rit.clu.timing:
Added class TimeSendDouble
to measure the time required to send a message
whose data items are type <TT>double</TT>.

<P><DT>01-Feb-2007
<DD>
In package edu.rit.clu.monte:
Rewrote the cluster parallel programs
for calculating &pi; using a Monte Carlo technique
(classes PiSeq and PiClu).
<P>
In package edu.rit.clu.fractal:
Fixed a bug in class MandelbrotSetClu4;
the program did not properly overlap
sending the previous slice and computing the next slice.
<P>
In package edu.rit.util:
Fixed a bug in class Random;
the <TT>nextInt()</TT> method
could sometimes consume more than one value
from the pseudorandom sequence,
leading to incorrect sequence splitting in a parallel program.

<P><DT>30-Jan-2007
<DD>
In package edu.rit.clu.fractal:
Added two more cluster parallel programs
for calculating the Mandelbrot Set
(classes MandelbrotSetClu3, MandelbrotSetClu4).

<P><DT>24-Jan-2007
<DD>
In package edu.rit.clu.fractal:
Rewrote the cluster parallel programs
for calculating the Mandelbrot Set
(classes MandelbrotSetSeq, MandelbrotSetClu, MandelbrotSetClu2).
<P>
In package edu.rit.clu.timing:
Changed the output format for classes TimeSend and TimeBcast.
<P>
In class edu.rit.pj.PJProperties:
Added the <TT>pj.jobtime</TT> Java system property
to set the maximum running time for a job.
<P>
In package edu.rit.mp:
Fixed a bug in class ChannelGroup;
if one thread tried to send a message
to another thread in the same process,
a deadlock could happen.

<P><DT>16-Jan-2007
<DD>
In package edu.rit.clu.keysearch:
Rewrote the cluster parallel programs for AES partial key search.

<P><DT>15-Jan-2007
<DD>
In package edu.rit.pj.cluster:
Fixed a bug in class JobFrontend;
the job frontend's lease timers for the job backend
were not started at the correct time,
which could result in an incorrect lease timeout
that incorrectly aborted the job.

<P><DT>14-Jan-2007
<DD>
In package edu.rit.pj.cluster:
Changed the Job Scheduler;
when a job frontend process reports that a job backend process failed,
the Job Scheduler will keep the backend processor available.

<P><DT>10-Jan-2007
<DD>
In package edu.rit.image:
Added class SyncGrayImage
providing a grayscale image class
with producer-consumer synchronization.
<P>
In class edu.rit.pj.ParallelRegion:
Added <TT>reductionArray()</TT> methods
to create reduction variables containing arrays of the primitive types.
<P>
In package edu.rit.smp.network:
Minor changes to the Floyd's Algorithm programs.
<P>
Removed obsolete package edu.rit.smp.sort.

<P><DT>22-Dec-2006
<DD>
In package edu.rit.util:
Added classes Random and DefaultRandom.
These provide a pseudorandom number generator (PRNG)
designed for use in parallel scientific programming.
<P>
Made some minor changes to the parallel programs
in packages edu.rit.smp.fractal
and edu.rit.smp.monte.

<P><DT>20-Nov-2006
<DD>
In packages edu.rit.mp and edu.rit.mp.buf:
Fixed a bug in the Message Protocol;
a message was not received properly
if the destination buffer was larger
than the number of items in the message.
<P>
In package edu.rit.pj.cluster:
Changed the frontend file I/O capability
to reduce the number of byte array copy operations.

<P><DT>09-Nov-2006
<DD>
In package edu.rit.pj.cluster:
Changed class FrontendFileWriter
to perform all file operations in a separate thread,
to avoid blocking the job frontend's message processing thread.
(Class FrontendFileReader already works this way.)

<P><DT>07-Nov-2006
<DD>
Some minor changes in the Job Scheduler Daemon's web interface.
Fixed a bug in class edu.rit.pj.Comm;
a NullPointerException occurred
when a job was run
on a machine with no Job Scheduler Daemon.

<P><DT>06-Nov-2006
<DD>
A major redesign of the PJ message passing middleware
for cluster parallel programming.
The goals of the redesign
are to reduce the time needed to send messages
and to make it easier to deploy and use PJ
on cluster parallel computers.
The principal changes are:
<UL>
<LI>
In package edu.rit.mp:
Changed the channel and channel group classes
to use Java "Old I/O" (thread-based)
instead of Java "New I/O" (selector-based).
Old I/O's measured performance is better than New I/O's.
<LI>
In package edu.rit.pj.cluster:
Eliminated the use of SSH to launch backend processes;
PJ now has its own Job Launcher written in 100% Java.
The job frontend process runs in the user's account as before,
but the job backend processes are no longer authenticated
into the user's account;
rather, they run in a separate PJ account.
Eliminating SSH greatly reduces the startup time for a PJ job.
All the other classes were rewritten as well.
The Job Scheduler now has a web interface
for displaying the cluster status.
<LI>
In package edu.rit.pj:
Changed the implementation of class Comm
to use the new classes in package edu.rit.pj.cluster.
However, the exported methods of class Comm
still have the same signatures as before,
so programs using class Comm do not need to change.
<LI>
Added package edu.rit.pj.io with class StreamFile.
This class lets a PJ program running in the PJ account on a backend processor
read and write files stored in the user's account on the frontend processor.
This capability is needed
because PJ no longer authenticates the job backend processes
into the user's account.
Instead, using class StreamFile, the job backend processes
communicate with the job frontend process
(which is authenticated into the user's account)
to read and write files.
All the application programs were changed to use class StreamFile.
</UL>

<P><DT>09-Mar-2006
<DD>
Removed the deprecated package edu.rit.matrix.
Removed the deprecated constructors
in the array buffer classes
in package edu.rit.mp.buf.
<P>
In package edu.rit.pj:
Changed the name of class Status to class CommStatus
to emphasize that the class stores the status
of a communication operation in class Comm.

<P><DT>20-Feb-2006
<DD>
Added non-blocking send and receive operations
to class edu.rit.pj.Comm.
<P>
In package edu.rit.mp.buf:
Added buffer classes for matrices of all primitive types.
Added a buffer class for a matrix of objects.
<P>
Fixed a bug in class edu.rit.clu.particles.ProtonClu3;
computation and communication used the same array,
so incoming new data could overwrite the previous data
being used in the computation.

<P><DT>16-Feb-2006
<DD>
Added the send-receive operation to class edu.rit.pj.Comm,
including a non-blocking version.
<P>
In package edu.rit.clu.particles:
Added more cluster parallel programs
for the Particle Simulation,
an <I>N</I>-bodies problem.

<P><DT>14-Feb-2006
<DD>
Added the all-gather operation to class edu.rit.pj.Comm.
<P>
Added package edu.rit.vector
with class Vector2D,
a two-dimensional mathematical vector of doubles,
as well as buffer classes
for sending and receiving 2-D vectors
in message passing parallel programs.
<P>
Added package edu.rit.clu.particles
with sequential and cluster parallel programs
for the Particle Simulation,
an <I>N</I>-bodies problem.

<P><DT>12-Feb-2006
<DD>
Package edu.rit.matrix was deprecated.
The classes in this package are still available
but should no longer be used.
Package edu.rit.matrix will be removed
in a future release of the Parallel Java Library.
The package was deprecated because
accessing arrays and matrices using class methods
takes too long in a parallel program.
<P>
Added package edu.rit.image.
This package contains image classes
equivalent to the ones in package edu.rit.matrix.
However, to improve running times,
the new image classes
operate on primitive matrices
(type <TT>byte[][]</TT> or <TT>int[][]</TT>)
instead of the matrix classes.
<P>
In package edu.rit.mp.buf:
Added matrix buffer classes
equivalent to the ones in package edu.rit.matrix
for byte, double, and integer matrices.
However, to improve running times,
the new matrix buffer classes
operate on primitive matrices
instead of the matrix classes.
<P>
In package edu.rit.mp.buf:
The constructors in all the array buffer classes
were deprecated,
and static factory methods were added.
The constructors are still available
but should no longer be used.
The constructors will be removed
in a future release of the Parallel Java Library.
The constructors were deprecated
because the static factory methods
provide greater programming flexibility.
<P>
Revised code throughout the Parallel Java Library
not to use the deprecated classes and constructors.

<P><DT>10-Feb-2006
<DD>
In package edu.rit.matrix:
Added reduction operations to classes
ParallelDoubleArray, ParallelDoubleMatrix,
ParallelIntegerArray, and ParallelIntegerMatrix.
Added classes
ParallelByteArray, ParallelByteMatrix, and RowSliceByteMatrix.
<P>
Fixed a bug in class edu.rit.matrix.ByteMatrixBuf;
the I/O buffer position was not set properly
after sending items from or receiving items into
the byte matrix buffer.

<P><DT>08-Feb-2006
<DD>
In package edu.rit.pj:
Added the <TT>reduce()</TT> method to class Comm
to do parallel reduction in a message passing program.
<P>
Added package edu.rit.pj.op
with classes for binary operations
to do parallel reduction in a message passing program.
<P>
Added package edu.rit.clu.network with cluster parallel programs
for computing all shortest paths in a network
using Floyd's Algorithm,
an example of an algorithm
that uses broadcasting on a cluster parallel computer.
<P>
Added package edu.rit.clu.monte with cluster parallel programs
for computing &pi; using a Monte Carlo technique,
an example of an algorithm
that uses reduction on a cluster parallel computer.
<P>
Fixed a bug in the matrix classes of package edu.rit.matrix;
the <TT>row()</TT> method
did not create a reference to the correct row
if the full matrix was not allocated.

<P><DT>04-Feb-2006
<DD>
In package edu.rit.matrix:
Added message buffer classes 
for sending and receiving matrix elements
in message passing operations.
<P>
In package edu.rit.pj:
Added class RangeSchedule
for writing cluster parallel programs
using the master-worker pattern.
<P>
In package edu.rit.clu.fractal:
Added cluster parallel program MandelbrotSetClu2
that computes the Mandelbrot Set
using the master-worker pattern for load balancing.
Added cluster parallel program MandelbrotSetClu3
that computes the Mandelbrot Set
using the master-worker pattern for load balancing
and uses overlapped computation and I/O.
<P>
Fixed a bug in class edu.rit.pj.Comm;
a deadlock could happen
when a process did a receive from "any channel."

<P><DT>01-Feb-2006
<DD>
Fixed a bug involving packages edu.rit.mp,
edu.rit.pj, and edu.rit.pj.cluster;
when an object was sent in a message through a communicator,
and the object's class was not part of the PJ Library,
the object would not deserialize properly at the destination
(an exception would be thrown).

<P><DT>30-Jan-2006
<DD>
In package edu.rit.mp:
Redesigned the package again.
The separate Src and Dst classes
were combined into a single Buf class
for both sending and receiving messages.
The message buffer subclasses were moved into package edu.rit.mp.buf.
Package edu.rit.mp.data was eliminated.
Added the ability to have multiple threads
sending messages simultaneously
using the same message buffer.
Added a loopback channel capability
so that a process can send and receive messages to and from itself
in different threads.
Added non-blocking send and receive operations.
<P>
In package edu.rit.pj:
Class Comm was changed
to use class edu.rit.mp.Buf as the message buffer.
Interface edu.rit.pj.Buffer and package edu.rit.pj.data were eliminated.
Added the ability for a process
to send and receive a message to and from itself
in different threads.
Added the scatter and gather collective communication methods.
<P>
In package edu.rit.matrix:
Added classes ParallelIntegerMatrix,
RowSliceIntegerMatrix,
and IntegerMatrixBuf
with methods for transferring integer matrices between processes
using message passing.
<P>
Added package edu.rit.clu.fractal
with cluster parallel programs
for computing an image of the Mandelbrot Set,
an example of a massively parallel problem
that needs load balancing.

<P><DT>26-Jan-2006
<DD>
Fixed a bug in class edu.rit.mp.ChannelGroup;
improper thread synchronization sometimes caused a deadlock.

<P><DT>24-Jan-2006
<DD>
Extensive changes and additions
to the message passing portion of Parallel Java.
In package edu.rit.mp:
Redesigned the item source and item destination classes.
Coalesced former packages edu.rit.mp.src and edu.rit.mp.dst
into one new package edu.rit.mp.data.
<P>
In package edu.rit.pj:
Added <TT>send()</TT>, <TT>receive()</TT>, and <TT>broadcast()</TT>
communication methods to class Comm.
Added package edu.rit.pj.data with classes for message data buffers.
Made many changes to package edu.rit.pj.cluster
to support the new Comm capabilities.
<P>
Added package edu.rit.clu.keysearch with cluster parallel programs
for breaking a block cipher using exhaustive key search,
an example of a massively parallel problem.
<P>
Added package edu.rit.clu.timing with cluster parallel programs
for timing the send, receive, and broadcast methods
in class edu.rit.pj.Comm.
<P>
Fixed a bug in class edu.rit.pj.Lock;
exclusive locking was not implemented properly.
Fixed a bug in class edu.rit.pj.cluster.BackendClassLoader;
improper thread synchronization sometimes caused
a ClassCircularityError.

<P><DT>14-Jan-2006
<DD>
In package edu.rit.pj:
Added class Reduction which encapsulates a reduction variable
for use in the parallel reduction pattern.
Added a method to class ParallelRegion
to associate a reduction variable with the parallel region.
Added class Lock for exclusive and nonexclusive locking.
Changed the critical region methods in class ParallelRegion
to use class Lock instead of class java.util.concurrent.locks.ReentrantLock.
<P>
In package edu.rit.smp.sort:
Redesigned the SwapSortSeq and SwapSortSmp programs.
Added the SwapSortSmp2 program
which does a parallel reduction using a reduction variable.
<P>
In package edu.rit.pj.cluster:
Fixed a bug in class JobFrontend;
the job frontend did not wait for end-of-stream
on the SSH session's standard output and standard error
before exiting.

<P><DT>12-Jan-2006
<DD>
Added package edu.rit.smp.sort with
programs for sorting,
as an additional illustration of parallel reduction
and parallel team thread synchronization.

<P><DT>09-Jan-2006
<DD>
Added package edu.rit.smp.network with
programs for computing all shortest paths in a network
using Floyd's Algorithm,
an example of an algorithm
with dependencies between loop iterations
that affect how the algorithm is parallelized.

<P><DT>06-Jan-2006
<DD>
Added package edu.rit.mp with classes for message passing.
Added package edu.rit.mp.src with classes for message item sources.
Added package edu.rit.mp.dst with classes for message item destinations.
Added package edu.rit.mp.test
with unit test programs for package edu.rit.mp.
<P>
Added package edu.rit.pj.cluster
with message passing middleware classes
for PJ message passing parallel programs.
<P>
In package edu.rit.pj:
Added class Comm
for using the message passing middleware
in a PJ parallel program.
At present,
class Comm has a method
for initializing the message passing middleware
and running a PJ parallel program
on the backend processors of a cluster parallel computer.
In future releases,
class Comm will include methods for message passing.

<P><DT>14-Dec-2005
<DD>
In package edu.rit.util:
Added class Checklist for synchronizing producer and consumer threads.
<P>
In package edu.rit.matrix:
Added class SyncColorImage with producer-synchronization.
<P>
In package edu.rit.smp.fractal:
Added class MandelbrotSetSmp2
with a program for computing an image of the Mandelbrot set
that uses overlapped computation and I/O
as well as a parallel loop.

<P><DT>12-Dec-2005
<DD>
In package edu.rit.smp.keysearch:
Added another program 
for breaking a block cipher using exhaustive key search.
<P>
In package edu.rit.matrix:
Added classes for treating an integer matrix
as a color image.
Added classes for treating a byte matrix
as an indexed color image.
<P>
Added package edu.rit.color with
classes for representing colors in different ways.
<P>
Added package edu.rit.smp.fractal with
programs for computing an image of the Mandelbrot Set,
an example of a massively parallel problem
that needs load balancing.

<P><DT>06-Dec-2005
<DD>
Added package edu.rit.smp.keysearch with
programs for breaking a block cipher using exhaustive key search,
an example of a massively parallel problem.
<P>
Added package edu.rit.crypto.blockcipher with
classes for the Advanced Encryption Standard (AES) block cipher,
used by the aforementioned programs.
<P>
Added package edu.rit.util with:
class Range to represent a range of indexes;
class HexPrintStream to print things in hexadecimal.
<P>
Added package edu.rit.matrix with:
classes for one-dimensional arrays
and matrices (two-dimensional arrays)
of various data types;
and classes for treating
a byte matrix as a grayscale image.

<P><DT>15-Sep-2005
<DD>
In package edu.rit.pj:
Added class ParallelIteration
to do parallel loops
over arrays, iterators, and iterable collections.
Added class ParallelConstruct
as a common base class for all parallel constructs
and moved the implementations of common methods there.
Changed the methods that throw "any exception"
to be declared as <TT>"throws Exception;"</TT>
rather than <TT>"throws Throwable;"</TT>.
<P>
In package edu.rit.pj.test:
Added program UC to test parallel iterations.

<P><DT>31-Aug-2005
<DD>
In package edu.rit.pj:
Rewrote all the classes pertaining to parallel for loops.
Loop index data types of both <TT>int</TT> and <TT>long</TT>
are now supported.
The default schedule is now a "runtime" schedule.
The name of the <TT>breakLoop()</TT> method
was changed to <TT>stopLoop()</TT>
to emphasize that its behavior is not the same
as a <TT>break</TT> statement.
<P>
In package edu.rit.pj.shared:
Added several additional arithmetic methods
to the shared variable wrapper classes.

<P><DT>02-May-2005
<DD>
The first complete version of PJ was released.
Package edu.rit.pj.shared now includes shared variable wrapper classes
for all the primitive types.

<P><DT>08-Apr-2005
<DD>
Another incomplete version of PJ was released.
In package edu.rit.pj:
Added the <TT>ordered()</TT> method in class ParallelForLoop.
Changed the specification of the <TT>noWait()</TT> method
in classes ParallelForLoop, ParallelSectionGroup, and ParallelSection.
Changed the specification of the <TT>single()</TT> method
in class ParallelRegion.
Fixed a bug in class Schedule and its subclasses.

<P><DT>21-Mar-2005
<DD>
Another incomplete version of PJ was released.
The following capabilities were added in package edu.rit.pj:
parallel execution of a group of parallel sections;
execution of a parallel section by a single parallel team thread;
execution of a parallel section in a critical region;
and breaking out of parallel for loops.
Some more unit test programs were added in package edu.rit.pj.test.

<P><DT>16-Mar-2005
<DD>
An initial incomplete version of PJ was released.
This includes: initial versions of
the parallel team, parallel region, and parallel for loop classes
in package edu.rit.pj;
a shared integer variable class in package edu.rit.pj.shared;
some unit test programs in package edu.rit.pj.test;
and some parallel Monte Carlo programs
in package edu.rit.smp.monte.

</DL>

</BODY>
</HTML>