# parallel **Repository Path**: digitzh/parallel ## Basic Information - **Project Name**: parallel - **Description**: 并行计算程序设计 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-01 - **Last Updated**: 2024-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # parallel 并行计算 参考链接:[Voter数组元素并行比较 - Gitee Issue](https://gitee.com/tjopenlab/como-fscp-voter/issues/IB81JP) ## 测试方法 执行`./verify.sh`,编译生成可执行文件(目录:bin)、运行,并生成反汇编文件(目录:objdump)。 ## 测试结果 使用不同的并行方法对大小为1e8的数组进行比较,将运行时间与普通for循环进行对比。 ### 1 O3优化+自动向量化(vectorization)编译标志 普通for循环: ``` $(CC) -march=native -g -o $(BIN_PATH)/$@ $< ``` O3优化+自动向量化: ``` $(CC) -O3 -ftree-vectorize -march=native -g $< -o $(BIN_PATH)/$@ ``` 测试结果示例(设备配置不同,结果可能有差别): #### C ```sh [1-SIMD-vec]Starting comparison... Arrays are equal. Execution time: 0.585486 seconds ------------------------------- [1-SIMD-vec]Starting comparison... Arrays are equal. Execution time: 0.095347 seconds ``` #### C++ ```sh [1-SIMD-vec]Starting comparison... Arrays are equal. Execution time: 0.144578 seconds ------------------------------- [1-SIMD-vec]Starting comparison... Arrays are equal. Execution time: 0.0977148 seconds ``` ### 2 内置的SIMD库(AVX...) 普通for循环:0.143194s SIMD: 0.120148s AVX2: 0.0978016s ```sh [2-SIMD-builtin]Starting comparison... Arrays are equal (normal comparison). Normal comparison time: 0.143194 seconds Arrays are equal (SIMD comparison). SIMD comparison time: 0.120148 seconds Arrays are equal (AVX2 comparison). AVX2 comparison time: 0.0978016 seconds ``` 可使用CPU-Z查看支持的指令集。实测PC支持AVX2指令集。 相关反汇编调用举例: ``` 000000000000149b <_Z19compare_arrays_avx2PKiS0_m>: 149b: f3 0f 1e fa endbr64 149f: 55 push %rbp ``` ### 3 OpenMP 普通for循环: 0.0994856s OpenMP: 0.0384518s ```sh [3-SIMD-openMP]Starting comparison... Arrays are equal (normal comparison). normal comparison time: 0.0994856 seconds Arrays are equal (OpenMP comparison). OpenMP comparison time: 0.0384518 seconds ``` 相关反汇编调用举例: ``` 0000000000001690 <_Z21compare_arrays_openmpPKiS0_m._omp_fn.0>: 1690: f3 0f 1e fa endbr64 1694: 41 56 push %r14 ``` ### 4 TBB 普通for循环: 0.0991927s TBB: 0.0185034s ```sh [4-SIMD-TBB]Starting comparison... Arrays are equal. Arrays are equal (normal comparison). Normal comparison time: 0.0991927 seconds Arrays are equal (TBB comparison). TBB comparison time: 0.0185034 seconds ------------------------------- ``` 相关反汇编调用举例: ``` 0000000000003100 <_ZN3tbb6detail2d19start_forINS1_13blocked_rangeImEEZ18compare_arrays_tbbPKiS6_mEUlRKS4_E_KNS1_16auto_partitionerEE6cancelERNS1_14execution_dataE>: 3100: f3 0f 1e fa endbr64 3104: 41 55 push %r13 ```