- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发 Zedboard,它包含双核 ARM A9 处理器并运行 Linux。该板与外部 I/O 设备通信。
我有两个用“C”语言编写的函数,我必须并行运行它们。
一个函数调用 while 循环并不断将数据转储到外部设备,并将处理后的数据接收回内存指针。
另一个函数从指针位置读取数据,创建它的副本并执行计算密集型过程(例如 FFT、信号对齐等,速度很慢)。
外部设备需要每秒 1500 万个样本的数据。如果我只运行第一个函数并且它占用一个 ARM 内核的大约 70%,我就能实现。当我运行这两个函数时,两个 ARM 内核都达到了极限,我发现我无法以所需的采样速度向外部设备提供数据。
有没有一种方法可以限制独立内核中的两个功能(第二个功能很慢并不重要,但第一个功能的性能不能受到影响)并且仍然能够共享数据他们之间?
我尝试使用 OpenMP,但无法达到所需的性能。我阅读了有关 SCHED_SETAFFINITY 的内容,但在理解其实现时遇到了问题。
我已经使用 NEON 构造/库和 ARM 处理器的自动矢量化功能尽可能地优化了我的每个函数。
最佳答案
您可以将每个单独的线程设置为不同的核心:
int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t *mask);
来自手册页:
Description
A process's CPU affinity mask determines the set of CPUs on which it is eligible to run. On a multiprocessor system, setting the CPU affinity mask can be used to obtain performance benefits. For example, by dedicating one CPU to a particular process (i.e., setting the affinity mask of that process to specify a single CPU, and setting the affinity mask of all other processes to exclude that CPU), it is possible to ensure maximum execution speed for that process. Restricting a process to run on a single CPU also avoids the performance cost caused by the cache invalidation that occurs when a process ceases to execute on one CPU and then recommences execution on a different CPU.
但是如果您的代码在输入和输出线程之间存在硬数据关系,那么多线程可能会比使用单核更慢!这几乎与内存/缓存无关,尤其是在核心/内存/缓存和外部总线系统之间的所有桥接器上。您应该尝试使用优先级、亲和性以及其他参数。
顺便说一句:“每秒 1500 万个样本”和 FFT 与 IO 在 1 GHZ Arm 上与 Linux 并行。哇!热的东西 ;)
关于c - 双核 ARMv7 处理器中的并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50774136/
我的应用程序有问题。我收到 7 个 Apple Mach-O 链接器错误。以下是错误: Undefined symbols for architecture armv7: "_OBJC_IVAR_
我是一名优秀的程序员,十分优秀!