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;
}
}
}
并行计算之基础概念
并行计算之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等技术都有使用文章来源:https://www.toymoban.com/news/detail-474176.html
有相关博客介绍opencv中的加速:
OpenCV算法加速(1)OpenMP/PPL/TTB基础知识文章来源地址https://www.toymoban.com/news/detail-474176.html
到了这里,关于cpu和gpu常见加速方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!