工具简介

EFSMI (Enflame System Management Interface)是用于管理 GCU 设备的Linux命令行工具。 可以实时查询各种 GCU 设备信息:包含温度、功耗、时钟频率等。 有关EFSMI命令的详细用法,请参考 EFSMI 命令。 EFSMI是基于 EFML (Enflame Management Library)开发的,EFML是提供给用户的一套访问底层GCU硬件的代码库。 请参阅章节 EFML - Enflame 管理库

参考文献

词汇表

表 1 词汇表

名称

说明

EFSMI

EnFlame System Management Interface Tool which is based on EFML library for monitoring GCU device in system

EFML

EnFlame Management Library, a C/C++/Script library providing system management APIs

GCU

General Compute Unit, refer to PCIe based computing Devices delivered by Enflame

UUID

Universally Unique Identifier

DPM

Dynamic Power Managerment

TDP

Thermal Design Power

ECC

Error Correcting Code

MCM

Multi Chip Modules

分发包

支持的OS类型

EFSMI仅支持 Linux 操作系统。所测试的系统如下所示。

表 2 支持操作系统类型

系统

内核

架构

Ubuntu 18.04.4 Server LTS

4.15.0

x86_64/amd64

Ubuntu 20.04.2 Desktop LTS

5.15.0

x86_64/amd64

TLinux

4.14.105

x86_64/amd64

kylinos

4.19.90

x86_64/amd64

kylinos

4.19.90

aarch64

安装包内容

包含 efsmi 在内的所有内容在TopsPlatform安装包中提供。其中有 efsmiefml RPM/DEB包, 以及python语言的开发库 pyefml。 具体内容如下表所示:

表 3 驱动安装包包含的文件列表

内容

说明

efsmi-x.x.x.x86_64.rpm

EFSMI RPM 软件包

efsmi_x.x.x_amd64.deb

EFSMI DEB 软件包

efml_x.x.x.x86_64.rpm

EFML RPM 软件包

efml_x.x.x_amd64.deb

EFML DEB 软件包

pyefml-x.x.x-py3-none-any.whl

EFML Python开发库软件包

Attention

各组件安装包现已不再单独提供,如有特殊需求请联系客户支持工程师。

安装步骤

请参考TopsPlatform 安装指南进行安装。

使用须知

在宿主机中运行

Attention

  1. efsmi 的部分功能仅支持特权模式下执行

  2. efsmi 在非特权模式下运行,需要依赖 enflame 提供的设备驱动程序

在容器中运行

efsmi 支持在容器中运行, 可以通过以下方式:

赋予容器特权模式

Attention

  1. 在宿主机上以特权用户身份启动容器

  2. 启动容器时, 使能 --privileged=true 参数以赋予容器内用户特权

不赋予特权模式

Attention

  1. 宿主机需要加载 enflame 提供的内核模块设备驱动程序

  2. 启动容器时, 使能 --device 选项映射 enflame 设备到容器内

在虚拟机中运行

Attention

  1. efsmi 不支持在使用mdev虚拟设备的虚拟机中运行

EFSMI 命令

EFSMI是用于监控 GCU 状态的可执行程序,它基于 EFML 库。 EFSMI当前支持的命令如下表所示。

Attention

EFSMI 不支持在宿主机和docker 里面同时运行。

当前支持的命令列表:

表 4 命令列表

参数

说明

-h, –help

显示此帮助说明

“”

不带参数执行 ‘sudo efsmi’ , efsmi 将显示包含 版本号/驱动/功耗/频率/温度

e.g. 'sudo efsmi -i 0'
显示 GCU 卡 0 的信息

-L

显示所有支持的 GCUs

–version

显示 efsmi 版本号

-i X

选择指定的 GCU 卡

e.g. 'sudo efsmi -i 0'
显示 GCU 卡 0 的信息

–dmon

监控 GCU 设备的各种数据,刷新率为 1s。
Ctrl + C 退出监控。
子命令:
a. -s XXX

选择显示部分数据,XXX 可以是 “p”, “g”, “c”, “m”, “t” 及其组合, “all” 为所有信息。

