关于openmp
void initpop() /* 随机初始化种群 */
{
int j, j1, k, stop;
unsigned mask = 1;
for(j = 0; j < popsize; j++) //popsiza 种群大小
{
for(k = 0; k < chromsize; k++) //chromsiza存储一染色体所需字节数
{
oldpop[j].chrom[k] = 0;
if(k == (chromsize-1))
stop = lchrom - (k*(8*sizeof(unsigned)));
else
stop =8*sizeof(unsigned);
for(j1 = 1; j1 <= stop; j1++)
{
oldpop[j].chrom[k] = oldpop[j].chrom[k]<<1;
if(flip(0.5))
oldpop[j].chrom[k] = oldpop[j].chrom[k]|mask;
}
}
oldpop[j].parent[0] = 0; /* 初始父个体信息 */
oldpop[j].parent[1] = 0;
oldpop[j].xsite = 0;
objfunc(&(oldpop[j])); /* 计算初始适应度*/
}
}
以上是遗传算法中初始化的代码,我想用openmp给并行线程化一下
以下是我的代码,请各位大侠帮忙看一下,这样行吗?
先谢过!
void initpop() /* 随机初始化种群 */
{
int j, j1, k, stop;
unsigned mask = 1;
#pragma omp parallel for private(k,j1)
for(j = 0; j < popsize; j++) //popsiza 种群大小
{
for(k = 0; k < chromsize; k++) //chromsiza存储一染色体所需字节数
{
oldpop[j].chrom[k] = 0;
if(k == (chromsize-1))
stop = lchrom - (k*(8*sizeof(unsigned)));
else
stop =8*sizeof(unsigned);
for(j1 = 1; j1 <= stop; j1++)
{
oldpop[j].chrom[k] = oldpop[j].chrom[k]<<1;
if(flip(0.5))
oldpop[j].chrom[k] = oldpop[j].chrom[k]|mask;
}
}
oldpop[j].parent[0] = 0; /* 初始父个体信息 */
oldpop[j].parent[1] = 0;
oldpop[j].xsite = 0;
objfunc(&(oldpop[j])); /* 计算初始适应度*/
}
}