I set out to make project-specific prefs use the same object framework
(PREF_BOOL, PREF_NUM etc.) as other prefs.
This turned out to be infeasible, so I settled for a code cleanup instead.
The reason it's infeasible is that the "other prefs" code
uses a SAX parser (xml_parser_create() etc.),
while the code for project-specific prefs uses the primitive
parse_element() and parse_next_element() functions in util_basic.inc.
If I'm going to change anything, I want to switch to a DOM parser
(e.g. simplexml) for both purposes.
All vbox_job.xml to specify ranges of port forwardings,
and whether the access to the host ports is remote or local.
This is to support MPI for Rytis.
Notes:
- the existing feature (pf_guest_port) is used only for web graphics.
The host port is always dynamically assigned;
there's no reason to have <pf_host_port>; I removed it from the doc.
There's no reason to write the host port to a file; I removed that.
- The new feature is only for fixed host ports.
- The checkpoint file can stay the way it is.
There was at least one case where we weren't cleaning up
subsidiary processes (e.g. VMs) when a task's main process exited.
Fix this by consolidating task cleanup (shared mem and subsidiary processes)
in ACTIVE_TASK::cleanup_task().
This gets called when a tasks' main process exits.
This addresses a problem w/ Bitcoin Utopia,
whose coprocessor app (run via the wrapper) doesn't expect a --device arg,
and fails if it gets one.
The --device mechanism has been superceded by APP_INIT_DATA.gpu_device_num.
GPU apps built with the current API and later should not expect a --device arg.
Normally update_version gets the API version from the executable,
by scanning for the string API_VERSION.
However, if the project compresses executables this won't work.
So let it be specified in version.xml.
A "generic" coprocessor is one that's reported by the client,
but's not of a type that the scheduler knows about (NVIDIA, AMD, Intel).
With this commit the following works:
- On the client, define a <coproc> in your cc_config.xml
with a custom name, say 'miner_asic'.
- define a plan class such as
<plan_class>
<name>foobar</name>
<gpu_type>miner_asic</gpu_type>
<cpu_frac>0.5</cpu_frac>
<plan_class>
- App versions of this plan class will be sent only to hosts
that report a coproc of type "miner_asic".
The <app_version>s in the scheduler reply will include
a <coproc> element with the given name and count=1.
This will cause the client (at least the current client)
to run only one of these jobs at a time,
and to schedule the CPU appropriately.
Note: there's a lot missing from this;
- app version FLOPS will be those of a CPU app;
- jobs will be sent only if CPU work is requested
... and many other things.
Fixing these issues requires a significant re-architecture of the scheduler,
in particular getting rid of the PROC_TYPE_* constants
and the associated arrays,
which hard-wire the 3 fixed GPU types.