首页
论坛
新职位
搜索论坛
什么是新的
新职位
新的个人资料帖子
最新活动
会员
目前的访客
新的个人资料帖子
搜索个人资料帖子
VB.NET社区
登录
寄存器
什么是新的
搜索
搜索
仅搜索标题
通过:
新职位
搜索论坛
Menu
Log in
Register
安装应用
安装
首页
论坛
Visual Studio .NET
VS.NET一般讨论
阵列加速
JavaScript已禁用。为了获得更好的体验,请在继续浏览器之前启用JavaScript。
您正在使用过期的浏览器。它可能无法正确显示此网站或其他网站。
您应该升级或使用
替代浏览器
.
回复主题
信息
<blockquote data-quote ="SilverShaded" data-source="post: 21322" data-attributes="member: 12508"><p>找到时间尝试一下,它不再是最慢的步骤。</p><p></p><p>实际上,现在调用Math.Sqrt是我最慢的步骤,它调用了35,700次,消耗了总运行时间的10%...& 因此可能没有重大的潜在改进...</p><p></p><p>[CODE lang="csharp" title="加速版本"] & 静态公共不安全double CalcAmix(组件cc,double [] XY,double [] ai,double [,] kijm,out double [,] Aij,out double [] sumAi)</p><p> {</p><p> & // Debug.Print(": CalcAmix");</p><p> // </p><p> & // T以开尔文为单位; Tel in Kelvin;电脑中的Pa</p><p> // </p><p> & // 指针示例</p><p> </p><p> & int n = cc.components.Count;</p><p> & 双混合= 0;</p><p> & Aij =新的double [n,n];</p><p> & sumAi =新的double [n];</p><p> & int UpperBound0 = Aij.GetUpperBound(0);</p><p> & int UpperBound1 = Aij.GetUpperBound(1);</p><p></p><p> & 固定(double * ptr = Aij,aiPtr = ai,kijmPtr = kijm)</p><p> {</p><p> & double *元素= ptr;</p><p> & double * kijelement = kijmPtr;</p><p> & double * aielement = aiPtr;</p><p> & 为(int i = 0; i< = UpperBound0;我++)</p><p> { </p><p> & 对于(int j = 0; j< = UpperBound1; j ++)</p><p> {</p><p> 如果(i == j)</p><p> & * element = * aielement;</p><p> // 否则if(i> j)</p><p> // & *(ptr + i * UpperBound1 + j)= *(ptr + j * UpperBound1 + i);</p><p> 其他</p><p> & * element = Math.Sqrt(*(aiPtr + i)* *(aiPtr + j))*(1-* kijelement);</p><p></p><p> element ++;</p><p> kijelement ++;</p><p> }</p><p> </p><p> aielement ++;</p><p> }</p><p> }</p><p></p><p> & 固定(double * ptrAij = Aij,ptrXY = XY,ptrsumAI = sumAi)</p><p> {</p><p> & double * elementAij = ptrAij;</p><p> & double * elementsumAI = ptrsumAI;</p><p> & double * elementXy = ptrXY;</p><p></p><p> & 为(int i = 0; i< n; i++)</p><p> { </p><p> & 对于(int j = 0; j< n; j++)</p><p> {</p><p> & * elementsumAI + = * elementXy * * elementAij;</p><p> elementXy ++;</p><p> elementAij ++;</p><p> }</p><p></p><p> amix + = * elementsumAI * *(ptrXY + i);</p><p> elementXy = ptrXY;</p><p> elementsumAI ++;</p><p> }</p><p> }</p><p> 返回混合</p><p> }</p><p>[/CODE]</p></blockquote><p></p>
[QUOTE ="SilverShaded, 邮编:21322, 成员:12508"] 找到时间尝试一下,它不再是最慢的步骤。 实际上,现在调用Math.Sqrt是我最慢的步骤,它调用了35,700次,消耗了总运行时间的10%... so running out of significant potential improvements maybe... [CODE lang="csharp" title="加速版本"]静态公共不安全double CalcAmix(组件cc,double [] XY,double [] ai,double [,] kijm,out double [,] Aij,out double [] sumAi) { // Debug.Print(": CalcAmix"); // // T以开尔文为单位; Tel in Kelvin;电脑中的Pa // // 指针示例 int n = cc.components.Count; 双混合= 0; Aij =新的double [n,n]; sumAi =新的double [n]; int UpperBound0 = Aij.GetUpperBound(0); int UpperBound1 = Aij.GetUpperBound(1); 固定(double * ptr = Aij,aiPtr = ai,kijmPtr = kijm) { double *元素= ptr; double * kijelement = kijmPtr; double * aielement = aiPtr; 为(int i = 0; i< = UpperBound0;我++) { 对于(int j = 0; j< = UpperBound1; j ++) { 如果(i == j) * element = * aielement; // 否则if(i> j) // *(ptr + i * UpperBound1 + i)= *(ptr + j * UpperBound1 + i); 其他 * element = Math.Sqrt(*(aiPtr + i)* *(aiPtr + j))*(1-* kijelement); element ++; kijelement ++; } aielement ++; } } 固定(double * ptrAij = Aij,ptrXY = XY,ptrsumAI = sumAi) { double * elementAij = ptrAij; double * elementsumAI = ptrsumAI; double * elementXy = ptrXY; 为(int i = 0; i< n; i++) { 对于(int j = 0; j< n; j++) { * elementsumAI + = * elementXy * * elementAij; elementXy ++; elementAij ++; } amix + = * elementsumAI * *(ptrXY + i); elementXy = ptrXY; elementsumAI ++; } } 返回混合 } [/CODE] [/QUOTE]
Insert quotes…
验证
发表回复
首页
论坛
Visual Studio .NET
VS.NET一般讨论
阵列加速
本网站使用Cookie来帮助个性化内容,调整您的体验并在注册时保持登录状态。
继续使用本网站,即表示您同意我们使用cookie。
接受
了解更多…
最佳
底部