p: 显示功耗/温度/使用率的监控信息

c: 显示频率的监控信息

m: 显示内存信息, 此功能依赖 enflame 提供的设备驱动程序, 在缺少驱动程序时, 内存信息为 0

t: 显示 PCIe/GCU-LARE 吞吐量的监控信息, GCU-LARE 在部分产品上不支持

all: 在同一行显示所有信息

e.g. 'sudo efsmi -dmon -s c -i 0'
显示 GCU0 的频率信息

b. -c X

设置循环次数

e.g. 'sudo efsmi -dmon -c 10'
打印10次设备监控信息

–dmon



c. -o

显示时间戳信息

d. -w X

以秒为单位设置刷新时间间隔

–pmon

监控使用 GCU 设备的进程的各种数据,刷新率为 1s。
Ctrl + C 退出监控。
子命令:
a. -c X

设置循环次数

e.g. 'sudo efsmi -pmon -c 10'
打印10次设备监控信息

b. -o

显示时间戳信息

c. -w X

以秒为单位设置刷新时间间隔

-q

获取 GCU 状态信息
列出 GCUs 状态的详细信息,以 TAB 对齐


支持的子命令:

a. -d XXX

选择要显示的内容
XXX 可以设定为以下之一:
“POWER”, “CLOCK”, “DRIVER”, “DEVICE”, “PCIE” “MEMORY” “TEMP” “VOLT”
“USAGE”, “CABLE”, “ECC”, “RMA”, “VPU”
e.g. 'sudo efsmi -q -d CLOCK -i 0'


选择显示GCU0 的频率信息

注意:
内存信息依赖 enflame 提供的设备驱动程序

–ptopo

显示 设备的PCIE 拓扑信息

-r

该指令会复位目标 GCU 设备,在一些场景下可以用来重置 GCU 硬件状态。否则需要重启机器。
重置操作并不保证在所有情况下都能正常工作,应谨慎使用。
此命令需要依赖 enflame 提供的设备驱动程序

支持的子命令:

a. -y

自动确认提示。默认以“yes”作为所有提示的答案,并以非交互方式运行。

–ecc

设置设备的ECC 状态
ECC 状态变更后需 GCU 复位方可生效(使用’-r hot’命令)

用法:
–ecc # 查询 ECC 状态
–ecc on|off # 打开/关闭 ECC 模式

该命令不支持在虚拟化环境的VF下使用。请确保在切换ECC 状态前,所有的任务都已经退出。

–sleep

设置设备的功耗状态进入或者退出睡眠模式.
默认情况下,设备会在空闲一段时间后自动进入睡眠模式,并在有新的任务下发后自动退出睡眠模式。
该命令可手动使设备进入或者退出睡眠模式。

用法:
–sleep # 查询设备是否在睡眠模式
–sleep on|off # 设置设备进入/退出睡眠模式
# 切换结束后,设备大约会有10秒的延迟才能进入睡眠模式

在虚拟化环境下,该命令不支持在PF上切换设备功耗状态。当所有VF进入睡眠模式后,PF会自动进入睡眠模式。
而当有任意VF退出睡眠模式时,PF会自动退出睡眠模式。

–mcm

设置设备的MCM 状态
该命令会自动触发设备复位,以使新的MCM 状态生效。

用法:
–mcm # 查询 MCM 状态
–mcm single|dual # 设置设备MCM 状态为单芯片/双芯片模式

在虚拟化环境下不支持切换MCM 状态。请确保在切换MCM 状态前,所有的任务都已经退出。

Attention

GCU-LARE 1 在部分产品上不支持。 ECC 在部分产品上不支持。

信息概览

不带参数执行 'sudo efsmi', 将显示如下的看板信息:

$ sudo efsmi
----------------------------------------------------------------------------
-------------------- Enflame System Management Interface -------------------
----------- Enflame Tech, All Rights Reserved. 2024 Copyright (C) ----------
----------------------------------------------------------------------------

