问题标签 [interleave]

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 回答
58 浏览

avx - 使用 AVX2 高效加载打包的 16 位数据

我正在对 A/D 以 16 位值 A1B1A2B2 的顺序 12 位样本形式返回的数据进行插值...兼容的)。我的插值器采用 4 个连续值作为输入,它们作为 uint16 加载,然后作为浮点处理:

为了矢量化,我一次运行 4 对 AB 样本(如果插值接近,它们可能会重叠),旨在填充 256 位 AVX 寄存器,对应于 0、1、2 和 3 插值的 8 个唯一样本像这样的系数:

记忆

虽然处理和保存很简单,但我想不出一种有效的方法来解压缩 16 位样本,然后将它们混洗到向量中。我最终不得不将它们加载到包含相同输出样本的 4 对 A/B 系数的向量中,然后执行多个 shuffle/permute 循环以转换为最终形状:

这最终的速度大约是 c 版本的 3 倍,但是查看程序集,上面编译的内容比实际处理和写出数据的代码组合的时间要长。是否有更有效的策略可用于将数据加载和改组到向量中?

0 投票
0 回答
44 浏览

string - 不检查第 k 个值的交错字符串记忆解决方案返回不正确的结果

尝试实现一个函数以返回一个字符串是否是 s1、s2 的有效交错版本。遵循我的递归和记忆解决方案。

问题 - 记忆的解决方案没有探索所有可能的组合。第 k 个解决方案来自关于该问题的讨论帖子之一 - https://leetcode.com/problems/interleaving-string/

我正在尝试对第 k 个值检查的工作原理建立一个直观的理解。我的基本理解是,在探索多个分支时,第 i 个和第 j 个值出现一次,并且在没有真正探索其他组合的情况下被保存并重新检查。

真正尝试以更直观的方式理解解决方案。希望有更好的解释和/或它为什么起作用的数学原因。

递归解决方案:

备忘:

记忆并检查 s3 的第 k 个值:

0 投票
1 回答
49 浏览

image-processing - 将 .tiff 文件的像素顺序从 rgbrgb 更改为 rrbbgg(交错到非交错)

我一直在尝试找出一种创建非交错 .tiff 文件的方法,如下所述:https ://questionsomething.wordpress.com/2012/07/26/databending-using-audacity-effects/ (在标题下“摄影基地”)。

使用 photoshop 似乎是一件微不足道的事情,但我在 linux 上,并且不想只为这个选项给自己一份副本。如果有人知道一种方法,无论是通过 imagemagick、破解 gimp 还是一些晦涩的程序,我都会很高兴提出任何建议。

0 投票
0 回答
73 浏览

python - Tensorflow tf.data.Dataset interleave() 返回意外结果

我从这个链接中关注了另一个关于tf.data.Dataset.interleave()方法的例子。

我试图理解这个例子,所以我从range(3), range(4), ... 等开始。
例如,

直到range(9),它返回我期望的数据集。
但是从range(10),它没有返回我期望的数据集。

这里发生了什么?这不应该[0, ..., 0, 1, ..., 1, 2, ..., 2, ..., 8]吗?

0 投票
1 回答
82 浏览

java - 原子值可以在“&&”操作期间改变吗?

我知道下一个场景:(奇怪的格式,我知道)

如果线程#1 和线程#2doSomething()恰好同时进入,这将发生:

  1. 线程 #1 和线程 #2 将aBoolean.get()同时读取为 == "true"。

  2. 两者都将执行“&&”运算符。

  3. CMPXCHG 指令同时为两个线程启动:

    3.1 本地使用LOCK前缀

    3.2 线程#1 或#2 先到达,赢得比赛。

    3.3 获胜线程比较(aBoolean == true 吗?)这将返回“true”,因此 aBoolean 将设置为“false”。

    3.4 aBoolean 现在是假的。

    3.5 丢失线程比较(是 aBoolean == true 吗?)这将返回“false”,因此会短路任何进一步的操作。

  4. 获胜线程将打印“是真的!”。

在“失败”线程的角度下,“ aBoolean.get()A 线”中的第一个是......假设......一个“谎言”。

现在假设执行可以发生在操作符之间,就像上面例子中所做的那样,让我们​​为第二种情况添加第二种方法:

假设线程#3恰好unluckySet()在我们的“获胜线程”到达“&&”正在执行的“B行”的确切时刻到达并执行。

如果获胜线程到达“B 行”,则意味着它到达“A 行”,aBoolean 为“真”。

我的问题是:

CMPXCHG 是否会将更新后的值正确读取为“假”?这意味着.set()也由与 . 相同的锁持有compareAndSet()

在并发和线程之间:

运算符(“&&”、“||”、“==”、“=”,甚至可能是“return;”?以交错方式结束,防止可能的冲突?