问题标签 [parallel-processing]
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.
c# - .NET 中令人尴尬的可并行化任务
我正在解决一个需要执行许多令人尴尬的可并行化任务的问题。该任务是通过从数据库中读取数据来创建的,但是所有任务的集合将超过机器上的内存量,因此必须创建、处理和处置任务。我想知道解决这个问题的好方法是什么?我正在考虑以下两种方法:
实现一个同步的任务队列。实现一个生产者(任务创建者),它从数据库中读取数据并将任务放入队列中(将队列中当前的任务数量限制为一个恒定值,以确保不超过内存量)。有多个消费者进程(任务处理器)从队列中读取任务、处理任务、存储结果并处理任务。在这种方法中,大量的消费者进程会是多少?
使用 .NET 并行扩展(PLINQ 或并行),但我知道必须创建一个任务集合(我们可以在并行处理的同时将任务添加到集合中吗?)。所以我们将创建一批任务——说一次 N 个任务,然后处理这批任务并读取另外 N 个任务。
您对这两种方法有何看法?
sql-server-2008 - 并行性如何影响结果的数量?
我有一个相当复杂的查询,看起来像这样:
该查询使得cte3填充了6222个 不同的结果。在最后的select中,我在cte3上与其自身执行交叉连接(以便稍后我可以将表中的每个值与表中的每个其他值进行比较)。注意最后一行:
显然,这会关闭并行性。
因此,在cte3中有6222个结果行,我希望 (6222*6221)/2 或19353531在随后的交叉连接选择中产生结果,并且在最终的maxdop行到位的情况下,情况确实如此。
但是,当我删除maxdop行时,结果数会跳转到19380454。我的开发盒上有 4 个内核。
怎么回事?谁能解释这是为什么?我是否需要重新考虑以前以这种方式交叉连接的查询?
c - 对 mprotect 的调用过多
我正在开发一个并行应用程序(C,pthread)。我跟踪了系统调用,因为在某些时候我的并行性能很差。我的跟踪显示我的程序调用mprotect()
了很多次......足以显着减慢我的程序。
我确实分配了很多内存(使用malloc()
),但只有合理数量的调用brk()
来增加堆大小。那么为什么会有这么多电话mprotect()
呢?!
parallel-processing - 糟糕的性能 - 一个简单的开销问题,还是存在程序缺陷?
我在这里有一个我理解的相对简单的 OpenMP 构造。问题在于,与 2 个线程相比,1 个线程的程序运行速度要快 100-300 倍。该计划的 87% 用于gomp_send_wait()
,另外 9.5% 用于gomp_send_post
.
该程序给出了正确的结果,但我想知道代码中是否存在导致某些资源冲突的缺陷,或者仅仅是线程创建的开销对于块大小为 4 的循环来说完全不值得。 p
范围从 17 到 1000,取决于我们模拟的分子的大小。
我的数字是针对最坏情况的,当 p 为 17 且块大小为 4 时。无论我使用静态、动态还是引导式调度,性能都是相同的。使用p=150
和块大小75
,程序仍然比串行慢 75x-100x。
matlab - 如何在 MATLAB 中的进程之间共享内存?
有没有办法在同一台计算机上的 MATLAB 进程之间共享内存?
我在多核计算机上运行多个 MATLAB 进程(运行 Windows,如果重要的话)。它们都使用相同的巨大输入数据。在内存中只有一个副本会很好。
编辑:不幸的是,每个进程都需要访问整个巨大的输入数据,因此没有办法分割数据并解决问题。
cuda - “初学者”分布式处理项目
很长一段时间以来,我一直对构建一个异构节点集群感兴趣,以尝试拥有一台家用超级计算机,因为我对人工智能研究非常感兴趣。
然而,问题是即使我有无数的硬件,(2x 双四机架安装服务器,8 285GTX Gpus,6x PS3s 2x Hacked 360s(它们可以运行 linux)访问大量普通 PC 以及一些工作站)我没有需要处理的大型数据集,甚至没有任何可以分布式运行的软件。我已经搞乱了分布式代码编译,但充其量它使我的内核构建从 10 分钟(最坏的情况)到 30 秒(我认为其中 20 秒只是设置)。
那么我应该从哪里开始呢?我对 Obj-C/C/C++ 有相当的了解,所以写东西应该不会太难,但我应该写什么呢?
c - 搜索图像模式
我需要做一个程序来做到这一点:给定一个图像(5 * 5 像素),我必须搜索在另一个图像中存在多少这样的图像,由许多其他图像组成。也就是说,我需要在图像中搜索给定的模式。
使用的语言是 C。我必须使用并行计算来搜索 4 个角度(0º、90º、180º 和 270º)。
最好的方法是什么?
c# - 并行应用程序的可变与不可变
在我正在编写的应用程序中,我需要编写许多基本类型,它们很可能是不可变的。但我想知道如何将并行应用程序中的可变类型与不可变类型进行比较。
您可以对可变对象使用锁,对吗?它与并行应用程序中使用不可变类型的其他技术相比如何?
你至少远离使用不可变类型的锁,对吧?
parallel-processing - 通过并行最大程度地提高处理速度
在任何情况下,并行化算法带来的不仅仅是线性速度的增加吗?
multithreading - 将线程设置为在特定内核上工作的优势?
是否有任何证据表明通过手动选择在哪个处理器上运行线程可以提高系统性能?
例如,假设您将完成最多工作的线程专用于一个核心,而将所有其他“帮助”线程专用于一秒钟。