3.9. sample_gpu_3d 使用说明

X53D GPU 支持以下标准 API:

  • EGL

  • OpenGLES

  • Vulkan

  • OpenCL

其中, EGL 作为中间层 API,提供了与底层硬件的交互支持。因此,针对以下三种 API 提供了相应的示例代码:

  1. OpenGLES 示例

  2. Vulkan 示例

  3. OpenCL 示例

请根据具体需求选择对应的 API 示例进行参考和使用。

3.9.1. OpenGL ES

3.9.1.1. sample_bezier

功能概述

功能描述:sample_bezier 使用 3D GPU 画一条贝塞尔曲线,并将图片保存到文件中

软件架构说明

 framwork_bezier

代码位置及目录结构
  • 代码位置 app/samples/platform_samples/sample_gpu_3d/gles/sample_bezier

  • 目录结构

sample_bezier/
├── common
│   ├── bmp.c
│   ├── bmp.h
│   ├── vdk_common.c
│   └── vdk_common.h
└── sample_bezier
    ├── bezier.c
    └── Makefile
API 流程说明
整体流程

 sample_bezier_data_flow

vdk_init

vdk_init(对应整体流程中的黄色背景部分)属于 libVDK.so 中的函数,对 EGL 接口的封装,完成在没有桌面系统时,基于 DRM+GBM 实现 EGL 上下文的初始化

 sample_bezier_vdk_init_data_flow

编译部署

编译
  • 进入 sample_bezier 目录,执行 make 编译

  • 输出成果物是 sample_bezier 源码目录下的 bezier

  • 详细程序编译方式请查阅 编译方法 章节

程序部署
  1. 把目录 sample_bezier 上传到开发板 /userdata 目录下

  2. 进入 sample_bezier 运行 chmod +x bezier 命令给程序赋予可执行权限

运行

程序运行方法

加载驱动:

modprobe panel-jc-050hd134
modprobe galcore
modprobe vio_n2d
modprobe lontium_lt8618
modprobe vs-x5-syscon-bridge
modprobe vs_drm

通过 HDMI 接口接入显示器并执行程序:./bezier

程序参数选项说明

运行效果

执行命令:
./bezier

运行日志:

效果说明:
当前目录下,会生成如下 bmp 格式的图像文件: bezier.bmp,文件中 红色线条是一条贝塞尔曲线

 效果

3.9.2. OpenCL

3.9.2.1. sample_matrix_multiply

功能概述

功能描述:sample_matrix_multiply 完成分别利用 3D GPU 和 CPU 进行相同的矩阵运行,并打印两者的耗时

软件架构说明

 framwork_matrix_mulpi

代码位置及目录结构
  • 代码位置 app/samples/platform_samples/sample_gpu_3d/cl/sample_matrix_multiply

  • 目录结构

└── sample_matrix_multiply
    ├── Makefile
    └── matrix_multiply.c
API 流程说明
整体流程

 sample_matrix_mulpti_data_flow

matirc_mult_opencl

函数 matirc_mult_opencl 使用 GPU 完成 矩阵乘法运算,流程如下(对应整体流程中的黄色背景部分)

 sample_matrix_mulpti_opencl_data_flow

编译部署

编译
  • 进入 sample_matrix_multiply 目录,执行 make 编译

  • 输出成果物是 sample_matrix_multiply 源码目录下的 matrix_multiply

  • 详细程序编译方式请查阅 编译方法 章节

程序部署
  1. 把目录 sample_matrix_multiply 上传到开发板 /userdata 目录下

  2. 进入 sample_matrix_multiply 运行 chmod +x matrix_multiply 命令给程序赋予可执行权限

运行

程序运行方法

执行可执行程序:./matrix_multiply

程序参数选项说明

运行效果

执行命令: ./matrix_multiply 运行日志:

./matrix_multiply
CPU execution time: 19.133549 seconds
OpenCL execution time: 0.792543 seconds
Matrices are identical!

效果说明 执行相同的矩阵乘法运算:

  1. CPU 耗时: 19.133549 seconds

  2. GPU 耗时: 0.792543 seconds

总耗时中可以看出在做矩阵乘法运算时, GPU 比 CPU 有更高得性能