Commit Graph

112 Commits

Author SHA1 Message Date
David Anderson 02f03f0790 - client: replace <ignore_cuda_dev> with <ignore_nvidia_dev>
in cc_config.xml (but keep old one for compat)


svn path=/trunk/boinc/; revision=23775
2011-06-24 03:58:52 +00:00
David Anderson 322617d616 - lib: fix compile warning
svn path=/trunk/boinc/; revision=23773
2011-06-23 20:44:25 +00:00
Charlie Fenton 163978a369 lib: fill in missing entries in COPROCS GUI RPCs, ensure that old data is reset when connecting to a different host (not yet complete)
svn path=/trunk/boinc/; revision=23765
2011-06-22 11:25:06 +00:00
David Anderson 382905661f svn path=/trunk/boinc/; revision=23478 2011-04-28 21:54:42 +00:00
David Anderson 43a7ffb95c - lib: fix compile warnings by removing virtual functions in COPROC
svn path=/trunk/boinc/; revision=23314
2011-04-01 22:45:02 +00:00
David Anderson a7828abdda - scheduler: removed unused destructors in COPROC that
caused scheduler to crash (not sure why)


svn path=/trunk/boinc/; revision=23312
2011-04-01 21:21:11 +00:00
David Anderson 247413b291 - server/client: make a stripped-down OpenCL header file, lib/cl_boinc.h,
for the things that BOINC actually needs
    (fixes server compile problems)
- client: fix various compile errors in coproc_detect.cpp


svn path=/trunk/boinc/; revision=23310
2011-04-01 19:39:58 +00:00
Charlie Fenton 34ff45d8bc svn path=/trunk/boinc/; revision=23307 2011-04-01 03:56:29 +00:00
Rom Walton de7e97cc32 - lib: Bring header and implementation files into sync over the coproc parsing
function.
        
    lib/
        coproc.cpp, .h

svn path=/trunk/boinc/; revision=23303
2011-03-31 15:34:05 +00:00
Charlie Fenton b85d87ef9f client: Continue adding OpenCL support
svn path=/trunk/boinc/; revision=23300
2011-03-31 10:02:34 +00:00
Rom Walton 662517d08f - client: OpenCL Profile Version wasn't being used anywhere and trying to get it
was causing a crash on Windows.  Remove for now.
    - client: Fix ATI OpenCL detection so that the coproc test messages will appear.
    
    client/
        coproc_detect.cpp
    lib/
        coproc.h

svn path=/trunk/boinc/; revision=23298
2011-03-30 21:58:55 +00:00
Charlie Fenton b4b2287c3d client: Continue adding OpenCL support
svn path=/trunk/boinc/; revision=23288
2011-03-29 11:46:11 +00:00
Charlie Fenton 99bbddf467 client: Continue adding OpenCL support
svn path=/trunk/boinc/; revision=23260
2011-03-25 14:08:50 +00:00
Charlie Fenton a82319a2f9 client: Continue adding OpenCL support. lib: Fix inconsistent line endings in coproc.cpp
svn path=/trunk/boinc/; revision=23257
2011-03-25 12:30:49 +00:00
David Anderson 3b906a191c - client: generalize the GPU framework so that
- new GPU types can be added easily
		- users can specify GPUs in cc_config.xml,
			referred to by app_info.xml,
			and they will be scheduled by BOINC
			and passed --device N options
			Note: the parsing of cc_config.xml is not done yet.
		- RPC protocols (account manager and scheduler)
			can now specify GPU types in separate elements
			rather than embedding them in tag names
			e.g. <no_rsc>NVIDIA</no_rsc> rather than <no_cuda/>
	- client: in account manager replies, parse elements of the form
		<no_rsc>NAME</no_rsc>
		indicating the GPUs of type NAME should not be used.
		This allows account managers to control GPU types
		not hardwired into the client.
		Note: <no_cuda/> and <no_ati/> will continue to be supported.
	- scheduler RPC reply: add
		<no_rsc_apps>NAME</no_rsc_apps>
		(NAME = GPU name)
		to indicate that the project has no jobs for the indicated GPU type.
		<no_cuda_apps> etc. are still supported 
	- client/lib: remove set_debts() GUI RPC
	- client/scheduler RPC
		remove <cuda_backoff> etc. (superceded by no_app)
		Exception: <ip_result> elements in sched request
		still have <ncudas> and <natis>.
		Fix this later.

	Implementation notes:
	- client/lib: change "CUDA" to "NVIDIA" in type/variable names, and in XML
		Continue to recognize "CUDA" for compatibility
	- host_info.coprocs no longer used within the client;
		use a global var (COPROCS coprocs) instead.
		COPROCS now has an array of COPROCs;
		GPUs types are identified by the array index.
		Index zero means CPU.
	- a bunch of other resource-specific structs (like RSC_WORK_FETCH)
		are now stored in arrays, with same indices as COPROCS
		(i.e. index 0 is CPU)
	- COPROCS still has COPROC_NVIDIA and COPROC_ATI structs to hold vendor-specific info
	- APP_VERSION now has a struct GPU_USAGE to describe its GPU usage

