我已经重写了代码的一部分,从非常简单的c数组到使用(或试图使用)对象,以获得更多的结构。我现在使用的不是通过函数头传递数组,而是使用一个单例定义的全局数组。您可以在下面的代码中看到一个函数的示例:
它是:
void calcdiv(int nx,int ny,float **u,float **v,
float **divu,float dx,float dy,float **p,
float dt,float rho, float **bp,float **lapp)
{
int i,j;
for (i=2;i<=nx-3;++i){
for (j=2;j<=ny-3;++j){
divu[i][j] = (u[i+1][j]-u[i-1][j])*facu +
(v[i][j+1]-v[i][j-1])*facv;
}
}
...现在是:
void calcdiv()
{
int i,j;
SingletonClass* gV = [SingletonClass sharedInstance];
for (i=2;i<=gV.nx-3;++i){
for (j=2;j<=gV.ny-3;++j){
gV.divu[i][j] = (gV.u[i+1][j]-gV.u[i-1][j])*facu +
(gV.v[i][j+1]-gV.v[i][j-1])*facv;
}
}
...在进行重组之前,我一直在使用上述函数调用。这意味着直接将指针传递给数组。现在,我通过单例调用"SingletonClass* gV.“访问数组。它的工作非常好,除了它比以前慢得多。分析器告诉我,我的程序在objc_msgSend上花费了41%的时间,这是我以前从未使用过的。
通过阅读这些帖子,我了解到,当msgSend经常被调用时,可能会发生这种情况。这很可能是这里的情况,因为我的程序需要大量的数字处理才能用OpenGl显示动画流。
这就引出了我的问题:你有什么建议?我应该继续使用我的简单C实现,还是有一种非常简单的方法来加速目标c版本?请对我耐心点,因为我对目标c程序很陌生。
任何提示和建议都将不胜感激!提前谢谢。
发布于 2013-09-16 21:23:24
如果直C方法运行良好,而目标C方法由于方法调用而使您处于劣势,并且需要性能,那么没有理由不使用直C。从代码来看,我不认为添加任何“结构”有任何好处,因为工作代码看起来几乎完全相同。换句话说,Obj在这里不会给您买任何东西,但是直接的C可以买到任何东西,所以您可以选择对您的用户最好的东西,因为在可维护性和可读性方面,这两种实现没有区别。
https://stackoverflow.com/questions/18837479
复制相似问题