If BOINC client stopped unexpectedly (crashed or killed via task manager for
example) CPU apps exit after some time. But SETI OpenCL apps continue to run to
completion.
Such behavior can and (was demonstrated) will result in subsequent result
computation error with some BOINC message like "result file too long" or smth
alike.
OpenCL apps working in BOINC's "critical section" and poll flags periodically
to see if exit required.
Currently I use next poll function to check exit condition:
inline void ExitCheck(){
check_repeat:
if (boinc_status.quit_request || boinc_status.abort_request || !canRun) {
/* fprintf(stderr,"DEBUG: polled for exit/suspend request: exit needed. Flags
are: boinc_status.quit_request=%d, \
boinc_status.abort_request=%d, canRun=%d\n",
boinc_status.quit_request,boinc_status.abort_request,canRun);*/
DoSyncExit();
}else if(boinc_status.suspended){
Sleep(100); //R:await in sleep 100ms
/* fprintf(stderr,"DEBUG: polled for exit/suspend request: sleep needed. Flags
are: boinc_status.quit_request=%d, \
boinc_status.abort_request=%d, canRun=%d\n",
boinc_status.quit_request,boinc_status.abort_request,canRun);*/
goto check_repeat;//R: check again if exit required or sleep continues
}else{
/* fprintf(stderr,"DEBUG: polled for exit/suspend request: exit NOT needed.
Flags are: boinc_status.quit_request=%d, \
boinc_status.abort_request=%d, canRun=%d\n",
boinc_status.quit_request,boinc_status.abort_request,canRun);*/
}
} What another flags should be checked if any to prevent orphaned state for GPU
apps? Does BOINC API have measures to properly end task running in "critical
section" in case of BOINC client crash?
wbr
--
Raistmer the Sorcerer
_______________________________________________
boinc_dev mailing list
[email protected]
http://lists.ssl.berkeley.edu/mailman/listinfo/boinc_dev
To unsubscribe, visit the above URL and
(near bottom of page) enter your email address.