+2024-05-30, 14:49:23 CST--------------------------------------------------+
|EFSMI    V1.0.20240530    Driver Ver: 9e24f0b1c1a3e0694717a1f2f64e4fbb    |
|--------------------------------------------------------------------------|
|--------------------------------------------------------------------------|
| DEV    NAME                | FW VER          | BUS-ID      ECC           |
| TEMP   Dpm   Pwr(Usage/Cap)| Mem     GCU Virt| DUsed       SN            |
|--------------------------------------------------------------------------|
| 0      S60                 | 33.6.2          | 00:23:00.0  Enable        |
| 37 C   Sleep     95W  300W | 42976MiB Disable|   0.0%      A004B4052.... |
+--------------------------------------------------------------------------+
表 5 看板信息详细说明

字段

字段内容

EFSMI Ver:

EFSMI 版本号

Driver Ver:

Driver 版本号

DEV:

GCU 设备的ID号

NAME:

GCU 设备型号

FW Ver:

固件版本

Bus-ID:

PCIe 设备 Domain/Bus/Device/Function ID

ECC:

Memory ECC 开/关 状态

TEMP:

GCU 设备当前温度

Dpm:

动态功耗管理, 详情参考下面表格

Pwr (Usage/Cap):

当前功耗/额定功耗

DUsed:

设备使用率

SN:

设备序列号

GCU Virt:

GCU虚拟化状态

表 6 DPM等级详情

DPM等级

详情

Active

正常模式,GCU满功耗运行。 一旦有任务运行,GCU将切换至Active

Sleep:

低功耗模式。在闲置若干秒后,GCU将从Active切换为Sleep

Suspend:

深层次低功耗模式。 在闲置数分钟后,GCU将从Sleep切换为Suspend

Attention

默认条件下将展示所有设备的信息。 参数 “-i X” 可以用来获取指定的设备信息。

设备使用率:在 1 个采样周期内, GCU 上有 1 个或多于 1 个的 SIP 处于工作状态的时间占比, 采样周期为 1 秒。

信息查询

下图显示了执行命令 'sudo efsmi -q' 时得到的查询信息。 部分内容定义与EFSMI 看板中定义的相同。另有更多信息展示: 例如PCIe Tx/Rx 实时带宽信息、GCU-LARE端口连接情况和实时带宽信息和GCU/Mem信息。 默认情况下, “-q” 命令将查询并显示所有检测到的 GCU 设备, 参数 “-i X” 可用于选择特定的 GCU 。 支持的子命令请参见本章 EFSMI 命令

$ sudo efsmi -q
   ----------------------------------------------------------------
   -------------- Enflame System Management Interface -------------
   ----- Enflame Tech, All Rights Reserved. 2024 Copyright (C) ----
   ----------------------------------------------------------------

   DEV ID 0
      Driver Info
         Ver                     : 1.2.0.4
      Device Info
         Dev Name                : S60
         Dev UUID                : T6R231010508
         Dev SN                  : A029C30510020
         Dev PN                  : EFB-0088800-00
         Dev MFD                 : 2023-9-12
         Health                  : True
      PCIe Info
         Vendor ID               : 1e36
         Device ID               : c033
         Domain                  : 0000
         Bus                     : 07
         Dev                     : 00
         Func                    : 0
         Link Info
         Max Link Speed          : Gen5
         Max Link Width          : X16
         Cur Link Speed          : Gen4
         Cur Link Width          : X16
         Tx NAK                  : 0
         Rx NAK                  : 0
         Tx Throughput           : 0.00 MB/s
         Rx Throughput           : 0.00 MB/s
      Clock Info
         Mem CLK                 : 7000 MHz
      Power Info
         Power Capa              : 250 W
         Cur Power               : 90 W
         Dpm Level               : Active
      Device Mem Info
         Mem Size                : 49120 MiB
         Mem Usage               : 1129 MiB
         Mem Ecc                 : disable
      Temperature Info
         GCU Temp                : 39 C
      Voltage Info
         VDD GCU                 : 0.896 V
         VDD SOC                 : 0.846 V
         VDD MEMQC               : 1.347 V
      ECC Mode
         Current                 : Disable
         Pending                 : Disable
      RMA Info
         Flags                   : False
         DBE                     : 0
      Power Cable
         Status                  : Normal
      VPU Info
         Encoder Usage           : 0 %
         Decoder Usage           : 0 %

