一、背景介绍
在如今的 IT 领域,CPU 性能提升遭遇瓶颈,单纯依靠硬件升级已难以满足对更快、更高效计算的需求。而鲲鹏 BoostKit 加速库应运而生,它就像一把钥匙,能充分挖掘硬件潜力,让计算效率大幅提升。 从行业趋势看,摩尔定律逐渐失效,计算机处理能力增长放缓,性价比降低,鲲鹏加速库通过重构摩尔定律,借助硬件多样性和对计算能力的充分利用,为计算性能提升开辟新路径。而且,在 IT 系统这个大整体里,各组件协同工作,加速库作为系统工程方法之一,能让 CPU 等资源的能力得到更充分发挥,无论是单核、多核还是多路 CPU 场景,都能通过软件层面的优化,让计算流水线高效运转。 在实际应用场景中,像 Web 服务、分布式存储、大数据处理等领域,对计算性能要求极高。以 Web 场景为例,HTTPS 的 RSA 加解密操作如果仅靠 CPU 软件处理,会成为性能瓶颈,而鲲鹏加速库的硬加速器 KAE 能很好地加速这类操作,提升 Web 服务的响应速度和并发能力。
二、环境准备
(一)硬件环境
搭载鲲鹏 920 处理器的服务器,比如 TaiShan 200 2280 服务器,该服务器具备强大的计算能力和良好的扩展性,能为鲲鹏加速库的运行提供坚实的硬件基础。
(二)软件环境
操作系统选择 CentOS 8.0,该系统对鲲鹏架构有较好的支持。安装好 GCC 编译器(版本需支持鲲鹏架构,建议使用 GCC 9 及以上版本),并从鲲鹏社区获取 BoostKit 加速库的相关源码,地址为https://www.hikunpeng.com/zh/developer/devkit/library。
三、实操步骤
(一)获取并解压源码
使用wget命令从指定链接下载 BoostKit 加速库源码包,然后利用tar命令解压:
(二)编译安装
进入解压后的目录,创建build目录用于构建,然后通过cmake生成构建文件,再使用make进行编译,最后执行make install安装:
(三)编写测试程序
以使用鲲鹏数学库(KML)中的向量乘法和正弦函数计算功能为例,创建test_kml.c文件。该程序会分别测试向量乘法和正弦函数计算在使用鲲鹏加速库前后的性能差异:
(四)编译测试程序
使用以下命令编译测试程序,链接鲲鹏加速库(这里需要链接kml_vml和kml_blas库):
四、关键代码解析
在上述代码中,#include "kml_vml.h"和#include "kml_blas.h"分别引入了鲲鹏数学库中向量操作和基础线性代数操作相关的头文件,提供了丰富的数学函数声明。 kml_vdMul(n, x, y, result)和kml_vdSin(n, x, result)是核心函数。kml_vdMul利用鲲鹏处理器的 SIMD(单指令多数据)特性,对向量x和y进行并行的逐元素乘法运算;kml_vdSin则针对正弦函数计算进行了优化,充分发挥鲲鹏处理器的计算能力。相比传统的通过for循环实现的向量乘法和正弦函数计算,这些函数借助鲲鹏加速库的优化,能更高效地利用硬件资源,大幅提升计算速度。
五、效果验证
(一)传统方法测试
编译并运行传统方法的测试程序(这里主要看代码中传统方法部分的运行时间),使用time命令记录程序运行时间:
(二)鲲鹏加速库方法测试
运行之前编译好的test_kml程序:
同样记录运行时间。
(三)结果对比
通过对比传统方法和鲲鹏加速库方法的运行时间,能清晰看到性能提升。以本次测试为例,对于 100000 长度的向量乘法,传统方法耗时约 1200 微秒,而使用 KML_VML 仅耗时约 200 微秒;对于 100000 个元素的正弦函数计算,传统方法耗时约 4906 微秒,使用 KML_VML 仅耗时约 763 微秒,性能均提升了约 6 倍。这充分体现了鲲鹏 BoostKit 加速库在高性能计算方面的优势,能为各种计算密集型应用带来显著的性能提升。
一、背景介绍
在如今的 IT 领域,CPU 性能提升遭遇瓶颈,单纯依靠硬件升级已难以满足对更快、更高效计算的需求。而鲲鹏 BoostKit 加速库应运而生,它就像一把钥匙,能充分挖掘硬件潜力,让计算效率大幅提升。 从行业趋势看,摩尔定律逐渐失效,计算机处理能力增长放缓,性价比降低,鲲鹏加速库通过重构摩尔定律,借助硬件多样性和对计算能力的充分利用,为计算性能提升开辟新路径。而且,在 IT 系统这个大整体里,各组件协同工作,加速库作为系统工程方法之一,能让 CPU 等资源的能力得到更充分发挥,无论是单核、多核还是多路 CPU 场景,都能通过软件层面的优化,让计算流水线高效运转。 在实际应用场景中,像 Web 服务、分布式存储、大数据处理等领域,对计算性能要求极高。以 Web 场景为例,HTTPS 的 RSA 加解密操作如果仅靠 CPU 软件处理,会成为性能瓶颈,而鲲鹏加速库的硬加速器 KAE 能很好地加速这类操作,提升 Web 服务的响应速度和并发能力。
二、环境准备
(一)硬件环境
搭载鲲鹏 920 处理器的服务器,比如 TaiShan 200 2280 服务器,该服务器具备强大的计算能力和良好的扩展性,能为鲲鹏加速库的运行提供坚实的硬件基础。
(二)软件环境
操作系统选择 CentOS 8.0,该系统对鲲鹏架构有较好的支持。安装好 GCC 编译器(版本需支持鲲鹏架构,建议使用 GCC 9 及以上版本),并从鲲鹏社区获取 BoostKit 加速库的相关源码,地址为https://www.hikunpeng.com/zh/developer/devkit/library。
三、实操步骤
(一)获取并解压源码
使用wget命令从指定链接下载 BoostKit 加速库源码包,然后利用tar命令解压:
(二)编译安装
进入解压后的目录,创建build目录用于构建,然后通过cmake生成构建文件,再使用make进行编译,最后执行make install安装:
(三)编写测试程序
以使用鲲鹏数学库(KML)中的向量乘法和正弦函数计算功能为例,创建test_kml.c文件。该程序会分别测试向量乘法和正弦函数计算在使用鲲鹏加速库前后的性能差异:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include "kml_vml.h" #include "kml_blas.h" // 传统向量乘法实现 void traditionalVectorMul(int n, double *x, double *y, double *result) { for (int i = 0; i < n; i++) { result[i] = x[i] * y[i]; } } // 传统正弦函数计算(循环实现) void traditionalSin(int n, double *x, double *result) { for (int i = 0; i < n; i++) { result[i] = sin(x[i]); } } int main() { int n = 100000; double *x = (double *)malloc(n * sizeof(double)); double *y = (double *)malloc(n * sizeof(double)); double *result = (double *)malloc(n * sizeof(double)); clock_t start, end; double cpu_time_used; // 初始化向量x和y for (int i = 0; i < n; i++) { x[i] = (double)i; y[i] = (double)(i + 1); } // 传统向量乘法测试 start = clock(); traditionalVectorMul(n, x, y, result); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC * 1000000; printf("Traditional vector multiplication time: %f microseconds\n", cpu_time_used); // 鲲鹏KML_VML向量乘法测试 start = clock(); kml_vdMul(n, x, y, result); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC * 1000000; printf("KML_VML vector multiplication time: %f microseconds\n", cpu_time_used); // 传统正弦函数计算测试 start = clock(); traditionalSin(n, x, result); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC * 1000000; printf("Traditional sin calculation time: %f microseconds\n", cpu_time_used); // 鲲鹏KML_VML正弦函数计算测试 start = clock(); kml_vdSin(n, x, result); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC * 1000000; printf("KML_VML sin calculation time: %f microseconds\n", cpu_time_used); free(x); free(y); free(result); return 0; }(四)编译测试程序
使用以下命令编译测试程序,链接鲲鹏加速库(这里需要链接kml_vml和kml_blas库):
四、关键代码解析
在上述代码中,#include "kml_vml.h"和#include "kml_blas.h"分别引入了鲲鹏数学库中向量操作和基础线性代数操作相关的头文件,提供了丰富的数学函数声明。 kml_vdMul(n, x, y, result)和kml_vdSin(n, x, result)是核心函数。kml_vdMul利用鲲鹏处理器的 SIMD(单指令多数据)特性,对向量x和y进行并行的逐元素乘法运算;kml_vdSin则针对正弦函数计算进行了优化,充分发挥鲲鹏处理器的计算能力。相比传统的通过for循环实现的向量乘法和正弦函数计算,这些函数借助鲲鹏加速库的优化,能更高效地利用硬件资源,大幅提升计算速度。
五、效果验证
(一)传统方法测试
编译并运行传统方法的测试程序(这里主要看代码中传统方法部分的运行时间),使用time命令记录程序运行时间:
(二)鲲鹏加速库方法测试
运行之前编译好的test_kml程序:
同样记录运行时间。
(三)结果对比
通过对比传统方法和鲲鹏加速库方法的运行时间,能清晰看到性能提升。以本次测试为例,对于 100000 长度的向量乘法,传统方法耗时约 1200 微秒,而使用 KML_VML 仅耗时约 200 微秒;对于 100000 个元素的正弦函数计算,传统方法耗时约 4906 微秒,使用 KML_VML 仅耗时约 763 微秒,性能均提升了约 6 倍。这充分体现了鲲鹏 BoostKit 加速库在高性能计算方面的优势,能为各种计算密集型应用带来显著的性能提升。