mirror of https://github.com/BOINC/boinc.git
-MGR: eliminate unnecessary get_host_info RPCs.
svn path=/trunk/boinc/; revision=23772
This commit is contained in:
parent
5fd6ca42cc
commit
22c1ff5cd9
|
@ -3730,3 +3730,16 @@ Charlie 22 Jun 2011
|
||||||
coproc.cpp, .h
|
coproc.cpp, .h
|
||||||
gui_rpc_client.h
|
gui_rpc_client.h
|
||||||
gui_rpc_client_ops.cpp
|
gui_rpc_client_ops.cpp
|
||||||
|
|
||||||
|
Charlie 23 Jun 2011
|
||||||
|
- MGR: It turns out we want the Wizard ProjectInfo Page to check for ATI and NVIDIA
|
||||||
|
GPUs regardless of whether they were reported by CAL, CUDA or OpenCL, so we can
|
||||||
|
just check CC_STATE::have_ati and have_nvidia even for newer clients. This
|
||||||
|
means the Manager doesn't need to do get_host_info RPCs, because all the host
|
||||||
|
info it needs is available from the host_info section of the get_state RPC, so
|
||||||
|
eliminate the unnecessary get_host_info RPCs.
|
||||||
|
|
||||||
|
clientgui/
|
||||||
|
DlgAdvPreferences.cpp
|
||||||
|
MainDocument.cpp, .h
|
||||||
|
ProjectInfoPage.cpp
|
||||||
|
|
|
@ -774,10 +774,10 @@ void CDlgAdvPreferences::OnAddExclusiveApp(wxCommandEvent&) {
|
||||||
wxASSERT(pDoc);
|
wxASSERT(pDoc);
|
||||||
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
|
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
|
||||||
|
|
||||||
if (strstr(pDoc->host.os_name, "Darwin")) {
|
if (strstr(pDoc->state.host_info.os_name, "Darwin")) {
|
||||||
hostIsMac = true;
|
hostIsMac = true;
|
||||||
extension = wxT(".app");
|
extension = wxT(".app");
|
||||||
} else if (strstr(pDoc->host.os_name, "Microsoft")) {
|
} else if (strstr(pDoc->state.host_info.os_name, "Microsoft")) {
|
||||||
hostIsWin = true;
|
hostIsWin = true;
|
||||||
extension = wxT(".exe");
|
extension = wxT(".exe");
|
||||||
}
|
}
|
||||||
|
|
|
@ -410,7 +410,6 @@ CMainDocument::CMainDocument() : rpc(this) {
|
||||||
|
|
||||||
m_dtCachedStateTimestamp = wxDateTime((time_t)0);
|
m_dtCachedStateTimestamp = wxDateTime((time_t)0);
|
||||||
m_iGet_state_rpc_result = 0;
|
m_iGet_state_rpc_result = 0;
|
||||||
m_iGet_host_info_rpc_result = 0;
|
|
||||||
|
|
||||||
m_dtCachedCCStatusTimestamp = wxDateTime((time_t)0);
|
m_dtCachedCCStatusTimestamp = wxDateTime((time_t)0);
|
||||||
m_iGet_status_rpc_result = 0;
|
m_iGet_status_rpc_result = 0;
|
||||||
|
@ -623,7 +622,6 @@ int CMainDocument::CachedStateUpdate() {
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
|
|
||||||
if (m_iGet_state_rpc_result) retval = m_iGet_state_rpc_result;
|
if (m_iGet_state_rpc_result) retval = m_iGet_state_rpc_result;
|
||||||
if (m_iGet_host_info_rpc_result) retval = m_iGet_host_info_rpc_result;
|
|
||||||
|
|
||||||
if (retval) m_pNetworkConnection->SetStateDisconnected();
|
if (retval) m_pNetworkConnection->SetStateDisconnected();
|
||||||
|
|
||||||
|
@ -634,7 +632,6 @@ int CMainDocument::CachedStateUpdate() {
|
||||||
int CMainDocument::ResetState() {
|
int CMainDocument::ResetState() {
|
||||||
rpcClient.close();
|
rpcClient.close();
|
||||||
state.clear();
|
state.clear();
|
||||||
host.clear_host_info();
|
|
||||||
results.clear();
|
results.clear();
|
||||||
ft.clear();
|
ft.clear();
|
||||||
statistics_status.clear();
|
statistics_status.clear();
|
||||||
|
@ -999,19 +996,8 @@ void CMainDocument::RunPeriodicRPCs(int frameRefreshRate) {
|
||||||
request.arg1 = &async_state_buf;
|
request.arg1 = &async_state_buf;
|
||||||
request.exchangeBuf = &state;
|
request.exchangeBuf = &state;
|
||||||
request.rpcType = RPC_TYPE_ASYNC_NO_REFRESH;
|
request.rpcType = RPC_TYPE_ASYNC_NO_REFRESH;
|
||||||
request.resultPtr = &m_iGet_state_rpc_result;
|
|
||||||
|
|
||||||
RequestRPC(request);
|
|
||||||
|
|
||||||
// *********** RPC_GET_HOST_INFO **************
|
|
||||||
|
|
||||||
request.clear();
|
|
||||||
request.which_rpc = RPC_GET_HOST_INFO;
|
|
||||||
request.arg1 = &async_host_buf;
|
|
||||||
request.exchangeBuf = &host;
|
|
||||||
request.rpcType = RPC_TYPE_ASYNC_NO_REFRESH;
|
|
||||||
request.completionTime = &m_dtCachedStateTimestamp;
|
request.completionTime = &m_dtCachedStateTimestamp;
|
||||||
request.resultPtr = &m_iGet_host_info_rpc_result;
|
request.resultPtr = &m_iGet_state_rpc_result;
|
||||||
|
|
||||||
RequestRPC(request);
|
RequestRPC(request);
|
||||||
}
|
}
|
||||||
|
@ -1195,14 +1181,6 @@ int CMainDocument::ForceCacheUpdate(bool immediate) {
|
||||||
wxLogTrace(wxT("Function Status"), wxT("CMainDocument::ForceCacheUpdate - Get State Failed '%d'"), retval);
|
wxLogTrace(wxT("Function Status"), wxT("CMainDocument::ForceCacheUpdate - Get State Failed '%d'"), retval);
|
||||||
m_pNetworkConnection->SetStateDisconnected();
|
m_pNetworkConnection->SetStateDisconnected();
|
||||||
}
|
}
|
||||||
pFrame->UpdateStatusText(_("Retrieving host information; please wait..."));
|
|
||||||
|
|
||||||
m_iGet_host_info_rpc_result = rpc.get_host_info(host);
|
|
||||||
if (m_iGet_host_info_rpc_result) {
|
|
||||||
retval = m_iGet_host_info_rpc_result;
|
|
||||||
wxLogTrace(wxT("Function Status"), wxT("CMainDocument::ForceCacheUpdate - Get Host Information Failed '%d'"), retval);
|
|
||||||
m_pNetworkConnection->SetStateDisconnected();
|
|
||||||
}
|
|
||||||
|
|
||||||
pFrame->UpdateStatusText(wxEmptyString);
|
pFrame->UpdateStatusText(wxEmptyString);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1823,7 +1801,7 @@ int CMainDocument::CachedNoticeUpdate() {
|
||||||
|
|
||||||
if (IsConnected()) {
|
if (IsConnected()) {
|
||||||
// Can't look up previous last read message until we know machine name
|
// Can't look up previous last read message until we know machine name
|
||||||
if (!strlen(host.domain_name)) {
|
if (!strlen(state.host_info.domain_name)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1856,7 +1834,7 @@ void CMainDocument::SaveUnreadNoticeInfo() {
|
||||||
if (dLastSavedArrivalTime != m_dLastReadNoticeArrivalTime) {
|
if (dLastSavedArrivalTime != m_dLastReadNoticeArrivalTime) {
|
||||||
wxString strBaseConfigLocation = wxString(wxT("/Notices/"));
|
wxString strBaseConfigLocation = wxString(wxT("/Notices/"));
|
||||||
wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
|
wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
|
||||||
wxString strDomainName = wxString(host.domain_name, wxConvUTF8, strlen(host.domain_name));
|
wxString strDomainName = wxString(state.host_info.domain_name, wxConvUTF8, strlen(state.host_info.domain_name));
|
||||||
wxString strArrivalTime = wxEmptyString;
|
wxString strArrivalTime = wxEmptyString;
|
||||||
|
|
||||||
pConfig->SetPath(strBaseConfigLocation + strDomainName);
|
pConfig->SetPath(strBaseConfigLocation + strDomainName);
|
||||||
|
@ -1872,7 +1850,7 @@ void CMainDocument::SaveUnreadNoticeInfo() {
|
||||||
void CMainDocument::RestoreUnreadNoticeInfo() {
|
void CMainDocument::RestoreUnreadNoticeInfo() {
|
||||||
wxString strBaseConfigLocation = wxString(wxT("/Notices/"));
|
wxString strBaseConfigLocation = wxString(wxT("/Notices/"));
|
||||||
wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
|
wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
|
||||||
wxString strDomainName = wxString(host.domain_name, wxConvUTF8, strlen(host.domain_name));
|
wxString strDomainName = wxString(state.host_info.domain_name, wxConvUTF8, strlen(state.host_info.domain_name));
|
||||||
double dLastReadNoticeTime;
|
double dLastReadNoticeTime;
|
||||||
wxString strArrivalTime = wxEmptyString;
|
wxString strArrivalTime = wxEmptyString;
|
||||||
int i, n = (int)notices.notices.size();
|
int i, n = (int)notices.notices.size();
|
||||||
|
|
|
@ -181,10 +181,6 @@ public:
|
||||||
CC_STATUS status;
|
CC_STATUS status;
|
||||||
CC_STATUS async_status_buf;
|
CC_STATUS async_status_buf;
|
||||||
int m_iGet_status_rpc_result;
|
int m_iGet_status_rpc_result;
|
||||||
|
|
||||||
HOST_INFO host;
|
|
||||||
HOST_INFO async_host_buf;
|
|
||||||
int m_iGet_host_info_rpc_result;
|
|
||||||
wxDateTime m_dtCachedStateTimestamp;
|
wxDateTime m_dtCachedStateTimestamp;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -546,10 +546,6 @@ void CProjectInfoPage::OnPageChanged( wxWizardExEvent& event ) {
|
||||||
wxArrayString aCategories;
|
wxArrayString aCategories;
|
||||||
bool bCategoryFound = false;
|
bool bCategoryFound = false;
|
||||||
CProjectInfo* pProjectInfo = NULL;
|
CProjectInfo* pProjectInfo = NULL;
|
||||||
wxString strVersion;
|
|
||||||
int iMajor, iMinor, iRelease;
|
|
||||||
bool bHave_CAL = false;
|
|
||||||
bool bHave_CUDA = false;
|
|
||||||
|
|
||||||
wxASSERT(pDoc);
|
wxASSERT(pDoc);
|
||||||
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
|
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
|
||||||
|
@ -578,26 +574,6 @@ void CProjectInfoPage::OnPageChanged( wxWizardExEvent& event ) {
|
||||||
wxASSERT(m_pProjectURLStaticCtrl);
|
wxASSERT(m_pProjectURLStaticCtrl);
|
||||||
wxASSERT(m_pProjectURLCtrl);
|
wxASSERT(m_pProjectURLCtrl);
|
||||||
|
|
||||||
//TODO: Find a better way to determine whether Client has OpenCL support
|
|
||||||
pDoc->GetConnectedComputerVersion(strVersion);
|
|
||||||
sscanf(strVersion.char_str(), "%d.%d.%d", &iMajor, &iMinor, &iRelease);
|
|
||||||
|
|
||||||
// Older clients (before OpenCL support) reported an ATI GPU iff CAL was installed,
|
|
||||||
// and reported NVIDIA GPUs iff CUDA was installed. Newer clients with can report
|
|
||||||
// ATI GPUS if either CAL or OpenCl or both is installed, and can report NVIDIA GPUs
|
|
||||||
// if either CUDA or OpenCl or both is installed. So newer clients must differentiate
|
|
||||||
// have_cal from have_ati and have_cuda from have_nvidia.
|
|
||||||
if ((iMajor > 6) || ((iMajor == 6) && (iMinor > 12))) {
|
|
||||||
// Newer Client with openCL support
|
|
||||||
bHave_CAL = pDoc->host._coprocs.ati.have_cal;
|
|
||||||
bHave_CUDA = pDoc->host._coprocs.nvidia.have_cuda;
|
|
||||||
} else {
|
|
||||||
// Older Client before openCL support
|
|
||||||
bHave_CAL = pDoc->state.have_ati;
|
|
||||||
bHave_CUDA = pDoc->state.have_nvidia;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
m_pTitleStaticCtrl->SetLabel(
|
m_pTitleStaticCtrl->SetLabel(
|
||||||
_("Choose a project")
|
_("Choose a project")
|
||||||
);
|
);
|
||||||
|
@ -732,15 +708,15 @@ void CProjectInfoPage::OnPageChanged( wxWizardExEvent& event ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pProjectInfo->m_bProjectSupportsCUDA) {
|
if (pProjectInfo->m_bProjectSupportsCUDA) {
|
||||||
if (!bHave_CUDA) continue;
|
if (!pDoc->state.have_nvidia) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pProjectInfo->m_bProjectSupportsCAL) {
|
if (pProjectInfo->m_bProjectSupportsCAL) {
|
||||||
if (!bHave_CAL) continue;
|
if (!pDoc->state.have_ati) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pProjectInfo->m_bProjectSupportsMulticore) {
|
if (pProjectInfo->m_bProjectSupportsMulticore) {
|
||||||
if (pDoc->host.p_ncpus < 4) continue;
|
if (pDoc->state.host_info.p_ncpus < 4) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Application has CUDA, ATI or MT if required, or none are required
|
// Application has CUDA, ATI or MT if required, or none are required
|
||||||
|
|
Loading…
Reference in New Issue