设备监控

下面的图片显示了执行 'sudo efsmi -dmon' 时得到的设备监视器信息,它将显示功耗,GCU/Mem温度,频率等的实时抓取的板卡信息 详细的子命令请参见本章中的表格 EFSMI 命令

收集的数据将显示在一行,每秒刷新一次。循环数和刷新周期可以通过子命令 “-c X” 和 “-w X” 调整。 ` Ctrl + C ` 可退出显示 。

$ sudo efsmi -dmon
   ----------------------------------------------------------------
   -------------- Enflame System Management Interface -------------
   ----- Enflame Tech, All Rights Reserved. 2024 Copyright (C) ----
   ----------------------------------------------------------------

   *Dev Logic Pwr   DTemp DUsed Dpm      MUsed Mem    Mclk   TxPci   RxPci
   *Idx Id    W     C     %     L        %     Mib    MHz    MB/s    MB/s
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    38    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
   0    0     90    39    0.0   Active   2.4   42976  7000   0.0     0.0
表 7 监控功能数据详细介绍

字段

字段内容

Dev Idx:

GCU卡序号

Logic Id:

GCU卡逻辑序号

Pwr:

板卡功耗(瓦)

DTemp:

板卡温度

DUsed:

基于采样统计的设备使用率

Dpm:

动态功耗管理,对应于GCU频率等级

MUsed:

GCU 内存使用率

Mem:

GCU 内存的大小

Ecc:

ECC 状态

Mclk MHz:

内存频率

TxPci/RxPci:

PCIe 传输/接受 带宽

TxE/RxE:

GCU-LARE 传输/接受 带宽, 部分产品不支持

Attention

通常情况下, 设备ID与逻辑ID是相同的;在某些平台上, 可能存在设备ID与逻辑ID不同的情况, 请留意这一点。

GCU 卡序号:按PCI 总线上Enflame GCU 设备bdf信息排列。

GCU 卡逻辑序号:按Enflame KerneL Module Driver 枚举 GCU 设备的先后次序排列。

设备使用率:在 1 个采样周期内, GCU 上有 1 个或多于 1 个的 SIP 处于工作状态的时间占比, 采样周期为 1 秒。

PCIE 拓扑

在PCIe的树形结构里, 每个GCU设备都是一个EP、endpoint,它会跟PCIe Switch 的下游端口相连。 PCIe Switch的上游端口会继续跟别的Switch或者CPU的RC(Root Complex)/Host Bridge的下游端口相连。 这样构建出一个树形的topo结构。

‘sudo efsmi -ptopo’ 命令可以展示这种结构的详细信息

$ sudo efsmi -ptopo
   ----------------------------------------------------------------
   -------------- Enflame System Management Interface -------------
   ----- Enflame Tech, All Rights Reserved. 2024 Copyright (C) ----
   ----------------------------------------------------------------

   gcu 0-0000:20:00.0 --> ... --> bridge-pci0000:16 --> cpu
   gcu 1-0000:35:00.0 --> ... --> bridge-pci0000:30 --> cpu
   gcu 2-0000:36:00.0 --> ... --> bridge-pci0000:30 --> cpu
   gcu 3-0000:39:00.0 --> ... --> bridge-pci0000:30 --> cpu
   gcu 4-0000:3d:00.0 --> ... --> bridge-pci0000:30 --> cpu
   gcu 5-0000:9c:00.0 --> ... --> bridge-pci0000:97 --> cpu
   gcu 6-0000:9d:00.0 --> ... --> bridge-pci0000:97 --> cpu
   gcu 7-0000:a0:00.0 --> ... --> bridge-pci0000:97 --> cpu
   gcu 8-0000:a4:00.0 --> ... --> bridge-pci0000:97 --> cpu
   gcu 9-0000:bd:00.0 --> ... --> bridge-pci0000:b0 --> cpu

