OpenCL 嵌入式端算法加速
1. 嵌入式端算法加速架构
1.1 OpenMP
1.1.1 平台是否支持
简单理解,我们使用 OpenMP 就可以非常简单地实现多线程有多简单呢,查看是否支持 OpenMP在使用 OpenMP 完成多线程任务时,首先得查看当前编译器是否支持 OpenMP,我在 Linux 上的 GCC 编译器是默认支持 OpenMP 的,只需在生成可执行文件的命令中加入 -fopenmp 即可下面的代码也可以查看当前编译器是否支持 OpenMP。
check_openmp.c
#include <stdio.h>
int main()
{
#if _OPENMP
printf("support openmp\n");
#else
printf("not support openmp\n");
#endif
return 0;
}
1.1.2 设置虚拟内核
输出结果如下,因为没有指定线程数,所以默认使用 CPU 核心数量的线程,这里在虚拟机(cpu四个核心)
当然我们也可以指定核心数量,代码如下
#include <stdio.h>
int main(void)
{
# pragma omp parallel num_threads(6)
{
printf("Hello, world. \n");
}
return 0;
}
输出结果如下,你可能会想为啥可以指定大于核心的线程数,不是只有四个核心吗,其实不影响的,CPU也不看你的核心数,只是知道该取指令进行计算,一般使用大于等于核心
这里的 omp.h 主要包括一些 openmp 的库函数,比如 omp_get_thread_num() 获取当前线程 id。
1.1.3 并行计算示例
下面使用多线程完成加法
loop_add.c
#include <stdio.h>
#include <omp.h>
#include <stdlib.h>
int</