Message boards :
Number crunching :
Forcing work on one GPU only
Message board moderation
Author | Message |
---|---|
Send message Joined: 16 May 11 Posts: 2 Credit: 7,455,289 RAC: 0 |
Hi, is there a way to force moo to only do work on one GPU instead of all available. If I understand things correctly this might be possible with an app_info file but I don't know what to write in it and where to put it. I wonder if someone can help me with it. My GPUs are GTX470. The reason I would like to do this is because I have multiple GPU WUs from diffirent projects and when boinc want's to switch and calculate moo WU's one GPU sits idle for upp to 60 minutes, several times a day. |
Send message Joined: 6 Dec 11 Posts: 60 Credit: 306,719,331 RAC: 0 |
Do you want to do this for just moo? Or are you running other projects as well? |
Send message Joined: 16 May 11 Posts: 2 Credit: 7,455,289 RAC: 0 |
Yes, I'm running other projects as well as moo, but I just want to force Moo since the other projects only use one GPU core per WU and not "all available". |
Send message Joined: 1 Jan 12 Posts: 13 Credit: 21,324,276 RAC: 0 |
If you use an appinfo you will run one unit PER gpuat the same time. I have 2 6990's, and moo wants to run 4 app at a time. |
Send message Joined: 23 Jun 11 Posts: 87 Credit: 798,452,366 RAC: 0 |
is there any way to force Moo Wrapper to do 1 workunit per gpu? |
Send message Joined: 22 Jun 11 Posts: 2080 Credit: 1,844,401,960 RAC: 3,179 |
is there any way to force Moo Wrapper to do 1 workunit per gpu? Yes thru an app_info.xml file you can do it. But Moo is designed to run using everything gpu it finds all working on one workunit, kind of like a super computer. |
Send message Joined: 23 Jun 11 Posts: 87 Credit: 798,452,366 RAC: 0 |
can you tell me how to do it please? |
Send message Joined: 22 Jun 11 Posts: 2080 Credit: 1,844,401,960 RAC: 3,179 |
can you tell me how to do it please? Read this thread: http://moowrap.net/forum_thread.php?id=205#2315 There is lots of info there and you MUST be careful, you could lose lots of units and be put on workunit lockdown if you mess things up to bad! Be SURE to run thru ALL of your current units and set your cache to 0.01 before you make changes! |
Send message Joined: 23 Jun 11 Posts: 87 Credit: 798,452,366 RAC: 0 |
seems that shows how to limit the project to run on gpu0 and not the rest. Just to make sure you know what i'm wanting to do. I have 3 gpus in a system. I would like to run a single workunit from moowrapper on each gpus at the same time. Not spread 1 workunit to 3 different gpus. Is there any way to do this? |
Send message Joined: 5 May 11 Posts: 233 Credit: 351,414,150 RAC: 0 |
Thats what Mikey pointed you at, that app_info puts one per gpu. This is the one I am using with 2x5970s, they run one Moo WU per GPU <app_info> <app> <name>dnetc</name> <user_friendly_name>Distributed.net Client</user_friendly_name> </app> <file_info> <name>dnetc_wrapper_1.3_windows_intelx86__ati14.exe</name> <executable/> </file_info> <file_info> <name>dnetc518-win32-x86-stream.exe</name> <executable/> </file_info> <file_info> <name>dnetc-gpu-1.3.ini</name> </file_info> <file_info> <name>job-ati14-1.00.xml</name> </file_info> <app_version> <app_name>dnetc</app_name> <version_num>103</version_num> <platform>windows_intelx86</platform> <avg_ncpus>0.1</avg_ncpus> <max_ncpus>0.5</max_ncpus> <plan_class>ati14</plan_class> <flops>1157115231469.729200</flops> <file_ref> <file_name>dnetc_wrapper_1.3_windows_intelx86__ati14.exe</file_name> <main_program/> </file_ref> <file_ref> <file_name>dnetc518-win32-x86-stream.exe</file_name> <copy_file/> </file_ref> <file_ref> <file_name>dnetc-gpu-1.3.ini</file_name> <open_name>dnetc.ini</open_name> <copy_file/> </file_ref> <file_ref> <file_name>job-ati14-1.00.xml</file_name> <open_name>job.xml</open_name> <copy_file/> </file_ref> <coproc> <type>ATI</type> <count>1</count> </coproc> </app_version> </app_info> Create it inside Notepad (no other editor - use Notepad), and save file as a txt format file called app_info.xml, into the Moo Project Directory. Dont forget to run down the cache before using it else you will trash existing WUs. BAM must be closed down and restarted for the app_info to take effect. EDIT: In an app_info, the part that contrrols number of WUs running on the gpu is this bit: <coproc> <type>ATI</type> <count>1</count> </coproc> A count of one means one per GPU. If it was put as 0.5, it would be 2 per GPU .... and so on, so for example(s) Count of ... 1 is 1 per GPU 0.5 is two per GPU 0.33 is three per GPU 0.25 is 4 per GPU. Do the Maths you'll get the idea (Dont run more than two Moo WU per GPU, utterly pointless, just creates other issues for zero purpose, and usually one per GPU in a multi GPU setup solves the fragmentation / utilisation problem.) Watch the heat carefully when first starting this, expect to have to downclock GPUs by about 30 on previous setting to keep heat under control - more work flying around, hence the need to reduce GPU speed slighly to compensate - be careful ... you will overheat if you dont watch this the first time you use the app_info. Regards Zy |
Send message Joined: 23 Jun 11 Posts: 87 Credit: 798,452,366 RAC: 0 |
Thanks so much man! you guys are awesome! |
Send message Joined: 6 Dec 11 Posts: 60 Credit: 306,719,331 RAC: 0 |
Talk about heat. I have my systems in a 50 degree cold room with massive air flow and I'm still seeing rise of 12-20 degree C over ambient depending on load on the CPU from other tasks. And that's on liquid... |
Send message Joined: 23 Jun 11 Posts: 87 Credit: 798,452,366 RAC: 0 |
what kinda hardware are you runnin ? |
Send message Joined: 1 Mar 12 Posts: 8 Credit: 7,361,960 RAC: 0 |
Me too! ;-) I have two Nvidia GT430's in machine with BOINC 7.0.18. First of all, BOINC doesn't behave when it gets task which requests 2 GPUs a the same time. It won't run those tasks even though both GPUs are idle. I've reported this at BOINC developers' forum and will see where this will head. Second: I think wrapper should run dnetc application with cmd line argument -multiok=0. The application is designed to grab all available GPUs regardless of what BOINC designates. I guess it would be safe to prevent running more than one dnetc apps in parallel:
* on my host both apps also consumed around 40% of CPU each. If I instruct BOINC only to use one GPU (so that only one Moo! task is run at a time), dnetc still consumes both GPUs while only consuming around 1% of CPU.
Metod ... |
Send message Joined: 22 Jun 11 Posts: 2080 Credit: 1,844,401,960 RAC: 3,179 |
Me too! ;-) The format here is to run one task on all available gpu's in the machine, that is one of the premises of the project. YES it can be changed, but yours IS doing what it was designed to do. |
Send message Joined: 1 Mar 12 Posts: 8 Credit: 7,361,960 RAC: 0 |
mikey wrote: The format here is to run one task on all available gpu's in the machine, that is one of the premises of the project. YES it can be changed, but yours IS doing what it was designed to do. I fully understand that and I fully accept that from the original Distributed.net client. I've been running the original DNETC client back in 1997 (RC5-56 contest), so I do know and understand their way of distributing work. However, BOINC has a bit different nature in a way that different projects nicely co-exist. In this case there's "higher authority" (BOINC core client) which assigns part of resources and project application is supposed to obey that. Most of projects (a least the ones I participate at) behave according to this spirit, while DNETC client does not. It's not that BOINC per se could not fulfill the premises of the project you're mentioning, it's just that it would be done a bit differently. I would expect from Moo! more than only wrap DNETC tasks for use in BOINC environment, but to try (in any possible way) to also adapt it to BOINC way of distributed computing. I don't think that it's Moo! project management to blame completely. I just made an observation and asked/proposed about possible solutions. I don't expect that everybody agrees with me as I fully understand that my case is not typical one: not everybody has got more than one GPU installed and of those not everybody participates in other projects as well. Metod ... |
Send message Joined: 1 Mar 12 Posts: 8 Credit: 7,361,960 RAC: 0 |
An addition to my previous post: the way DNETC handles multiple GPUs is not good even if one only runs tasks from Moo! I observed that tasks don't contain homogenous work batches. For example, a '192' task is typically composed of several work batches and size of those varies from 1 to 64 - the sum is 192. When DNETC starts, it finds 2 GPUs so it starts two worker threads. Then it assigns a work batch to each of them. Then it waits for worker thread to finish work batch and assigns next one. If work batches are not uniform in size or GPUs are of different speed, then both worker threads don't finish their jobs at the same time. At the end of task one GPU sits idle until the other one finishes its work batch. This waiting time can vary between almost zero up to total processing time (in my case that's more than an hour for a '192' task). My observation is that in average almost 10% of GPU cycles get wasted. This phenomenon does not happen if DNETC is runs 'natively' in sense that it also maintains cache of work. It only happens if DNETC is left to run down the buffer - this happen all the time with Moo! If DNETC would limit itself to only use one GPU, BOINC CC would start two DNETC tasks, and upon finishing of one task (on one GPU) it would immediately start another one. Hence no time would get wasted. Metod ... |
Send message Joined: 25 Jul 11 Posts: 5 Credit: 23,397,372 RAC: 0 |
I can report the same problem running Moo! Wrapper on the ATI HD6990 card. If I use the above app_info.xml file and say one GPU per task, it will load and run two tasks... displays showing 1ATI per WU. But often during crunching, the GPU usage will drop or oscillate between 90-99% as if it is unstable. Also, the Dnet application looks to use ALL GPU's in real time, so if you suspend one task, the other starts using both GPU's even though app_info doesn't prescribe that. That causes more problems as eventually it's trying to run two tasks on two GPU's at the same time. This tells me both applications are polling both GPU's at the same time trying to compete for GPU resources... and explains the large differences I see in task completion times. One would expect a simple doubling of times, but that doesn't seem to be the case... it can be a lot worse than that... This behavior also seen when starting a collatz task on one GPU and Moo on the another. If the collatz task is suspended, the Moo! task starts using both GPU's! So, one can see this isn't nice behavior and contrary to BOINC methodology in general. :) |
Send message Joined: 22 Jun 11 Posts: 2080 Credit: 1,844,401,960 RAC: 3,179 |
mikey wrote:The format here is to run one task on all available gpu's in the machine, that is one of the premises of the project. YES it can be changed, but yours IS doing what it was designed to do. Okay now that we have that out of the way try this: <cc_config> <options> <use_all_gpus>1</use_all_gpus> <exclude_gpu> <url>http://http:/moowrap.net/</url> <device_num>0</device_num> </exclude_gpu> <exclude_gpu> <url>http://boinc.thesonntags.com/collatz/</url> <device_num>1</device_num> </exclude_gpu> <report_results_immediately>1</report_results_immediately> </options> </cc_config> Change it to fit YOUR projects AND it ONLY works with Boinc version 7!!! I just saw that Boinc version 7.0.18 is the best to use, use Donnie in the app_info thread is who told me this works. What it does is tell gpu 1 to NOT work on Moo and gpu zero to NOT work on Collatz and then to return the results immediately. What you do is copy the above in Notepad in Windows, do NOT use a word processing program JUST NOTEPAD, and save the file with the file name of cc_config.xml but as a TXT file!!! Then stop Boinc, put the file in the Boinc/data directory and restart Boinc. The Boinc/data directory can be found in the Event Log or Messages tab near the top. |
Send message Joined: 1 Mar 12 Posts: 8 Credit: 7,361,960 RAC: 0 |
Thank you for your effort. I will try a few aspects of your proposed solution after task backlog gets cleared a bit - right now I excluded second GPU from any BOINC projects, giving all GPU power to Moo! (BOINC doesn't intend to use it but DNETC uses it). The workaround certainly helps to reduce congestion between two Moo! tasks trying to consume same GPU resources (as I mentioned before, if two dnetc applications are running concurrently, they both use excessive amount of CPU). There are a few problems with this work-around ...
2. it doesn't prevent DNETC from wasting resources due to non-synchronous processing of work batches. BTW, the same problem does arise also with CPU application when one has many CPUs in machine (think dual hexa core HT server, like dual Intel X5670 or similar), where it hits even harder
Metod ... |