Originally, I intended to make sure in
-gopt dev=x,y,z (see above) each device is given just once. I was enthusiastic about AWS support so I pushed the release out sooner than I had implemented that filtering.
Turns out, its a feature!
Normally gopt dev=x,y,z distributes CPU processes evenly on the given GPU devices. But what if you had two GPUs in your system where one was faster than the other? You would not want both to get the same share of work.
Or you have two same GPUs on your system, but one is for your Desktop and you want to put a lower load on this. Normally you would have to start - again - a separate LBC process for each GPU to achieve non-symmetric workload.
Not with our feature.
Assume GPU 1 has only 2GB VRAM and GPU 2 has 4GB VRAM. Naturally this limits the number of processes that can run on 1, but why should we constraint GPU 2 because of this? Assume you have 10 cores to fire on the GPUs and you want to have 3 on GPU1 and 7 on GPU2. Solution:
-c 10 -gopt dev=1,1,1,2,2,2,2,2,2,2Now that's an extreme example where we basically had to enumerate all CPU processes explicitely for their GPU assignment. What if we simply have two 1080 (plenty of vram) and would like to assign 12 of our cores in a 1:2 ratio to both these GPUs? Solution:
-c 12 -gopt dev=1,2,2Now GPU1 gets 4 processes, GPU2 gets 8 processes. 1:3 ratio? Simple:
-c 12 -gopt dev=1,2,2,2GPU1: 3 processes, GPU2: 9 processes
So I like that feature very much and will keep it as is.
I intend to develop -gopt further. As is, it accepts dev and lws "subparameters". Each subparameter is delimited by ":". Another sub-parameter in future may be:
"bloom=0" (to keep bloom filter check on host CPU, which should allow to use GPUs with less than 512MB VRAM).Nope. nobloom=
with the possibility to declare a set of devices which shall not use on-GPU bloom filter check.
I have not yet decided about implementing other GPU features to be optional.