问题标签 [stride]

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 投票
2 回答
11452 浏览

c++ - 在 C++ 中复制跨步数据

我有两个数组,我想将一个数组复制到另一个数组中。例如,我有

我想复制 to 的每三个元素BA获得

从帖子“ Is there a standard, strided version of memcpy? ”看来,C语言中似乎没有这种可能性。

但是,我经历过,在某些情况下,memcpy它比for循环的副本要快。

我的问题是;有什么方法可以有效地在 C++ 中执行跨步内存复制,至少作为标准for循环执行?

非常感谢。

编辑 - 问题的澄清

为了使问题更清楚,让我们用a和表示手头的两个数组b。我有一个执行唯一跟随for循环的函数

其中两个[]' 都是重载的运算符(我正在使用表达式模板技术),因此它们实际上可以是平均的,例如

0 投票
0 回答
588 浏览

python - 将图像划分为不同大小的居中窗口。Python

我目前正在尝试将图像划分为较小的窗口,这些窗口稍后用于互相关。下面的函数可以很好地达到这个目的(window_size 是窗口大小的长度(以像素为单位)(假设为正方形),重叠是窗口重叠的像素数(因此对于 32x32 窗口,16 个重叠意味着一半重叠)。

它适用于该目的。但是,现在我想比较两个不同大小的窗口(例如一个是 24x24,另一个是 12x12。“挑战”是它们必须居中并且大小窗口的数量必须相同。我可以目前通过裁剪窗口以将较小的窗口与较大的窗口居中来实现这一点(例如,如果我有一个 256x256 的图像,我从每个方向将它裁剪 6px,得到一个 244x244 的图像)。

然而,即使裁剪非常快(我有数千张图像),但如果我想尝试其他大小的窗口,它会变得乏味(如果我希望较小的窗口重叠,有时是不可能的)更改参数。

所以基本上,我的问题是,有没有办法让两个不同大小的窗口居中而不裁剪图像?一些注意事项:

1)如果尺寸增加的是黑色(或0灰度值)图像,则较大的窗口可能会“超出范围”。2)大小窗口的数量必须相同。

0 投票
2 回答
930 浏览

c++ - 以 strides 获取 std::vector 的最大元素

我有std::vector<float>以下数据布局

我正在尝试找出一种 STL 式的方法来获得最大x元素以及yz

显而易见的

选择绝对最大值,不允许我指定步幅。有没有没有for循环的技巧?

0 投票
1 回答
3178 浏览

memory - 如何从全局内存到本地内存进行跨步复制?

我想将一些数据从全局设备内存中的缓冲区复制到处理核心的本地内存中 - 但是,有一个转折。

我知道async_work_group_copy,它很好(或者更确切地说,它很笨拙而且很烦人,但是可以工作)。但是,我的数据不是连续的 - 它是跨步的,即我要复制的每两个连续的 Y 字节之间可能有 X 字节。

显然我不会复制所有无用的数据——它甚至可能不适合我的本地内存。我能做些什么呢?我想避免编写实际的内核代码来进行复制,例如

0 投票
1 回答
868 浏览

python - Numpy stride 技巧抱怨“数组太大”,为什么?

在 numpy (1.8) 中,我想将此计算从 Python 循环中移出到更 numpy-ish 的东西中以获得更好的性能:

base是一个 ~2000x2000 数组,tool是一个 25x25 数组。(背景背景:基地和工具是高度图,我试图找出最接近的工具移动基地的方法。)

我正在尝试使用一个跨步的技巧,从这个开始:

这将base_view[10,20]是从 (10, 20) 左上角的 base 开始的 25x25 值数组。

但是,这因“阵列太大”而失败。从值测试来看,当数组的潜在大小(例如 2000*2000*25*25*8)超过 2^32-ish 并且它触发了将所有维度相乘的溢出检查时,它似乎会报告此问题。(我安装的是 32 位 Python)。

我觉得我错过了一些东西——为什么当步幅值明显有效时它不能让我创建这个“步幅视图”?有没有办法强制这样做?

更一般地说,有没有办法优化我上面的循环?

更新:确切错误:

0 投票
0 回答
297 浏览

c++ - 如何使用 stride 参数正确提交数据

我正在尝试渲染一些带有单个纹理的网格,结果很奇怪,可能是因为 UV 数据的步幅参数不正确。

