Release History
2005.5.3 Release 1.10
Enhancements
- The JICOS
distribution now has 4 parts (please see the Administration/Downloading
page for details):
- One for deploying a JICOS system, &
developing and running JICOS applications.
- One for system development of JICOS itself.
- One for using JICOS via ant (this is
optional), if you do not have ant already running on your system.
- One that has the JICOS web pages.
- Non-Java (External)
services: This release
supports non-Java clients and
services. JICOS
Task objects, in principle, now can
encapsulate computations that are executed as non-Java code. The
Tutorial illustrates the development and use of Matlab as an external
service.
- Administrative support:
This release is the debut of a tool for administering a JICOS
system. The following features are illustrated in the Tutorial:
- Starting
an
entire JICOS
service with 1 command via a JICOS
configuration file.
- Stopping an entire JICOS
service with 1
command.
Bug
fixes
- A bug in the fault
tolerance code having to do with cached
tasks has been fixed.
- A bug in the critical
path time computation has been fixed.
- A bug having to do with multiple task servers has been
fixed.
2005.1.21 Release 1.9
Enhancements
- The Java source file
is prefixed with an open source
license.
- We added an example of
a JICOS
client
decomposing a computation into pieces, sending each piece to the
Hosting Service Provider, getting the results, and assembling them into
the overall computational result. This process is illustrated with a
matrix product computation.
- The Hosting Service
Provider now starts a TaskServer in its
JVM. For many deployment scenarios, no other TaskServers need to be
started.
- Non-Java clients:
- This is a beta
release of functionality to
support non-Java clients.
- In the programming
tutorial, there is a new entry called
"External (Non-Java) Clients".
- If you play with
this functionality, please send us your
comments :)
- Host registration now
is decentralized: Hosts register
directly
with a task server. Currently, the host provides a list of machine
domain
names (at least 1). The host joins that task server whose machine name
appears
first on the list among those that have an RMI registry with a
registered
TaskServer service.
2003.11.17 Release 1.8
JANET
has been renamed JICOS.
In naming
the system JANET,
I forgot an important criterion,
pointed out to me by Jay Freeman: If you Google Janet, the JANET
project home page is not, and will never be, the first hit. OTOH, when
you Google Jicos, the JICOS
home page is
the
first hit. QED.
As of this release, JICOS
is under Subversion version
control. We gratefully ackknowledge Jay Freeman for nudging us to use
Subversion, and
for hosting the Subversion server at his site, saurik.com.
Enhancements
- HspState
now includes the hosting service
provider's ServiceName.
Please see the HspState API and
tutorial page.
- Exposed Graph
interface
and its implementation by GraphImpl
and GraphEuclidean.
The Graph interface includes 2 methods having to do with maximum
matching:
- minCostMaxMatch
- maxCostMaxMatch.
- The Result class now has a method
that returns the critical path time:
long getCriticalPathTime()
A
critical directed path is a path of
tasks whose execution times sum to a number that is at least as long as
any other directed path of tasks. This method returns that time, in
milliseconds. - Task
prefetching is
now triggered when a task's
isAtomic() method evaluates to true. The default implementation of this
method evaluates to false. Typing the task class as Atomic now is
neither necessary nor sufficient. See the tutorial section on
prefetching for details. The API reflects the new Task method.
- Executing a task on the task server
is done when the task is ready to be executed and its executeOnServer
method evaluates to true. The default implementation of this method
evaluates to false. Typing the task
class as Compose now is neither necessary
nor sufficient. Please see the tutorial section on executing tasks on
the
task server. The API reflects the new Task method.
New Publications
- Ruben Gonzalez
Gutierrez. Implementation of Parallel
Algorithms in CORBA and JICOS. Degree final project, Escuela Superior
de Ingenieria en
Informatica, Universidad de Málaga, Spain, June, 2003.
- Peter Cappello.
Janet's Abstract Distributed Service
Component. Proc. 15th IASTED
Int. Conf. on Parallel and Distributed
Computing and Systems, pages 751
- 756, Marina del Rey, California,
Nov. 2003. (See
the Publications page.)
2003.9.12 Release 1.7.1
Bugs
- Fixed a bug
concerning ComputeException, the exception a
client gets when the client application has a task, which when executed
throws a runtime exception.
Enhancements
- Exposed via Javadoc
our weighted matching class for
general graphs whose execution time is O( n3
),
where n
is the
number of graph vertices. Look in the JICOS
package:
applications.utilities.graph.
- Added an exception
class, called JicosException.
If this exception is thrown, an unexpected JICOS
runtime
exception was thrown - a JICOS bug
- which
prevents the cleint application from proceeding. The exception is
propagated
to the client, and thrown on the client's outstanding compute
method
or getResult
method.
Although this
exception handling framework is fairly
general, very little of JICOS
currently is
covered by it.
As time permits, more of JICOS will be put
under
this framework.
2003.9.4 Release 1.7
Changed the name of the system from JICOS
to JANET
(Java-centric network
computing
service).
Bugs
- Fixed a bug in the
processing of asynchronous compute
requests, which was brought to my attention by Michal Sankot, from the
Czech Republic.
- Fixed a bug
concerning failed hosts: When a host fails,
its task server may have RequestTask commands from it, which should be
ignored. Michal Sankot also brought this problem to my attention.
Enhancements
- Added a getState
method to the Client2Hsp interface,
which returns a snapshot of the hosting service provider's state.
Please see the API for details.
- In conjunction with
the getState method mentioned above,
the API now has an HspState object.
- In conjunction with
the HspState object, the API now has
a ClientProfile object.
- Multiple clients
can login in to an HSP. However, the
FIFO processing of clients implies the need to queue client login
requests. The HspState
object has a queue (Qu object, see API) of ClientProfile objects.
New Publications
- A journal article
titled "Advanced eager scheduling for
Java-based adaptive parallel computing," to appear in Concurrency
and Computation: Practice and Experience.
The paper describes
Javelin's distributed branch and bound framework, illustrated on the
Traveling Salesman Problem, and
experiments using 1,000 processors in which good speedup was obtained.
This
completes our work on Javelin.
- A conference paper
titled "Jicos's Abstract Distributed
Service
Component," describing the object-oriented design of the JICOS
foundation layer, on which is built the 3
principal
components of JICOS:
The Hsp, the TaskServer,
and
the Host. This paper will appear in the Proc.,
15th IASTED Int.
Conf.
on Parallel and Distributed Computing and Systems, Nov.
2003.
- Michael O. Neary's
Ph.D. dissertation, concerning
Javelin, a predecessor to JICOS.
2003.7.25 Release 1.6.1
- Simplified the code
that manages the torous of TaskServers.
- Chris Coakley
identified and helped me fix serveral bugs
associated with the Host:
- When a host has
more than 1 available processor:
- a race condition
could result in a SetArg Command
being executed
before the TaskServer was aware of the existence of the Task whose
argument
was being set.
- Idle time, as had
been computed, does not make sense.
Rather than track idle time per CommandProcessor thread, it has been
omitted from the statistics. It may be reintroduced in the future.
- Made Shared objects
immutable.
- Task caching had a
bug that caused a marshalling
exception (OptionalDataException) under certain circumstances.
- Produced a Java class
for Harold Gabow's O( n3 )
implementation of Edmond's weighted maximum matching algorithm. This
proved to be more difficult
than it sounds. Ed Rothberg's C code for Gabow's implementation mimics
the
description in Gabow's dissertation. The Java code also mimics the
description
in Gabow's dissertation (which is to say that it is entirely
UNobject-oriented).
Where there are discrepencies between the dissertation and the C code,
I
opted to follow the C code. If you are interested in this Java class,
please
e-mail me.
2003.5.1 Release 1.6
- The design moved in
the direction of supporting an
arbitrary graph of TaskServers. However, the current implementation
connects the TaskServers as a torous, which eliminates the bandwidth
bottleneck associated with the root of the tree topology.
- I re-introduced an
asynchronous computing API: the client
application now can invoke the setComputation method, whose interface
is:
ResultId
setComputation( Task )
The method returns immediately with a ResultId that the application
caches. The application can subsequently retrieve a result with the
getResult method, whose interface is:
The Result
object has 2 components:
- ResultId
- Object - the
returned value of the computation.
The application uses the Result's ResultId to associate the Result
object's value with the Task whose corresponding setComputation
returned that ResultId.
I was persuaded that
this asynchronous API should be
re-introduced by a private email exchange with Dietmar Lippold. This
however is not to
say that this API will meet with his approval.
Please see the
Programming manual section titled "The
non-blocking computation request"
for a tutorial introduction to
this aspect of the API.
2003.3.27 Release 1.5.4
- The Invoice object
now contains Task execution statistics
by Task Class, for each Host, TaskServer and Hosting Service Provider.
Applications can output this information by invoking the Invoice
object's toString method. However, there are accessor methods so that
an application can manipulate this data programmatically (e.g., put
this data, or some computed function of it, into a database or a
spreadsheet). The JICOS
API documents what
methods are available to effect such manipulation.
Please see the
Programming tutorial section devoted to
Invoice, to see a simple use of this new Invoice in the Traveling
Salesman Problem example.
- The diffusion of
unassigned Task objects among TaskServers
has been improved significantly (although more will be done).
- The existing design
and Java code for JICOS have been
simplified.
2003.1.11 Release 1.5.3
- This is a
maintenance release, which mostly reflects a
refactoring of the foundation package.
- A small change to
the BranchAndBound API: The Solution
interface's getChildren method returns a Q object,, which is
a
LinkedList of Solution objects. The API for the Q class is included in
the javadoc.
2002.9.12 Release 1.5.2
- Jicos
Branch & Bound Framework.
- This framework is
discussed in the programming tutorial,
and applied in the Traveling Salesman Problem part of the tutorial. It
greatly simplifies implementing branch and bound search applications in
Jicos.
- Explicit
task prefetching
- In order to implement
the branch & bound framework in
a
manner that performs well for all such applications, explicit task
prefetching
is introduced into the API (an Environment method). This issue is
discussed
in the section of the programming tutorial devoted to the Branch and
Bound
framework. Task prefetching can be invoked from within any Task,
although
it generally is not necessary to do so. See the section of the tutorial
on
Performance.
2002.9.1: Release 1.5.1
This is a maintenance release, fixing:
- the bug where the
TaskServer main method ignores the
command line argument indicating how many Host objects to instantiate.
- an apparant bug that
caused a NullPointerException (this
matter
will be looked into more deeply).
2002.8.29: Release 1.5
This release introduces the following features:
- A standalone
Jicos environment can be constructed within
an application's JVM. Please see the programming tutorial.
- When a Host is
constructed, it determines the number of
processors available to its JVM, and starts that many Processor
objects -
threads that request & process Task
objects. Thus, a Host
instantiated on a quad-processor workstation, for example, would start
4 Processor threads. This is more efficient than starting 4 Hosts on 4
separate JVMs.
- The Hsp now has 2
optional command-line arguments:
- the number of
TaskServer objects to be started on the
same machine (default = 0)
- the number of Host
objects to be started on the same
machine (default = 0).
This feature is envisioned merely to easily create a non-trivial HSP
for testing. - The TaskServer
now has 1 optional command-line
argument: the number of Host objects to be started on the same machine
(default = 0).
Additionally, I did not send out a notice about the 1.4.2 release,
which nonetheless is significant. Please see its release notes below.
2002.8.27: Release 1.4.2
This release introduces an Exception: ComputeException. This is the way
that Task exceptions are reported to the application. When a task's
execute method throws an exception, it is passed to the HSP, which
throws a ComputeException after it has transferred the contents of the
task's exception to the ComputeException.
The most reasonable way I
could see to do this involves getStackTrace
and setStackTrace, Throwable
methods that are
available only in JDK 1.4
and later:
Jicos
1.4.2 thus requires a runtime environment of
JDK 1.4.*.
The
API also changed to support exception
reporting: The compute method is synchronous,
returning
the computation's value (what one used to get from invoking the Result
classes getValue()
method. Starting with this version of
Jicos, there no longer is a need for the Result
class, and
consequentlyno need for the Client2Hsp
getResult() method.
This may appear to qualify as a philosophical change. I don't think of
the issue of synchronous computing vs. asynchronous computing (a la
Linda) is very important. Perhaps I am missing something. In any case,
I have recorded the thinking that occurred to me yesterday here,
in case I wonder a month from
now what on earth possessed me to make this change. If
you think
that I may have made an error here, please advise.
2002.8.26: Release 1.4.1
This release fixes a bug (which caused an unmarshalling error) in the
class that the TaskServer uses to send Command objects to the Host.
2002.8.24: Release 1.4
This release unveils 2 kinds of changes:
- API
The Task execute
method no longer takes a Host as an
argument. A Task learns of its computational environment exclusively
via the Environment argument.
There is a new Task
subclass: Atomic,
used for application-directed Task prefetching. Please see API
&
the programming tutorial.
There are a few
application utility classes: AddInteger, MinIntegerSolution,
and IntUpperBound.
See the API & the programming tutorial.
Performance
enhancements
- The system
incorporates 3 new features that serve to
materially reduce the communication overhead:
- Task
caching
- Tasks that
generate subtasks with the Task compute
method will have their 1st child cached on the Host that generated them.
- Task
prefetching
- Tasks that are
typed Atomic trigger their Host to
initiate a Task prefectch before invoking the Atomic task's execute
method.
- TaskServer
evaluation
Selected tasks have their execute method invoked on the TaskServer
itself, rather than shipping it to a Host for execution. Currently,
there are only 2 such Task classes AddInteger &
MinIntegerSolution.
Others will be
added, but the system currently does not allow an arbitrary task to be
executed
on the TaskServer.
2002.8.20: Release
1.3.1.1
Maintenance release: This release removes the System.exit(1) statements
from the catch clauses of RemotException. These were inadvertantly left
in from system test, and cause the system to terminate when a
RemoteException is
caught (which is wrong for production, when, for example, a Host
fails).
2002.8.16: Release
1.3.1
The essential feature of this release is that the Jicos system has been
redesigned into a 2-layer architecture:
- foundation
- contains the
classes needed to make a distributed system
in Java;
- services
- contains the
classes needed to implement the Jicos Hsp,
TaskServer, & Host, all in terms of foundation classes.
2001.11.12: Release
1.3
The principal improvement is a simplification of the API, principally
task construction. These improvements are illustrated in the Programming
Manual.
A minor change concerns
some component name changes: Please
see the System
Administration Manual.
2001.10.29: Release
1.2
The principal improvement is the implementation of a network of task
servers. Prior releases supported just 1 task server, although the designof
Jicos always had this network. Jicos support for hosts now scales, in
principle, to an arbitrarily large set.
- A minor change: the
HSPAgent class's getNetwork method
is now named getHSP.
2001.9.30: Release
1.1.1
The principal improvements are:
- Some renaming of
components:
- Producer has
been renamed Host
- ProductionNetwork has been named HSP (meaning
Hosting Service Provider).
- A simpler API: A
task's execute method now is passed
only a reference to its Host. All Remote method invocations that used
to be on the TaskServer have been replaced with local method
invocations on the Host. These changes make for shorter, clearer,
simpler applications.
2001.9.8: Release
1.1
The principal improvements are:
- A simpler task
construction API.
- The ability to
use a weakly shared mutable object
among all the
tasks of a computation. The tutorial gives an example of this feature:
a
branch and bound application for solving the Traveling Salesman Problem.
2001.8.17: Release
1.0
The initial release of Jicos.
|