|
|
1
1
这是不可能的 准确的 即使你是直接用机器代码写的。即使所有线程都在内核屏障上等待,但在不同的内核上等待的时间可能不同,屏障等待和camera get之间需要处理的操作码必须在缓存可能处于不同状态的系统上获取并运行,没有什么能阻止操作系统从一个线程中窃取CPU来运行一些完全不相关的代码,而且摄像头的I/O(即使它没有序列化,也可能是序列化的)可能不是保证的静态时间,等等。 当你把一种解释过的语言放在它上面(特别是带有gil的语言,比如python,这意味着barrier wait和camera get之间的字节码不能并行运行)好吧,你并没有真正改变任何东西;“不可能的*7”仍然是“不可能的”。但你让它变得更加明显。 幸运的是,很少现实生活中的问题有这样的实时性要求。相反,你有一个要求,比如“99.9%的时间,所有的相机都应该发生在期望的精确每秒30帧的正负4毫秒之内”。或者,也许,“90%的时间在+/-1毫秒内,99.9%的时间在+/-4毫秒内,99.999%的时间在+/-20毫秒内,只要你不做任何愚蠢的事情,比如在运行代码时改变笔记本电脑的电源状态”。 或者,只有你知道为什么你想要“精确的”,并且能够弄清楚哪些实际需求能够满足你。 在这种情况下,通常最简单的事情就是以显而易见的方式编写代码,对代码进行压力测试,看看它是否满足您的需求,并找出只有在不满足需求的情况下如何优化它。 所以,你现有的代码很好。
如果不是,则添加共享
您可能需要添加逻辑来检测计时器延迟和重新同步(这可以在每个线程中单独执行,也可以让哪个线程先到达那里计算它,然后让其他所有线程都在屏障处等待)。 你可能需要用C重写核心循环,或者转储你正在使用的任何一个操作系统,比如QNX。或者完全扔掉操作系统,这样就没有调度程序来阻止。或者扔掉复杂的超标量CPU,把它作为一个硬件状态机来实现。或者 但是,假设你一开始就有合理的要求,你通常不必走得太远。 |
|
|
Rishab · 在并行Java中运行函数 1 年前 |
|
|
Deep · 当您并行化代码时,如何保存两个独立的CSV? 2 年前 |
|
|
Setu · MPI代码的哪些部分是复制的,哪些是共享的? 2 年前 |
|
|
heyula · 如何在mpi中定义本地数组? 2 年前 |
|
|
Rebel · 如何以最有效的方式加速和并行化以下matlab代码? 2 年前 |