3. 使用 CPU 进行预测¶
注意:
- 在 CPU 型号允许的情况下,进行预测库下载或编译试尽量使用带 AVX 和 MKL 的版本 
- 可以尝试使用 Intel 的 MKLDNN 进行 CPU 预测加速,默认 CPU 不启用 MKLDNN 
- 在 CPU 可用核心数足够时,可以通过设置 - SetCpuMathLibraryNumThreads将线程数调高一些,默认线程数为 1
3.1. CPU 设置¶
API定义如下:
// 设置 CPU 加速库计算线程数
// 参数:mathThreadsNum - CPU 加速库计算线程数
// 返回:None
func (config *Config) SetCpuMathLibraryNumThreads(mathThreadsNum int32)
// 获取 CPU 加速库计算线程数
// 参数:无
// 返回:int - CPU 加速库计算线程数
func (config *Config) CpuMathLibraryNumThreads() int32
代码示例:
package main
// 引入 Paddle Golang Package
import pd "github.com/paddlepaddle/paddle/paddle/fluid/inference/goapi"
import fmt
func main() {
    // 创建 Config 对象
    config := paddle.NewConfig()
    // 设置预测模型路径
    config.SetCpuMathLibraryNumThreads(10)
    // 输出模型路径
    fmt.Println("CPU Math Lib Thread Num is: ", config.CpuMathLibraryNumThreads())
}
3.2. MKLDNN 设置¶
注意:
- 启用 MKLDNN 的前提为已经使用 CPU 进行预测,否则启用 MKLDNN 无法生效 
- 启用 MKLDNN BF16 要求 CPU 型号可以支持 AVX512,否则无法启用 MKLDNN BF16 
API定义如下:
// 启用 MKLDNN 进行预测加速
// 参数:无
// 返回:None
func (config *Config) EnableMkldnn()
// 判断是否启用 MKLDNN
// 参数:无
// 返回:bool - 是否启用 MKLDNN
func (config *Config) MkldnnEnabled() bool
// 启用 MKLDNN BFLOAT16
// 参数:无
// 返回:None
func (config *Config) EnableMkldnnBfloat16()
// 判断是否启用 MKLDNN BFLOAT16
// 参数:无
// 返回:bool - 是否启用 MKLDNN BFLOAT16
func (config *Config) MkldnnBfloat16Enabled() bool
代码示例:
package main
// 引入 Paddle Golang Package
import pd "github.com/paddlepaddle/paddle/paddle/fluid/inference/goapi"
import fmt
func main() {
    // 创建 Config 对象
    config := pd.NewConfig()
    // 启用 MKLDNN 进行预测
    config.EnableMkldnn()
    // 通过 API 获取 MKLDNN 启用结果 - true
    fmt.Println("Enable MKLDNN is: ", config.MkldnnEnabled())
    // 启用 MKLDNN BFLOAT16 进行预测
    config.EnableMkldnnBfloat16()
    // 通过 API 获取 MKLDNN BFLOAT16 启用结果
    // 如果当前CPU支持AVX512,则返回 true, 否则返回 false
    fmt.Println("Enable MKLDNN BF16 is: ", config.MkldnnBfloat16Enabled())
}