我正在使用包含双核 ARM A9 处理器并运行 Linux 的 Zedboard。该板与外部 I/O 设备通信。
我有两个用 C 语言编写的函数,必须并行运行。
一个函数调用 while 循环并连续将数据转储到外部设备,并将处理后的数据接收回内存指针。
另一个函数从指针位置读取数据,创建副本并进行计算密集型处理(如 FFT、信号对齐等,速度较慢)。
外部设备需要每秒 1500 万个样本的数据。如果只运行第一个函数,则能够实现这一要求,且占用一个 ARM 核心的约 70%。当同时运行这两个函数时,两个 ARM 核心都达到极限,发现无法以所需的样本速度向外部设备提供数据。
是否有一种方法可以将这两个函数限制在独立的核心中(第二个函数速度较慢无所谓,但第一个函数的性能不能受到影响),并仍然能够在它们之间共享数据?
我尝试使用 OpenMP,但无法实现所需的性能。我阅读了关于 SCHED_SETAFFINITY 的资料,但在理解其实现方面遇到了问题。
我已经尽可能地使用 NEON 构造/库和 ARM 处理器的自动向量化功能对每个函数进行了优化。
我有两个用 C 语言编写的函数,必须并行运行。
一个函数调用 while 循环并连续将数据转储到外部设备,并将处理后的数据接收回内存指针。
另一个函数从指针位置读取数据,创建副本并进行计算密集型处理(如 FFT、信号对齐等,速度较慢)。
外部设备需要每秒 1500 万个样本的数据。如果只运行第一个函数,则能够实现这一要求,且占用一个 ARM 核心的约 70%。当同时运行这两个函数时,两个 ARM 核心都达到极限,发现无法以所需的样本速度向外部设备提供数据。
是否有一种方法可以将这两个函数限制在独立的核心中(第二个函数速度较慢无所谓,但第一个函数的性能不能受到影响),并仍然能够在它们之间共享数据?
我尝试使用 OpenMP,但无法实现所需的性能。我阅读了关于 SCHED_SETAFFINITY 的资料,但在理解其实现方面遇到了问题。
我已经尽可能地使用 NEON 构造/库和 ARM 处理器的自动向量化功能对每个函数进行了优化。