跨架构编程对 IoT 意味着什么?





5.00/5 (1投票)
本文探讨了英特尔如何提供标准化规范来简化这一环境。
由于其能源效率和卓越的性能,异构系统已成为大多数高性能计算配置的核心架构。这些系统使用多种处理器,包括中央处理器(CPU)、图形处理器(GPU)和现场可编程门阵列(FPGA)。因此,我们作为开发人员必须驾驭日益复杂的环境。
无论是部署大型边缘系统还是小型物联网(IoT)设备,交付完整的解决方案现在都需要一个完整的工具生态系统。因此,在不牺牲软件可移植性或与众多硬件供应商协作的灵活性的情况下,简化编程环境比以往任何时候都更加重要。
通过使用英特尔 oneAPI 及其配套的 oneAPI IoT Toolkit 进行跨架构编程和开发,标准化拓宽了可能性,而不是限制了可能性。此外,oneAPI IoT Toolkit 将大数据能力带入了物联网。因此,无论我们的应用程序是与医疗保健、航空航天、安全还是智能家居相关,它都提供了在各种硬件架构上设计、开发和部署应用程序所需的工具。
本文探讨了英特尔如何提供标准化规范来简化这一环境。
跨架构物联网
为了开发更节能的系统并提高性能,我们现在为 CPU、GPU 和 FPGA 开发物联网应用程序。每种新架构都带来了额外的框架和工具,需要大量时间来学习。我们设计了专门的编程语言和日益复杂的工具来构建、分析和优化我们的应用程序。
因此,对标准化开发的需求是明确的,但并非新鲜事。它的必要性促生了 OpenCL 的创建,OpenCL 是一个用于为异构平台开发应用程序的开放标准。虽然新颖且非常有用,但 OpenCL 仅提供了低级别的抽象,并且缺乏我们当时构建所需的重大功能。
之后,开发界在 OpenACC 和 OpenMP 中看到了两个潜在的 OpenCL 后继者,但每一个都显著降低了性能,严重限制了它们的使用。更晚的时候,Khronos Group 推出了 SYCL,作为一个构建在 OpenCL 之上的跨平台抽象层。
然后,英特尔开发了 oneAPI,这是一个统一的编程模型,用于辅助各种硬件架构的开发。oneAPI 模型提供了一个运行时工具包、一组库以及 SYCL 编程语言。它致力于加速物联网应用程序开发中各种处理器架构的高性能计算。
oneAPI 还可以与其他基于 OpenCL 原理的库进行互操作。例如,ArrayFire 库是一个为高性能并行计算开发的 GPU 库,主要用于向量算法和图像处理。它使用与 oneAPI 相同的原理,并且可以与 oneDNN 互操作。
构建物联网
SYCL 支持为物联网的 CPU、GPU 和 FPGA 架构开发高性能应用程序。它由社区驱动,并建立在国际标准化组织(ISO)CPP、ISO C++ 和 SYCL 等标准之上。DPC++ 关联的提高的抽象级别使得在不同系统之间可以实现更多的代码重用。SYCL 减轻了在不断发展的、计算密集型的边缘用例(包括网络功能、内容交付以及语音、视频和图像的机器学习等)中采用新加速选项的负担。
物联网库
英特尔还通过预优化的库扩展了工具生态系统,以加速计算密集型工作负载的开发。数学、机器学习、深度学习和视频处理等应用程序可以从这些库中获得显著的好处。
其中一个库是 oneAPI DPC++ Library (oneDPL),它针对数据并行和卸载进行了预优化。此外,还有 oneAPI Video Processing Library (oneVPL),它针对 CPU 和 GPU 进行了预优化以提高性能。oneAPI Deep Neural Network (oneDNN) 库结合了 C++ 标准和并行标准模板库 (STL) 算法,能够创建高性能深度学习框架。
异构系统性能分析
oneAPI 附带了一套改进的分析工具,包括 Intel VTune profiler 和 Advisor。VTune Profiler 使我们能够探索 SYCL 应用程序性能,并查看哪些代码行消耗的资源最多。我们还可以使用 VTune 优化任何受支持硬件加速器的性能。此外,它还支持 SYCL、C、C++、Fortran、Python、Java 和 Go 等流行语言。它还提供各种性能分析类型,例如性能快照分析,它提供了应用程序性能的概述以及可能需要进一步研究的领域。
性能快照分析类型是合适的起点。之后,我们可以通过使用算法分析组类型深入了解应用程序。算法分析组类型使我们能够了解应用程序大部分时间花在哪里。它包括热点分析类型,用于调查调用路径和应用程序流程。另一种类型是**异常检测**类型。我们可以分析纳秒和微秒级别的精度,以发现可能导致用户体验不佳的零星性能异常。此外,算法分析组类型包含内存消耗分析,这是了解应用程序内存随时间使用的最佳方法。
最后,Intel Advisor 是一套工具,旨在通过提供诸如 Threading Advisor 之类的工具来确保程序充分利用硬件潜力。Threading Advisor 有助于检查线程设计选项。
另一个有用的工具是 Offload Advisor,它有助于识别卸载到 GPU 的机会以及卸载可能有用之处。Offload Advisor 结合 Roofline 分析可以帮助可视化 CPU 或 GPU 的性能,提供系统瓶颈的洞察,并突出我们可以优化的地方。
Intel Advisor 还提供向量化和代码洞察工具,帮助我们发现任何未优化的循环。借助 Intel Advisor,我们可以在平台上实现最佳性能。
优化边缘计算性能
边缘计算是一种在数据源附近执行计算的模型。其优点之一是处理延迟低。边缘计算使物联网设备能够过滤和处理数据,而无需来回传输,这对于实时应用程序非常有用。
边缘计算的另一个优势是带宽节省,它通过在发送之前进行数据压缩来减小传输数据的规模。最后,精心设计的边缘计算可以增强系统安全性和隐私。然而,要体验这些优势的全部潜力,我们必须首先为我们的基于边缘的物联网设备优化代码性能。这可能具有挑战性,因为各种设备具有不同的硬件配置、计算选项和资源限制。能够跨各种计算解决方案扩展并支持不断变化的加速选项的工具套件可以简化复杂性,并限制在需求变化时需要重构代码所花费的时间。
从 CUDA 迁移代码
迁移到新的编程模型通常需要重写代码。幸运的是,oneAPI 借助 Intel DPC++ Compatibility Tool (DPCT) 帮助我们从 CUDA 迁移到 SYCL,尽可能生成人类可读的代码。该工具可自动将大约 80% 到 90%[i] 的 CUDA 代码迁移到 SYCL,并提供有关如何手动转换剩余代码的提示。您可以通过阅读使用 oneAPI 将 CUDA 转换为 SYCL 来了解有关将 CUDA 转换为 SYCL 的更多信息。
因此,将我们的代码迁移到 SYCL 的步骤相对简单。我们只需要通过拦截构建系统创建一个编译数据库文件。之后,我们可以使用 DPCT 迁移到 SYCL,并检查是否需要手动迁移任何剩余代码。最后一步是使用 DPC++ 编译器编译我们的 oneAPI DPC++ 代码。
一个案例研究
三星麦迪森(Samsung Medison),一家专门从事超声医疗系统的公司,是 oneAPI 如何帮助提高性能的一个绝佳例子。三星与英特尔合作,加速其超声系统的图像处理,从而实现更高效、更准确的诊断。他们使用了英特尔的 OpenVino™ 工具包和 OpenCV 库,以及三星麦迪森的 BiometryAssist,来自动化和简化胎儿测量。接下来,三星使用英特尔兼容性工具将其现有代码移植到 SYCL,使他们能够使用一个代码库来测试不同的加速器解决方案。三星使用 Intel VTune Profiler 测试了他们的迁移,以分析代码的性能并简化他们的实现,使其高效运行。三星麦迪森的物联网解决方案通过 Intel oneAPI Base Toolkit 得到了进一步优化。
结论
跨架构编程的演进使标准化开发环境的需求更加明显。幸运的是,oneAPI 将性能和抽象结合起来,以支持多种架构并推动开发朝着这一标准化方向发展。
英特尔的 oneAPI 提供了面向物联网、边缘计算和跨架构支持的工具,这些工具不会将我们限制在一家制造商或供应商。其 DPC++ Compatibility Tool (DPCT) 和 VTune Profiler 可以帮助我们优化性能并发现额外的优化机会。
虽然其在医疗机构和个人智能技术方面的实际应用已经有所贡献,但 oneAPI 的潜力远未完全实现。您的下一个伟大的跨架构项目还有很大的空间,但开始的最佳方式是尝试oneAPI 并体验它所带来的一切。
英特尔截至 2021 年 9 月的估计。基于在 70 个 HPC 基准和样本上的测量,包括 Rodinia、SHOC 和 PENNANT 等示例。结果可能有所不同。