问题标签 [dlx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
109 浏览

assembly - 在以下情况下如何延迟分支?

我在汇编中有一部分代码。我想知道在以下情况下延迟分支是如何发生的。

0 投票
1 回答
217 浏览

assembly - 在 DLX 处理器中从 Double 转换为 Integer

我在理解 DLX 中如何从 double 转换为 integer 时遇到了一些问题。希望组装极客可以帮助我!

拥有以下数据:

汇编 DLX 代码如下:

我知道这double是 64 位分为 8 个字节。一个r或通用寄存器只能有 4 个字节为一组的 32 位整数/定点数。

在二进制中,28 是11100224 是11100000

我怀疑因为它们都有11100共同点,所以我想当试图将双精度放入R寄存器时,它需要11100000并以某种方式将其放入 32 位寄存器中11100...

真正令人困惑的东西......任何帮助将不胜感激!

0 投票
1 回答
1181 浏览

scheduling - 多级反馈队列调度 - 纸和铅笔示例

我似乎无法在网上找到一个多级反馈队列的好例子来展示会发生什么。鉴于以下问题,我不一定需要回答整个问题,只需要如何进行几次迭代:

  1. 进程A:p nice = 2,运行0.1s,休眠0.6s,运行0.2s
  2. 进程B:p nice = 1,运行0.3s,休眠1.0s,运行0.3s
  3. 进程C:p nice = 3,运行1.0s
  4. 进程D:p nice = 1,运行0.5s

使用所描述的调度算法进行纸笔调度,并记下每次上下文切换时下一个要运行的进程的名称。假设进程在调度运行后立即休眠或退出(即如果进程在 0.1 秒后退出,它将被调度两次),并且进程在上下文切换发生之前唤醒。假设系统的负载为 0.5。将计算的每一步四舍五入到小数点后 2 位。

调度程序分配范围在 0 到 127 之间的进程优先级,其中 0 是最高的。内核进程的优先级可以在 0-49 之间,用户进程可以使用 50-127 的优先级。准备好执行的进程驻留在 32 个运行队列之一中,每个运行队列包含 4 个相邻优先级的进程(prio/4 = 运行队列)。运行队列中的进程没有进一步排序。

在每次上下文切换时,都会选择最高优先级队列头部的进程来执行。在每个时间片 (0.1s) 之后,当前运行的进程被上下文切换。调度程序从其原始队列的头部删除进程,调整其优先级(如果需要 - 见下文),并将其放置在它所属的队列的末尾(因为它的优先级可能刚刚改变)。然后重新扫描运行队列以查找包含可运行进程的最高优先级队列。

创建进程时,它以基本优先级(对于用户进程,我们称之为 PUSER 将其设置为 50)和估计的 cpu 利用率 (estcpu) 为 0.0 开始。进程每执行一个quanta,它的estcpu就加1。一个进程执行4个quanta后,它的优先级按照以下公式重新计算:Prio = PUSER + (estcpu/4) + 2* p_nice(注: Prio 不会小于 PUSER) 其中 p_nice 是在创建进程时指定的值。它的范围可以从 -20 到 19,但对于用户进程,指定负值将被忽略并默认为 0。

编辑:: 这是我对这个问题的回答,有人愿意看一下吗?

或链接:http: //imgur.com/jJVD3AC

0 投票
1 回答
141 浏览

c - ASM - 优化的 `for` 循环

在作业中,我收到了一项将 C 代码更改为简化DLX的 ASM 的任务:

我的解决方案:

假设:

  • 的值a在寄存器 R1 中
  • 的值c在寄存器 R2 中
  • 的值i在寄存器 R3 中
  • A(means )的地址值&A在寄存器 R4 中

然后:

他们的解决方案:

假设:

  • 的值a在寄存器 R1 中
  • 的值i在寄存器 R2 中(注意这里的变化)
  • 的值c在寄存器 R3 中(注意这里的变化)
  • A(means )的地址值&A在寄存器 R4 中

然后:


区别:

他们的解决方案显然更好,因为少了 1 个命令——我的代码有一个额外的条件分支。他们的代码正是我一开始想做的,但后来我想起了for循环算法:

  1. 初始化一个变量
  2. 检查条件是否为True.
    If True:在循环中应用命令,
    否则:退出循环。
  3. 增量变量
  4. 返回#2

所以他们的代码与for循环算法不同,因为它在初始化(#1)之后不检查条件(#2)......
我心想 - 这是优化的结果吗?这是什么级别的优化?(IIRC 有 4 个级别:O0、O1、O2、O3)
在解释 C 代码时是否需要默认优化代码?

0 投票
0 回答
212 浏览

arrays - 如何在 DLX 汇编语言中放置具有多个数字的数组来表示矩阵

我正在制作关于 Haar DWT 的汇编语言,如您所知,haar dwt 需要一个从图像表示的矩阵。我想要一种能够放置 64x64 或 128x128 甚至 256x256 矩阵的汇编语言。我怎么做?

我对这个组件很陌生,更不用说使用 DLX 微处理器了。我有用于计算 DWT 本身的汇编代码。但不知何故,我可以放入 haar_in 数组的最大矩阵仅为 4x4 矩阵/16 个值。我不知道是内存问题,还是我计算的大浮点对程序来说太重了,但我无法完成。我曾尝试更改 haar_out 的空间,即 M 和 N,但也没有用。

这是我的 .data,所以每当我计算一个数字时,我都会将 dp 从 haar_in 加载到 FP 寄存器中,然后计算结果将存储在 haar_out 中。每当我放置超过 4x4 矩阵时,消息将是超时、溢出或非法数字。帮助..

0 投票
1 回答
69 浏览

algorithm - “Exact Cover”维基百科详细示例,关于最后一步的问题

我正在关注使用 Knuth 的“Dancing Links”DLX 算法解决简单“精确封面”问题的 Wikipedia 示例 - 示例在这里:https ://en.wikipedia.org/wiki/Knuth%27s_Algorithm_X#Example

在最后一步,他们显示了简化的矩阵:

他们说这是一个失败的解决方案,但我们到底是怎么知道的呢?是不是只有一行,任何一行?还是最左边的列有 0 而右边的 3 列有 1?或者也许它下降到 1 行并且该行不是完全 1 的?

真的试图理解所有这些东西(最终与 Pentominoes 一起使用,即使我可以从网上下载解决方案,但我想自己编写代码以供娱乐和学习)

0 投票
2 回答
273 浏览

python - 调试 Exact Cover Pentominoes,维基百科示例不完整?或者......我误解了一些东西(包括代码)

问题:

我已经以两种完全不同的方式为 Pentominoes 实现了 Knuth 的 DLX“跳舞链接”算法,但仍然得到不正确的解决方案。简单的 Wikipedia 示例可以正常工作 ( https://en.wikipedia.org/wiki/Knuth%27s_Algorithm_X#Example ),但更复杂的示例会失败。

调试完整的 Pentominoes 游戏需要一个包含近 2,000 个条目的表,因此我想出了一个大大简化的谜题(如下图所示),它仍然足够复杂以显示错误行为。

下面是我简单的 3x5 Pentominoes 示例,仅使用 3 块放置。我可以用笔和纸完成算法,果然我的代码完全按照我的要求做,但在第一步,它破坏了我所有的行!当我查看连通性时,这些列确实看起来不错。很明显我误解了一些东西。

数据模型:

这是我试图让 DLX 解决的简单解决方案: 在此处输入图像描述

下面是“动作”表,它编码了 3 个棋子可以做出的所有有效动作。(我过滤掉一个棋子会产生一个不能被 5 整除的孔大小的动作)

  • 左列是编码移动,例如第一行是块“L”,放置在 0,0,然后逆时针旋转一个 90 度。
  • 竖线 (|) 分隔符
  • 前 3 列是我所指的部分的选择器位。由于“l”是第一个部分(只有 3 个),它在最左边的列中有一个 1。
  • 接下来的 15 列是 3x5 五联板上的每个点 1 位。

示例失败:

第一步会杀死我数组的所有行(忽略数字标题行和列)

按照前面引用的维基百科文章,我这样做:

  • 查找列中设置的最小位数
  • 4 是最小计数,第 2 列是设置该位的最左边的列
  • 我选择与第 2 列相交的第一行,即第 13 行。
  • 第 4 列和第 13 行将被添加到要“覆盖”(又名删除)的列和行中
  • 现在我查看第 13 行并找到所有相交的列:2、5、6、7、11 和 16
  • Now I look at all the rows that intersect with any 1 in any of those columns - THIS seem to be the problematic step - that criteria selects ALL 24 data rows to remove.
  • Since the board is empty, the system thinks it has found a valid solution.

Here's a picture of my pen-and-paper version of the algorithm:

在此处输入图像描述

Given the requests for code, I'm now attaching it. The comments at the top explain where to look.

Here's the code:

https://gist.github.com/ttennebkram/8bd27adece6fb3a5cd1bdb4ab9b51166

Second Test

There's a second 3x5 puzzle I thought of, but it hits the same problem the first example has. For the record, the second 3x5 is:

0 投票
0 回答
38 浏览

vhdl - 运行 ghdl 示例 dlx 实现时出错

我正在使用 GHDL 学习 VHDL。我从这里关注 GHDL 教程:https ://ghdl.github.io/ghdl/quick_start/simulation/DLXModelSuite.html

当我运行这个命令时:

我收到此错误:

有什么问题,我该如何解决?

0 投票
0 回答
19 浏览

error-handling - 在 RabbitMQ 中使用死信

在我的 RabbitMQ 消费者中,我区分了两种错误:

  • “生产者错误”:生产者没有遵守执行合同。示例:缺失的强制性数据、违反业务规则的数据组合、意外的内容类型
  • “消费者错误”:消费者无法处理消息,尽管消息完全有效。示例:消费者代码中的错误、内存耗尽、与数据库的连接失败。

我需要将生产者错误路由回生产者。我需要将消费者错误路由到一个队列,消费者端代理(消费者本身、人类等)将重新处理失败的消息或手动检查它,而生产者不会意识到问题。

Q1:生产者错误和消费者错误之间的区别是否相关?

Q2:在队列的DLX配置中,DLX应该接收哪些消息:生产者错误还是消费者错误?我知道 DLQ 也会收到过期消息和无法路由的消息。

提前感谢您的建议。