Performance openmp中的printf性能问题
我被告知不要在openmp程序中使用printf,因为它会降低并行模拟程序的性能 我想知道用什么来代替它。我的意思是如何在不使用printf的情况下显示程序的输出 我有以下使用openmp的AES-128模拟问题,需要进一步说明 我想知道如何在不降低模拟性能的情况下输出密码文本Performance openmp中的printf性能问题,performance,printf,openmp,simulation,Performance,Printf,Openmp,Simulation,我被告知不要在openmp程序中使用printf,因为它会降低并行模拟程序的性能 我想知道用什么来代替它。我的意思是如何在不使用printf的情况下显示程序的输出 我有以下使用openmp的AES-128模拟问题,需要进一步说明 我想知道如何在不降低模拟性能的情况下输出密码文本 提前谢谢。你不能既吃馅饼又吃馅饼。决定您是否希望获得出色的并行性能,或者在运行并行循环时查看算法的输出是否很重要 显而易见的离线解决方案是将明文、密钥和密文存储在数组中。在您的案例中,在原始案例中需要119 MiB(=
提前谢谢。你不能既吃馅饼又吃馅饼。决定您是否希望获得出色的并行性能,或者在运行并行循环时查看算法的输出是否很重要 显而易见的离线解决方案是将明文、密钥和密文存储在数组中。在您的案例中,在原始案例中需要119 MiB(
=650000*(3*4*16)
字节),在65000次试验的案例中只需要12 MiB。没有什么是一个现代机器无法处理的。后一种情况甚至适用于某些服务器类CPU的最后一级缓存
#define TRIALS 65000
int (*key)[16];
int (*pt)[16];
int (*ct)[16];
double timer;
key = malloc(TRIALS * sizeof(*key));
pt = malloc(TRIALS * sizeof(*pt));
ct = malloc(TRIALS * sizeof(*ct));
timer = -omp_get_wtime();
#pragma omp parallel for private(rnd,j)
for(i = 0; i < TRIALS; i++)
{
...
for(j = 0; j < 4; j++)
{
key[i][4*j] = (rnd[j] & 0xff);
pt[i][4*j] = key[i][4*j];
key[i][4*j+1] = ((rnd[j] >> 8) & 0xff) ;
pt[4*j+1] = key[i][4*j+1];
key[i][4*j+2] = ((rnd[j] >> 16) & 0xff) ;
pt[i][4*j+2] = key[i][4*j+2];
key[i][4*j+3] = ((rnd[j] >> 24) & 0xff) ;
pt[i][4*j+3] = key[i][4*j+3];
}
encrypt(key[i],pt[i],ct[i]);
}
timer += omp_get_wtime();
printf("Encryption took %.6f seconds\n", timer);
// Now display the results serially
for (i = 0; i < TRIALS; i++)
{
display pt[i], key[i] -> ct[i]
}
free(key); free(pt); free(ct);
#定义试验65000
int(*键)[16];
int(*pt)[16];
int(*ct)[16];
双定时器;
key=malloc(试验*sizeof(*key));
pt=malloc(试验*尺寸(*pt));
ct=malloc(试验*sizeof(*ct));
计时器=-omp_get_wtime();
#pragma omp并行专用(rnd,j)
对于(i=0;i>8)和0xff);
pt[4*j+1]=键[i][4*j+1];
键[i][4*j+2]=((rnd[j]>>16)和0xff);
pt[i][4*j+2]=键[i][4*j+2];
键[i][4*j+3]=((rnd[j]>>24)和0xff);
pt[i][4*j+3]=键[i][4*j+3];
}
加密(密钥[i],pt[i],ct[i]);
}
计时器+=omp_get_wtime();
printf(“加密耗时%.6f秒\n”,计时器);
//现在按顺序显示结果
对于(i=0;ict[i]
}
免费(钥匙);免费(pt);免费(ct);
要查看速度,只需测量在平行区域花费的时间。如果您也测量显示结果所需的时间,您将回到您开始的位置。Hristo,我没有话要感谢您。我没有足够的分数给你任何分数,但我衷心感谢你。非常感谢您和整个stackoverflow社区,感谢他们的卓越贡献