编程中的并行计算、除法优化与常见错误分析
1. 并行计算与 OpenMP
1.1 基本循环示例
在并行计算中,有一个简单的循环示例:
for (i=0; i<INT32_MAX; i++)
check_nonce (i);
此代码在未使用 #pragma
时,会对从 0 到 INT32_MAX
(即 0x7fffffff 或 2147483647)的每个数字调用 check_nonce()
函数。而使用 #pragma
后,编译器会添加特殊代码,将循环区间分割成更小的部分,以便在所有可用的 CPU 核心上运行。
1.2 编译方式
不同编译器有不同的编译命令:
- MSVC 2012 :
cl openmp_example.c sha512.obj /openmp /O1 /Zi /Faopenmp_example.asm
- GCC :
gcc -fopenmp 2.c sha512.c -S -masm=intel