⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rate.c

📁 mpi 结合vc编程用模拟退火法算一个最小路径的值
💻 C
字号:
void PIComputeRate( double sumlen, double sumtime, double sumlentime, 
		    double sumlen2, int ntest, double *s, double *r );
/*
    This file contains very simple code for estimating the parameters in the
    simple (s + rn) model of communication.  It does this using the NORMAL
    equations for the least-squares problem; this method has a number of
    disadvantages including numerical instability when the number of
    observations is large or the normal equation matrix nearly singular.
    Another problem is that the least squares problem gives different answers
    depending on how the system is weighted.  For example, another weighting
    (different than the one used here) weights the rows of the matrix by the
    inverse of the right-hand-side.

    The advantage of this approach is that it needs only a few, easily (if
    subject to numerical errors during accumulation) acquired values
 */    

/*
    PIComputeRate - Computes the communication rate given timing information
 
    Input Parameters:
+   sumlen - Sum of the lengths of the messages sent
.   sumtime - Sum of the time to send the messages
.   sumlentime - Sum of the product of the message lengths and the times
                 to send those messages
.   sumlen2 - Sum of the squares of the lengths of the messages
-   ntest   - Number of messages sent

    Output Parameters:
+   s - latency
-   r - transfer rate

    Notes:
    This code computes a fit to the model (s + r n) for communications
    between two processors.  The method used is reasonable reliable for
    small values of ntest.

    If there is insufficient data to compute s and r, both are set to
    zero.  This code does not check that the assumed model (s + r n) is
    a good choice.

    The length sums are doubles rather than ints to provide a "long long"
    type (think of them as 53 bit integers).
 */
void PIComputeRate( double sumlen, double sumtime, double sumlentime, 
		    double sumlen2, int ntest, double *s, double *r )
{
    double R, S;

    R = sumlen * sumlen - ntest * sumlen2;
    if (R == 0.0) {
	*s = *r = 0.0;
	return;
    }
    R = (sumlen * sumtime - ntest * sumlentime) / R;
    S = (sumtime - R * sumlen) / ntest;

    if (S < 0 || R < 0) {
	S = 0.0;
	R = sumlentime / sumlen2;
    }
    *r = R;
    *s = S;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -