当前位置:   article > 正文

cpu和gpu常见加速方法_提升cpu和gpu数据传输速率的办法

提升cpu和gpu数据传输速率的办法

1. cpu 代码加速: simd指令集

上面我们已经提到多种架构的CPU,常用的两类可以分为
1)Intel , amd
2)Arm
其中Intel , amd的simd指令集包括sse系列和avx系列,一般电脑使用的是intel的cpu
Arm的指令集是NEON,主要用于手机移动端

使用simd指令集,要包括特定的头文件,然后调用指令集函数
SIMD理解和学习入门资源

2. cpu代码加速: 多线程:openmp并行

OpenMP支持的编程语言包括C语言、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMp提供了对并行算法的高层的抽象描述。

程序员通过在源代码中加入专用的#pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。
当选择忽略这些#pragma,或者编译器不支持OpenMP时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。

矩阵相乘通过 openmp 实现多线程并行加速示例:

    static void matMultCPU_parallel(const float* a, const float* b, float* c, int n)
    {
        #pragma omp parallel for schedule(dynamic)
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                double t = 0;
                for (int k = 0; k < n; k++)
                {
                    t += (double)a[i * n + k] * b[k * n + j];
                }
                c[i * n + j] = t;
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

并行计算之基础概念
并行计算之OpenMP入门简介
OpenMP4.0: #pragma openmp simd实现SIMD指令优化(ARM,X86,MIPS)

3. cpu代码加速: 多线程并行:tbb

TBB(Thread Building Blocks)是英特尔发布的一个库,全称为 Threading Building Blocks。TBB 是一套 C++ 模板库
1)TBB提供C++模版库,用户不必关注线程,而专注任务本身。
2)抽象层仅需很少的接口代码,性能上毫不逊色。
3)灵活地适合不同的多核平台。
4)线程库的接口适合于跨平台的移植(Linux, Windows, Mac)
5)支持的C++编译器 – Microsoft, GNU and Intel

opencv中目前使用tbb较多。
Intel Thread Building Blocks (TBB) 入门篇

4. CPU, GPU加速:OpenCL并行

开放计算语言 (OpenCL) 是一种开放标准,用于编写跨异构平台(包括 CPU、GPU、DSP 等)运行的代码。特别是 OpenCL 为应用程序提供了对 GPU 的访问,在计算机视觉中,许多算法可以在 GPU 上比在 CPU 上更有效地运行:例如 图像处理、矩阵运算、计算摄影、物体检测等。

5. nvidia GPU 加速: cuda C

CUDA(Compute Unified Device Architecture)是一种由显卡厂商NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员现在可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序于是就可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。

GPU编程语言选择(OpenCL、CUDA 与C++ AMP)
矩阵乘法的并行优化(1):OPENMP、CUDA实现

6. opencv中使用的加速技术:

simd, tbb, openmp, opencl, cuda等技术都有使用

有相关博客介绍opencv中的加速:
OpenCV算法加速(1)OpenMP/PPL/TTB基础知识

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/245671
推荐阅读
相关标签
  

闽ICP备14008679号