ECC 状态

各个 GCU 的ECC状态可能不同,以’-q’ 命令获取当前模式, 可以通过 'sudo efsmi -ecc on|off -i 0' 设置设备0的ECC状态,’off’是禁用,’on’是启用; 设置后需按照提示复位设备方可生效。 该命令不支持在虚拟化环境中的VF上使用。

EFML - Enflame 管理库

EFML是一套基于C/C++语言开发的程序库,使用这套程序库,应用软件可以很方便的实现对Enflame 硬件设备的访问。 EFML公开提供的API可以被C/C++/Python/Go… 等语言开发的程序使用。

EFSMI 就是利用 EFML 实现硬件监控和管理的应用之一 。 EFML 是与 EFSMI 包一起发布的,包括它的头文件、库文件、脚本,还有一些示例代码 。

EFML包含的文件

下表是 EFML 库包含的文件列表

表 8 EFML 包包含的文件列表

名称:

说明

efml.h

提供API 支持的C头文件

libefml_static.a

静态链接库

libefml.so

动态链接库

pyefml.py

python binding APIs

pyefml/samples

python 示例

C/C++ 示例

下面的例子展示了如何使用EFML库开发C/C++程序获取系统中GCU设备个数。

#include <iostream>
#include <string>
#include <string.h>
#include <stdint.h>
#include "efml.h"

int main(void)
{
   int ret = 0;

   // init library
   ret += static_cast<int>EfmlInit(false);

   // device info structure
   efmlDeviceInfo_t dev_info;

   // call 'EfmlGetDevCount' to get total device counts in system
   uint32_t dev_cnt = 0;
   ret += static_cast<int>EfmlGetDevCount(&dev_cnt);
   std::cout << "device count = " << dev_cnt << std::endl;

   // loop through each device get and print device VID/DID and Bus/Dev/Func info
   for (uint32_t i = 0; i < dev_cnt; i++)
   {
      memset(&dev_info, 0, sizeof(efmlDeviceInfo_t));
      ret += static_cast<int>EfmlGetDevInfo(i, &dev_info);
      std::cout << "dev id = " << i << std::endl;
      std::cout << "name = " << dev_info.name << std::endl;
      std::cout << "vendor id = " << std::hex << dev_info.vendor_id << std::endl;
      std::cout << "device id = " << std::hex << dev_info.vendor_id << std::endl;
      std::cout << "domain = " << std::hex << dev_info.domain_id << std::endl;
      std::cout << "bus = " << std::hex << dev_info.bus_id << std::endl;
      std::cout << "dev = " << std::hex << dev_info.dev_id << std::endl;
      std::cout << "func = " << std::hex << dev_info.func_id << std::endl;
   }

   // check if error returned in above steps
   if (ret != static_cast<int>(EFML_SUCCESS))
      std::cout <<  "execute failed! check log"  << std::endl;

   // shutdown library
   EfmlShutdown();

   return ret;
}

上述代码是C++ 代码, 编译上述代码, 请注意以下事项:

Attention

a.包含头文件efml .h b.首先调用API ‘EfmlInit()’来初始化库 c.在所有进程结束时,调用API ‘EfmlShutdown()’来释放库使用的资源 d.编译时使用’-L DIR_TO_EFML_LIB’来指定库文件存在的目录 e.编译时使用’-lefml’链接库文件 当使用静态链接库进行链接时,需要使用’-lpthread’

Script Bindings

Python

在人工智能行业中,Python 是开发应用程序的主要语言之一 。 EFML 还提供了python语言开发库。通过驱动安装包安装。

安装完成后,pyefml.py已经作为python模块安装到系统操作系统中,您可以导入该模块。

如果您想快速体验python中的pyefml,请尝试以下命令。

python
>>> import pyefml
>>> pyefml.efmlInit()
0
>>> pyefml.efmlGetDevCount()
1L
>>> pyefml.efmlShutdown()

第一条返回值 ‘0’ 表示 EFML 初始化正常。

