gpt4 book ai didi

algorithm - 表示通过有向图传播的信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:45 27 4
gpt4 key购买 nike

这将是一个漫长的过程,而且可能比任何特定语言更与计算机科学相关(尽管我需要使用java)。你被警告了。
我试图模拟电信号在平行线上的传播,以模拟基本的计算机硬件。每条路径上都有不同的元素,导致延迟、放大和其他原始信号的转换。
这是我刚拍的一张照片:
谢天谢地,我没有试图表示任何复杂的信号-只有0和1。在这个例子中有4个输入;假设用户选择它们为1011。然后我需要将这些输入通过电线发送到栅极,栅极产生适当的输出并继续传播信号。
问题是时机我给每一根电线和每一个门分配一个延时。例如,如果最左上角的导线具有0.5的时间延迟,则第一个门接收输入需要0.5个时间单位我把每个门都画成多输入,所以可能会发生以下情况(考虑一个和门):input1在1.1个时间单位内到达,并且是高的;输出仍然是零。但之后input2(也是high)有1.3个单位的延迟到达那里,因此0.2个单位之后输出将重新计算为high事实上,每个门本身都有一个延迟,所以假设and门需要0.5个单位来计算;最终的高输出将需要(1.3+0.5)=1.8个单位来调高。
我现在的编程模型是这样的:电线和栅极是可以相互连接并向前发送信号的对象。例如,线输入连接到实际输入,线输出连接到门所以输入信号进来了(与之前的值不同),这个动作应该调用发送信号(wireA,input)此函数用于在WIREA延迟后将WIREA上的值更改为输入值。然后wirea发送_信号(gatea,wirea_value),这会导致gate重新计算其值,然后在gatea_延迟后将其发送到下一个对象,等等。
但我需要并行传播信号-我不能只关注一条串行路径!所以我的想法是为每个输入创建多个线程。最多我想我需要32个输入信号,所以32个线程。我很想将它们按循环顺序安排以实现平等,但我不确定是否可以使用JVM来实现这一点不管怎样,他们都会得到同样的优先权。
现在,第i个输入线程执行我上面描述的操作-它向下传播信号。但是当一条路分出许多条路时会发生什么呢?
需要注意的是,gates可以有多个“扇出”,即从其输出链接到其他地方。该值通常最多为4。因此,在gatea被设置之后,它知道它需要调用send_signal(wireb->e,gatea_value)4次,每个扇形分叉一次。
理想的情况下,我不想分支到不同的线程,这将真的很糟糕,可能是不可能为更大的设计,但嘿,也许整个线程的概念在一开始是不必要的。我不需要以荒谬的速度进行模拟,只需要足够对人类用户做出反应。
回到我可能的实现——一个输入线程沿着串行路径传播,直到BAM——它分支到4个不同的路径我的想法是:现在让同一个线程有4条路径每条路径都有自己的延迟(例如:1.4、2.2、3.6、1.1)。将每个延迟乘以100,循环n次迭代,其中n次对应于最大延迟(在本例中为360)。在对应于其他延迟(i=110、140、220)的循环中的各个检查点处,将这些不同路径向前传播一步(即,将信号发送到路径上的紧接着的下一个对象)但是,我们需要将这个对象添加到循环列表中,并再次计算适当的迭代次数,然后再进一步沿着特定路径传播。
当1到4条路径都有4条分支到另外4条路径(等等)时,我就有点搞砸了;但也许这种方法足以让我开始?
我可能是从一个完全错误的方向来解决这个问题,我愿意退后一步,重新思考这个问题所以我才问你们。
非常感谢你的任何投入,甚至阅读这该死的东西。干杯。

最佳答案

如果所有的延迟都是非负的(安全假设)和确定性的(合理的安全假设),那么每次发生事件时,您都会自动知道它触发了什么事件以及它们何时发生。
为什么不为事件使用优先级队列并在事件发生时处理它们呢当发生某些事情时,计算所有结果事件的次数并将它们添加到队列中;然后从队列中获取下一个事件并对其进行处理。

关于algorithm - 表示通过有向图传播的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667519/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com