Parallel processing 使用OpenMp实现指令并行

Parallel processing 使用OpenMp实现指令并行,parallel-processing,openmp,Parallel Processing,Openmp,我正在尝试使用OpenMp并行化下面的代码。这段代码属于加密算法,其中每个迭代的输出被输入到下一个迭代。因此,我认为由于轮次的依赖性,我不能并行化这个for循环。但我想将指令的每一部分并行化 y+=((z5)+k[1])使用单独的线程并最终获得XOR。我试图在循环中插入openMp指令,但这需要更长的时间。请纠正我哪里做错了 for(n=0;n<32;n++) { sum += delta; #pragma omp parallel y += ((z<<4)+k[0]) ^

我正在尝试使用OpenMp并行化下面的代码。这段代码属于加密算法,其中每个迭代的输出被输入到下一个迭代。因此,我认为由于轮次的依赖性,我不能并行化这个for循环。但我想将指令的每一部分并行化 y+=((z5)+k[1])使用单独的线程并最终获得XOR。我试图在循环中插入openMp指令,但这需要更长的时间。请纠正我哪里做错了

for(n=0;n<32;n++)
{
sum += delta;

#pragma omp parallel
y += ((z<<4)+k[0]) ^ (z+sum) ^ ((z>>5)+k[1]);

z += ((y<<4)+k[2]) ^ (y+sum) ^ ((y>>5)+k[3]);

}

用于(n=0;您在一开始就真的犯了错误,为这种类型的应用程序选择OpenMP。即使您成功地并行化了
y
z
的计算,您也不太可能实现任何加速;操作太少,无法超过开销。一种更好的并行化方法大多数密码算法都是实现某种软件管道。我应该在结束之前的评论时这样说:并行大多数密码算法的更好方法是实现某种软件管道,但OpenMP不是为这种类型的并行计算而设计的,也不容易适应这种类型的并行计算。