第二条返回值 ‘1L’ 表示系统中检测到一张 GCU 卡。

下面的例子展示如何使用EFML python库的example.py脚本获取设备信息。 安装完成后命令行执行 ‘python ./example.py’即可。

# -*- coding: utf-8 -*-
import sys
from ctypes import *
import pyefml

# init and enumerate device
pyefml.efmlInit()

# get device counts
dev_cnt = pyefml.efmlGetDevCount()
print('total device count = {}'.format(dev_cnt))

for idx in range(dev_cnt):
   dev_info = pyefml.efmlGetDevInfo(idx)
   print('device idx: {}'.format(idx))
   print('name = {}'.format(dev_info.name))
   print('vendor_id = {:04x}'.format(dev_info.vendor_id))
   print('device_id = {:04x}'.format(dev_info.device_id))
   print('domain_id = {:04x}'.format(dev_info.domain_id))
   print('bus_id = {:02x}'.format(dev_info.bus_id))
   print('dev_id = {:x}'.format(dev_info.dev_id))
   print("func_id = {:x}".format(dev_info.func_id))

# shutdown
pyefml.efmlShutdown()

与 C++ 的示例一样,pyefml.efmlInit()/pyefml.efmlShutdown() 需在初始化/退出的时候加载。 示例中的代码会打印出系统中所有 GCU 设备的 厂商识别码/设备识别码 Bus/Dev/Func 信息。

Go

Go 是一款开源编程软件,它使得代码实现更加简单,可靠和高效,也因此越来越受欢迎。 我们也提供了支持Go语言的efml 库。

Attention

请参阅 Golang 的官方文档去搭建 Go 开发环境。 简而言之,你需要安装Golang并设置Go 开发环境,包含设置 “$GOPATH” and “$GOROOT”。

下面有一个简单的示例 “main.go” ,示例可以打印出基本的设备信息。

package main

import (
      "efml"
      "fmt"
)

func main() {
      efml.Init()
      cnt, _ := efml.GetDevCount()
      for dev_idx := uint32(0); dev_idx < cnt; dev_idx++ {
               devInfo, _ := efml.GetDevInfo(dev_idx)

               fmt.Println("device idx:", dev_idx)
               fmt.Println("name = ", devInfo.Name)
               fmt.Printf("vendor_id = %4x\n", devInfo.Vendor_id)
               fmt.Printf("device_id = %4x\n", devInfo.Device_id)
               fmt.Printf("domain_id = %4x\n", devInfo.Domain_id)
               fmt.Printf("bus_id    = %2x\n", devInfo.Bus_id)
               fmt.Printf("dev_id    = %2x\n", devInfo.Dev_id)
               fmt.Printf("func_id   = %2x\n", devInfo.Func_id)
      }

      efml.Shutdown()
}

编译上述代码,你需要正确的生成和放置库文件的源代码。 Golang 的源代码放置于名为“src”的文件夹, efml 库文件放在下面的子目录。 在 efml 目录,你可以找到如下文件:

表 9 Go 绑定文件

名称:

说明

efml.h

提供API 支持的C头文件

libefml.so

动态链接库

efml_dl.go

go binding 库文件

efml_bindings.go

go binding 文件

源文件的代码结构应类似于:

dev_info
|—src
|– efml
|– libefml.go
|– efml.h
|– efml_dl.go
|– efml_bindings.go
|– main.go

重定向 “$GOPATH” to “dev_info” 链接, 你可以执行如下命令:

'export GOPATH="/PATH/TO/dev_info'

另,需设置环境变量 “LD_LIBRARY_PATH” 以便于查找 “libefml.so”:

'export LD_LIBRARY_PATH=/PATH/TO/dev_info/src/efml:$LD_LIBRARY_PATH' 'ldconfig'

返回到 “dev_info” 目录,执行 “go build”, 代码将被编译成 “dev_info” 可执行文件。

在目标机器执行生成的 “dev_info” 程序,将会输出目标设备的基本信息。

1

GCU-LARE TM 是为支持加速卡之间互联的燧原智能互联技术。