svn path=/trunk/boinc/; revision=23253
2011-03-25 03:44:09 +00:00
Charlie Fenton 53e92e0da0 client: Begin adding OpenCL support
svn path=/trunk/boinc/; revision=23251
2011-03-24 12:16:54 +00:00
David Anderson 046dc09202 - client: fix bug in setting GPU peak flops
svn path=/trunk/boinc/; revision=22950
2011-01-27 20:00:42 +00:00
David Anderson 396dc5a8b4 svn path=/trunk/boinc/; revision=22895 2011-01-12 01:17:07 +00:00
David Anderson 4f3d628e29 - client: if detect that system clock has been set backwards
(either at startup or during execution)
    reset a number of "wait until X" variables;
    otherwise we might wait years to contact a project, restart a file xfer, etc.
    Notes:
    - there is no problem setting clocks forward; things just happen prematurely
    - some variables (e.g. task deadlines) are not reset,
        because it's not clear what to set them to
- sched: remove ati_opencl plan class until we understand what it is


svn path=/trunk/boinc/; revision=22842
2010-12-17 01:30:01 +00:00
David Anderson c9be64765c - client: use project STD, rather than arrival time,
as the major criterion in choosing non-EDF GPU jobs.
    GPU scheduling now respects resource share,
    and as a result STD should no longer diverge.
- client simulator: various improvements, most notably
    that we now generate gnuplot graphs of all debt types

NOTE: the client problem was found and fixed using the simulator!


svn path=/trunk/boinc/; revision=22536
2010-10-15 20:16:00 +00:00
David Anderson fb923e7659 - API/client: move CUdevice_attribute_enum out of lib/coproc.h
to fix app build errors

svn path=/trunk/boinc/; revision=22502
2010-10-13 23:33:02 +00:00
David Anderson c7e13eafb3 - client: write GPU info to client_state.xml,
so that it can be input file to the client simulator.

svn path=/trunk/boinc/; revision=22405
2010-09-23 20:54:49 +00:00
David Anderson fac75370a8 - rename cal.h to cal_boinc.h to avoid name conflict
svn path=/trunk/boinc/; revision=22039
2010-07-22 20:08:33 +00:00
David Anderson e34dcc5bdb - client: when selecting the "best" ATI GPU, factors are:
1) double precision support
    2) memory size
    3) speed
    (similar to NVIDIA)

svn path=/trunk/boinc/; revision=21795
2010-06-23 18:16:19 +00:00
David Anderson 81973a9fff - scheduler: fix structural problems with sending user messages.
Old: various redundant and/or misleading messages were sent.
    New:
        - if host w/ no GPU contacts a GPU-only project,
            send high-pri message saying they need a GPU
        - if host w/ GPU has driver too old for all versions,
            send high-pri message saying to update driver
        - if host w/ GPU has driver too old for some versions,
            send low-pri message saying to update driver
        - if host has GPU but too little RAM for any app,
            send low-pri message saying so
- scheduler: revamp GPU plan class functions

