我有一个程序可以通过使用x[i]
条件循环在x维度中改变位移do while
来最小化系统的能量。我想将其扩展到一个程序,通过改变x[i]
,y[i]
,z[i]
来最小化能量,我想,在这种情况下,需要三个同时do while
个循环大do while
循环,我该如何实现?
一维问题代码如下所示:
int main(void)
{
double eta,energyold;
energyold=1.0;
unsigned i,j;
init();
do{
function();
functiond(); //JACOBIAN
dgesv(fnd,b,N,dx);
newpsn();
energyT();
eta=fabs(energy-energyold)/energy;
energyold=energy;
//printf("%lf %lf %lf\n",eta,energy,norm);
}while(norm>1e-12);
for(i=0;i<N;i++)
{
printf("The Equillibrium position of ion %d is: %lf\n",i+1,x[i]);
}
return 0;
}
答案 0 :(得分:2)
有许多使用线程的建议,但我不相信你真的需要。
这听起来更像是一个纯粹的计算问题,在多核CPU上使用线程可能会缩短总执行时间,但是为了表达计算不是必需的。
你不能只使用三个嵌套循环(如果你需要检查x / y / z值的所有组合),或者一次只做一个?线程编程可能相当棘手,因此如果某个特定问题不是必需的话,它可能真的“值得”避免。
答案 1 :(得分:1)
您可以尝试使用多线程。多线程不会使do-while
循环并行运行,而是同时运行。
如果您正在使用Linux,则可以使用pthread
库来提供生成新线程的函数,分配任务调度方法,互斥锁相关函数等。
一些有用的链接:
man pthread
(在Linux上,如果安装了pthread库)