问题标签 [reduction]

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 投票
1 回答
865 浏览

python - 将 CUDA 与 Python 的 ODEInt 和并行归约相结合

我是一名生物物理学研究生,正在尝试使用 PyCUDA 和 Scipy 编写蛋白质聚合模型ODEInt。在过去的两周内,我已经让代码运行起来了,但是速度很慢。让我看看我是否可以解释我的代码的作用。

我有np一系列N浓度,每个元素都是i+1长度聚合物的浓度。我有一个函数可以计算聚合物浓度的变化率,CUDA其中每个内核计算一种特定长度聚合物的变化率。在此计算过程中,(N-i-1)线程需要对长度数组求和,从而大大降低了我的代码速度。

做一些阅读和谷歌搜索,我遇到了并行减少作为一种调用并行性的方式,以使像数组总和这样的串行计算变得更快。当然,我指的是 Mark Harris 的 powerpoint 幻灯片。这是一本很好的读物,这看起来是一种大幅加快我的代码速度的潜在方法,但我有几个问题:

如果聚合物种类的数量 N 需要为 ~ 8700-9000,是否可以使用 CUDA 同时减少这 N 个阵列?进行快速计算(再次感谢 SO 对如何计算最大并发线程数的出色解释),我得到了我的 GTX Titan 可以同时运行 15 * 64 * 32 = 30720 个线程。如果我一次在 ~8960 个内核上调用我的内核,我应该只剩下 21760 个线程可以使用,对吗?由于您似乎至少需要(数组的长度/ 2)线程才能正确减少它,所以我注定要失败。

我在想,也许我可以通过将剩余的线程分开并一次减少几个大数组来使用剩余的线程。

我不知道……我只是一名物理研究生。在我踏上错误方向的漫长旅程之前,我想我会问专业人士。是否可以轻松有效地告诉内核减少某些东西?

谢谢你,卡斯滕

这是我正在尝试做的事情的代表。

您会注意到,我们一直在讨论的数组的总和基本上是每个线程的同一数组的较小版本。这让我想知道这是否是我应该在主机上做的事情。

0 投票
1 回答
69 浏览

bison - 野牛的减少没有按预期工作

我正在尝试编写一个 EPL 解析器,所以我正在学习 flex 和 bison。我尝试使用以下规则(SQL):

和野牛规则是:

所有标记和非终结符都有类型“char*”

因为标准输入的输入是“从 $ddd 中选择 $abc”,所以当词法分析器返回令牌 FROM 时发生了还原,在“identifier_expr”操作中,输出是“ident_expr:abc from”,为什么会这样?

0 投票
1 回答
5308 浏览

c - 为什么需要 OpenMP 缩减子句来进行并发缩减?

OpenMP 'parallel' 构造和 'SIMD' 构造(4.0 版中新增)定义了归约子句,它告诉编译器对哪个变量执行归约以及归约运算符是什么。但是为什么编译器需要程序员告诉它这些信息呢?例如,GCC 具有识别缩减的能力,而无需程序员的任何帮助(请参阅此处此处)。有没有指定减少子句就不能并发的循环示例?

0 投票
3 回答
117 浏览

c - 想通过遍历结构来减少函数

大家早上好,

我试图减少一个非常重复的函数,但是每个“重复”都有两个结构,结构 A.element1 设置结构 B.element1。目前我有 myFunction() 和大约十二个不同的 reqFunction() 调用来将 B 设置为 A。基本上我现在拥有的是:

reqGetFunction() 无法更改。我有一个用于循环 GLOBAL_IN 的其他函数的静态全局数组,我可以将 structA A 设为静态全局。

我想要像 myFunctionSingle() 这样的东西来做一个块,而 myFunctionAll() 将有一个 for 循环来循环遍历 GLOBAL_IN 数组以及结构的 A 和 B 的元素并将它们输入到 myFunctionSingle()。

所以我想我真正的问题是如何像使用数组一样循环遍历结构的元素,因为那里的所有内容(如结构的设置和 reqGetFunction)都是一成不变的。我已经尝试了一些东西并四处搜索,但目前被难住了。老实说,我不确定这是否可能,甚至是否值得。预先感谢您的意见!

0 投票
1 回答
86 浏览

c - Openmp减少循环错误?

这是测试代码的一部分:

由于某些原因,我的结果总是:

为什么 a、b、c、d 不都等于 100?

0 投票
1 回答
2242 浏览

arrays - CUDA 阵列缩减

我知道已经回答了多个与此类似的问题,但除了我可能错误地索引某些内容之外,我无法从他们那里拼凑出任何非常有用的东西。

我正在尝试将输入向量 A 的顺序寻址减少到输出向量 B。

完整的代码在这里http://pastebin.com/7UGadgjX,但这是内核:

这些是内核启动语句:

我收到一个未指定的启动错误,我读过它类似于段错误。我一直在密切关注 nvidia reduction 文档,并试图将我的内核保持在 numElements 的范围内,但考虑到代码的简单程度,我似乎遗漏了一些关键。

0 投票
3 回答
3773 浏览

algorithm - 最小成本流到最大流

从最小成本流问题到最大流问题是否有减少?或相反亦然?我想使用最小成本流算法来解决最大流问题。

0 投票
1 回答
654 浏览

parallel-processing - CUDA 减少:原子操作不会影响性能?

我正在测试将原子加法操作插入优化数组缩减内核的效果,以测量性能影响。我无法理解结果。我测试了五种不同的内核:

我在足够大的元素样本上使用的设备的平均还原时间:

为什么原子操作似乎对内核没有任何影响,2或者对内核3有一些小的影响4

是完整的代码。相关的内核是:

0 投票
1 回答
520 浏览

c++ - 嵌套 for 循环中的 Cuda 减少

我有一个关于减少 CUDA 的问题。

distance是一个有gridSize*numberOfAngles元素的矩阵,fftData是一个有numberOfAngles*NFFT元素的矩阵。grid_magnitude是我要存储计算结果的结果矩阵,它有gridSize元素。

我想计算fftData对应于 中的一个特定值的索引distance。之后,这个索引 in 处的值fftData被添加到grid_magnitude对应的gridPoint.

到目前为止,这是我的代码:

gridPointIdx每个线程都应该是唯一的,因此每个线程应该在grid_magnitude. 但似乎这不起作用,因为没有对grid_magnitude.

我错过了什么?

我没有设法在完全并行的二维索引中做到这一点,也许我应该使用共享内存,但是如何将 grid_magnitude 部分分配给线程使用?

0 投票
1 回答
6491 浏览

c++ - 浮点向量的 SSE 缩减

如何使用 sse 内在函数获取浮点向量的总和元素(减少)?

简单的序列号: