当代码包含竞争情况时,内存访问的顺序是不确定的,因此每次运行的计算结果会不同。
通过编译和运行示例可以看出,由于代码中存在数据争用,每次执行 prime_omp 或 prime_pthr 时都会产生不正确且不一致的结果。
在下面的示例中,键入粗体形式的命令以编译并运行 prime_omp 程序:
% cc -xopenmp=noopt -o prime_omp prime_omp.c -lm % % ./prime_omp Number of prime numbers between 2 and 10000: 1229 % ./prime_omp Number of prime numbers between 2 and 10000: 1228 % ./prime_omp Number of prime numbers between 2 and 10000: 1229 |
在下面的示例中,键入粗体形式的命令以编译并运行 prime_pthr 程序:
% cc -mt -o prime_pthr prime_pthr.c -lm % % ./prime_pthr Number of prime numbers between 2 and 10000: 1140 % ./prime_pthr Number of prime numbers between 2 and 10000: 1122 % ./prime_pthr Number of prime numbers between 2 and 10000: 1141 |
请注意每个程序的三次运行结果的不一致性。可能需要运行这些程序三次以上才能看到不一致的结果。
接下来将会校验代码并创建实验,以便可以找出发生数据争用的位置。