我省略了 glGenBuffers 和绑定调用。

我以这种方式打包数据:

我设置数据:

我画它:

但结果在纹理级别似乎有点奇怪......

你会建议我如何将我的 UV 数据提交给着色器或如何以更实用的方式重新格式化?

0 投票
1 回答
409 浏览

c - 在代码片段的数组中为 TLB 未命中找到适当的步幅

假设系统有一个 32 条目的 TLB,页面大小为 8KB。为了在几乎每次访问数组“数据”时实现 TLB 未命中,应该将 MAX 和 stride 设置为什么?

这是一个练习期末考试,有答案,但我不明白。最终答案是:stride=2k MAX=33*stride

非常感谢任何能帮助我弄清楚如何在此类问题中找到 TLB 未命中数的完整答案。

0 投票
1 回答
3055 浏览

c# - Unity Compute Shaders 顶点索引错误

我有一个计算着色器和它附带的 C# 脚本,用于修改 y 轴上的顶点数组,简单到足以清晰。

但是尽管它运行良好,但着色器似乎忘记了我形状的第一个顶点(除非该形状是封闭体积?)

这是 C# 类:

我的计算机着色器脚本:

一开始我是从同一个缓冲区读取和写入,但由于遇到问题,我尝试使用单独的缓冲区,但没有成功。我仍然有同样的问题。

也许我误解了应该使用计算着色器的方式(我知道我可以使用顶点着色器,但我只想尝试计算着色器以进一步改进。)

为了完成我所说的,我想它与顶点在 Mesh.vertices 数组中的索引方式有关。

我尝试了很多不同的块/线程配置,但似乎没有解决问题组合尝试:

还有一些我不记得了。我认为最好的配置应该是具有良好平衡的东西,例如:

关于封闭体积:我不确定,因为对于 Cube {8 Vertices},一切似乎都相应地移动,但是对于具有奇数个顶点的形状,第一个(或最后一个尚未检查)似乎不被处理

我尝试了许多不同的形状,但细分平面是最明显的,一个角总是不动。

编辑 :

经过进一步研究,我发现它只是计算着色器不计算网格的最后(不是我检查的第一个)顶点,它似乎与缓冲区类型有关,我仍然不明白为什么 RWStructuredBuffer 应该是一个问题或我使用它有多糟糕,它是保留给流的吗?我无法理解关于这个的 MSDN 文档。

编辑:解决后

C# 脚本:

在您回答之前,我已经回滚到 Blocks VCount,1,1 因为这是我使用 VCount*VCount 的逻辑,因此处理顶点的次数比需要的“平方多”。

要完成,您是绝对正确的,Stride 显然给出了问题,您可以通过有关 stride 参数的文档链接来完成您的答案吗?(从任何地方,因为 Unity 文档是 VOID 并且 MSDN 没有帮助我理解为什么它应该是 12 而不是 32(因为我认为 32 是 float3 的大小)

所以请提供文档

与此同时,我将尝试提供一个足够灵活(通用?)的版本以使其更强大,并开始在我的着色器中添加一些不错的数组处理功能......

0 投票
1 回答
2393 浏览

python - 向 Numpy 数组的索引添加偏移量

跟进这个问题(和 jorgeca 的回答): 将图像切片成重叠补丁并将补丁合并到图像的快速方法我想为补丁化数组的索引添加一个偏移量,即:

假设 X,Y 是奇数,P 的大小将等于 W-X+1,H-Y+1,因此以 P[0,0] 为中心的像素实际上将对应于 A[(Y-1) /2,(X-1)/2]。

有什么办法可以抵消(不复制任何数据) P 的索引以具有完美的对应关系?

作为参考,这里是现有的 patchify 函数:

0 投票
1 回答
124 浏览

performance - 流行的 CPU / CPU 指令集是否支持跨步数据访问?

假设我有两个结构数组(这些结构具有相同的类型、大小、字段偏移量等),并且我想将第一个数组中所有结构的第一个字段复制到第二个结构的第一个字段大批。

现代 Intel、AMD、ARM 和其他 CPU 是否支持此类操作,而不是通过每个相应结构对的一系列加载和存储指令?

如果答案是“是”,那么目标结构具有相同类型、大小和字段的情况(即源数据跨度与目标数据跨度不同,但两者都是已知的)的情况如何?