关于openmp

laihuahua 2008-12-24 12:19:40
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])); /* 计算初始适应度*/
}
}
...全文
187 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
intel_jeff 2009-01-07
  • 打赏
  • 举报
回复
补充一句:#pragma omp parallel for 后面紧跟的for循环的循环变量(j)也是自动设置为 private的。因为每个线程都需要有自己的j嘛。
intel_iclifort 2008-12-26
  • 打赏
  • 举报
回复
在OpenMP的循环并行区域内,循环下标变量缺省是私有的,其它默认都是共享的。 还有就是归约操作reduction的变量,会自动保护处理
laihuahua 2008-12-24
  • 打赏
  • 举报
回复
is j private?
laihuahua 2008-12-24
  • 打赏
  • 举报
回复
is j private?

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