svn path=/trunk/boinc/; revision=21760
2010-06-16 22:07:19 +00:00
David Anderson 6511e1f8e8 - client: let fake CUDA specify driver version
- client: restore call to diagnostics_finish() on exit.
	(should print mem info, but doesn't)
- manager: notices display tweak 

svn path=/trunk/boinc/; revision=21759
2010-06-16 21:57:28 +00:00
David Anderson 75e86bff04 - client/server/API: rename cudaDeviceProp to CUDA_DEVICE_PROP to
avoid conflict with nvidia's structure.
    Note: these structures don't have to be the same,
    since we populate our struct one item at a time.


svn path=/trunk/boinc/; revision=21668
2010-06-01 18:36:11 +00:00
David Anderson 1764c6f7d4 - scheduler: preliminary checkin of new limit code
svn path=/trunk/boinc/; revision=21621
2010-05-24 23:14:48 +00:00
David Anderson 49f3c1aa61 client: bug fixes
svn path=/trunk/boinc/; revision=21571
2010-05-18 21:11:35 +00:00
David Anderson 40eebe00af - client/scheduler: in COPROCS, instead of having a vector of
pointers to dynamically allocated COPROC-derived objects,
    just have the objects themselves.
    Dynamic allocation should be avoided at all costs.

svn path=/trunk/boinc/; revision=21564
2010-05-18 19:22:34 +00:00
David Anderson 5a8142a23c - client: don't promote multithread jobs ahead of EDF jobs
svn path=/trunk/boinc/; revision=21563
2010-05-18 16:45:55 +00:00
David Anderson 256c694c96 - client: make GPU available RAM measurement #ifdef-selectable,
and default it to off
- client: if we print available GPU RAM (which we now don't)
    have a separate timer per GPU type
- scheduler: add new plan classes cuda_opencl (sic) and ati_opencl

svn path=/trunk/boinc/; revision=21498
2010-05-13 03:07:33 +00:00
David Anderson 9d8b915cc4 - client: fix crashing bug.
Deleting records in ~COPROCS() was bad,
		since we copy HOST_INFO to APP_INIT_DATA,
		leading to a double deletion.

svn path=/trunk/boinc/; revision=21475
2010-05-12 17:02:57 +00:00
David Anderson 7e9a8e5f98 - client: fix memory leak
svn path=/trunk/boinc/; revision=21464
2010-05-11 20:41:01 +00:00
David Anderson 9619791ad3 - user web: more cleanup of prefs.inc
- client: code cleanup


svn path=/trunk/boinc/; revision=21267
2010-04-23 17:46:57 +00:00
Rom Walton ec04f5dcbd - CC: Reduce how often the client reports the amount of available
VRAM to once every 60 seconds.

    client/
        coproc_detect.cpp
        cpu_sched.cpp
    lib/
        coproc.h

svn path=/trunk/boinc/; revision=21264
2010-04-23 16:47:07 +00:00
David Anderson bede9972b1 - client: fix bug with NVIDIA GPUs.
Some of them allow only 1 CUDA context at a time.
    You need to create a CUDA context to get available VRAM.
    So the client would run a CUDA job, then immediately kill it.
    Solution:
    - If a GPU app is running,
        let it keep running regardless of available VRAM
        (if it's still running, it has enough VRAM).
    - But don't start new apps if there's not enough available VRAM,
        or it the amount is unknown
        (if the client can't create a CUDA context,
        the app won't be able to either)
- client: if <coproc_debug> is set, print available GPU RAM periodically

svn path=/trunk/boinc/; revision=21253
2010-04-22 17:45:33 +00:00
David Anderson 678d880c64 - client: clean up logic related to GPU available memory.
If a driver call to get available mem fail, mark the GPU as unusable.


svn path=/trunk/boinc/; revision=21210
2010-04-19 18:35:10 +00:00
David Anderson d4bb95d5a6 - client: when a GPU job finishes, clear the "schedule backoff"
of other jobs of that type.
		They're waiting for GPU RAM, which may now be available.
	- client: bug fix in GPU RAM availability
	- client: fix testing setup for GPU RAM availability

svn path=/trunk/boinc/; revision=21206
2010-04-18 05:29:29 +00:00
David Anderson 01402bb45a - client: improve GPU scheduling
old: assign GPUs, then check available RAM
        Problem: may cause starvation on multi-GPU systems.
    new: use available RAM info in the assignment process.
        Prevents starvation, also reduces the number of driver calls.

svn path=/trunk/boinc/; revision=21205
2010-04-18 03:00:33 +00:00
David Anderson 02717af2f3 - bug fixes
svn path=/trunk/boinc/; revision=21187
2010-04-15 21:58:44 +00:00
David Anderson 9a06c4164f - client: Fermi compute capability is 2, not 3
svn path=/trunk/boinc/; revision=21036
2010-03-31 18:31:56 +00:00
David Anderson ad9e5bd833 - client: NVIDIA peak FLOPS estimate was wrong for Fermi
(32 cores, not 8)

svn path=/trunk/boinc/; revision=21034
2010-03-31 05:29:37 +00:00
David Anderson a151ad6cb3 - client/scheduler: deal with situation where GPU has enough
RAM to run job, but when we actually run the job
    not enough GPU RAM is free, so the application fails.
    This can cause a large number of jobs to fail.
    Solution:
    - app_plan() can specify the GPU RAM requirements of an app version.
        This is passed to the client in a new field
        <gpu_ram> of the <app_version> element.
    - prior to starting or restarting a GPU app, the client
        checks the amount of free RAM on the particular GPU.
        If it's not enough for the app version,
        the client doesn't start it,
        and arranges for the scheduler to ignore it for 5 minutes
        (by which point there might be more free GPU RAM)
    Notes:
    1) this change will have effect only when
        both client and scheduler are updated.
    2) the check is done in enforce_schedule(),
        rather than schedule_cpus(),
        because only at that point
        have we assigned a specific GPU to the job.
    3) there's another case to deal with:
        a GPU app's malloc of GPU RAM fails in the middle of the job.
        Currently the job fails.
        I plan to add an API call boinc_temporary_exit(x) so
        that the job can exit and potentially restart in x seconds.
        (In principle this mechanism is sufficient for all cases,
        but it could lead to a lot of starting/exiting,
        so the current change is worthwhile).

svn path=/trunk/boinc/; revision=19864
2009-12-11 22:45:59 +00:00
David Anderson e27659858d - result of code shuffle: the HOST_INFO structure returned
by the get_host_info() GUI RPC now contains GPU info

svn path=/trunk/boinc/; revision=19798
2009-12-07 06:13:17 +00:00
David Anderson b70229c093 - code shuffle: move client-specific GPU code to a separate file
svn path=/trunk/boinc/; revision=19794
2009-12-07 00:42:03 +00:00
David Anderson 4bf2ef5198 - client: add new config options:
<ignore_cuda_dev>n</ignore_cuda_dev>
    <ignore_ati_dev>n</ignore_ati_dev>
    to ignore (not use) specific NVIDIA or ATI GPUs.
    You can ignore more than one.

svn path=/trunk/boinc/; revision=19566
2009-11-12 23:44:49 +00:00
David Anderson fe2a18f282 - client/scheduler: standardize the FLOPS estimate between NVIDIA and ATI.
Make them both peak FLOPS,
    according to the formula supplied by the manufacturer.

    The impact on the client is minor:
    - the startup message describing the GPU
    - the weight of the resource type in computing long-term debt

    On the server, I changed the example app_plan() function
    to assume that app FLOPS is 20% of peak FLOPS
    (that's about what it is for SETI@home)

svn path=/trunk/boinc/; revision=19310
2009-10-16 00:13:01 +00:00
David Anderson d6efa7dabb - client: address the situation where GPUs become unusable
for certain periods (e.g. when Remote Desktop is used on Win).
    - add is_usable() member function to COPROC.
        Currently this just calls the respective (CUDA or CAL)
        initialization function.
        We need to check whether this works and/or causes problems.
    - in enforce_schedule(), check whether usability has changed
        for each GPU type.
        If we've gone from usable to unusable,
        flag all jobs for that GPU as coproc_missing
        (so they won't get run, and will quit if they're running).
        If we've gone from unusable to usable, clear the flag.
    This should deal with all cases except where
    the client is started up with GPUs unusable.
- scheduler: more query optimizations for locality scheduling
    (from Oliver Bock)

svn path=/trunk/boinc/; revision=19301
2009-10-14 18:07:49 +00:00
David Anderson fca2cb8016 - client: restore calDeviceGetInfo(), add its info to COPROC_ATI struct
(some plan class might need to know this).
    Code cleanup.

svn path=/trunk/boinc/; revision=19234
2009-10-02 22:58:03 +00:00