问题标签 [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++ - C++中的多线程图像处理
我正在开发一个处理不同大小图像的程序。许多这些操作从输入读取像素数据并写入单独的输出(例如模糊)。这是在每个像素的基础上完成的。
这种图像映射对 CPU 的压力很大。我想使用多线程来加快速度。我该怎么做?我正在考虑每行像素创建一个线程。
我有几个要求:
- 可执行文件的大小必须最小化。换句话说,我不能使用海量的库。什么是 C/C++ 最轻量级、可移植的线程库?
- 可执行文件的大小必须最小化。我正在考虑有一个函数 forEachRow(fp* ) 为每一行运行一个线程,或者甚至是一个 forEachPixel(fp* ) ,其中 fp 在其自己的线程中对单个像素进行操作。哪个最好?
- 我应该使用普通函数或仿函数或函数或一些 lambda 函数还是......其他什么?
- 一些操作使用需要来自先前处理的像素的信息的优化。这使得 forEachRow 有利。即使考虑到这一点,使用 forEachPixel 会更好吗?
- 我需要锁定我的只读和只写数组吗?
- 输入只能从数组中读取,但许多操作需要从数组中的多个像素输入。
- 每个像素仅写入一次输出。
- 速度也很重要(当然),但优化可执行文件大小优先。
谢谢。
感兴趣的有关此主题的更多信息:C++ 并行化库:OpenMP 与线程构建块
java - 并行化:除了同步和 I/O 之外,是什么导致 Java 线程阻塞?
短版在标题中。
长版:我正在开发一个使用 Java 进行科学优化的程序。程序的工作量可以分为并行和串行阶段——并行阶段意味着正在执行高度可并行化的工作。为了加速程序(它运行数小时/数天),我创建了与我正在使用的机器上的 CPU 内核数相等的线程数——通常是 4 或 8 个——并在它们之间分配工作。然后我在进入串行阶段之前启动这些线程并加入()它们。
到目前为止,一切都很好。困扰我的是,并行阶段的 CPU 利用率和加速远未接近“理论最大值”——例如,如果我有 4 个内核,我预计会看到 350-400% 的“利用率”(如顶部报告)但相反,它在 180 到 310 之间反弹。仅使用一个线程,我得到 100% 的 CPU 利用率。
我所知道的线程不能全速运行的唯一原因是: - 由于 I/O 阻塞 - 由于同步而阻塞
在我的并行线程中没有任何 I/O 发生,也没有任何同步——线程共享的唯一数据结构是只读的,并且是基本类型或(非并发)集合。所以我正在寻找其他解释。一种可能性是多个线程反复阻塞垃圾收集,但这似乎只在内存压力的情况下才有意义,而且我分配的内存远高于所需的最大堆空间。
任何建议,将不胜感激。
更新:以防万一有人好奇,经过更多调查后,我调整了代码以获得一般性能并看到更好的利用率,即使我所做的任何更改都与同步无关。然而,一些变化应该会导致更少的新堆分配,特别是我摆脱了一些迭代器和临时盒装数字的使用(用于高性能 Java 计算的 CERN“Colt”库在这里很有用:它提供了像 IntArrayList 这样的集合, DoubleArrayList 等用于基本类型。)。所以我认为垃圾收集可能是罪魁祸首。
multithreading - 与 Octave 并行运行循环的一部分?
我有以下代码需要在超过 20000 行的矩阵上运行。运行需要几分钟,而 datenum 和 str2double 函数似乎是瓶颈。由于没有计算依赖于以前的计算,有没有办法将循环分成多个部分并让它们并行执行?任何有关优化此代码的建议将不胜感激。
c# - 使用 Parallel.For 测试 SQL 查询并与 ThreadPool 进行比较
我正在寻找一种方法来轻松加载测试和基准测试我们的一些 SQL(使用 ADO.NET,使用 LINQ 或 PLINQ 没什么特别的),在高并行负载下运行时必须具有高性能。
我曾考虑使用新的并行扩展 CTP,特别是Parallel.For
/Parallel.ForEach
简单地运行 SQL 超过 10k 次迭代左右 - 但我无法找到任何关于这些优化的数据。
本质上,我担心因为数据库访问本质上是 I/O 绑定的,所以它不会产生足够的负载。有谁知道并行。如果它正在执行的任务不完全受 CPU 限制,是否足够智能以使用 > x 个线程(其中 x = CPU 数)?即它的行为方式与托管线程池类似吗?
如果是这样就更酷了!
编辑:正如@CVertex 在下面提到的,您可以独立设置线程数。有谁知道默认情况下并行库是否足够智能以在作业受 I/O 绑定时继续添加线程?
database - 具有并行非阻塞数据库访问的 Web 脚本语言?
我的 webapp 需要使用多个数据库分片,并且偶尔需要并行查询这些分片。是否有任何 Web 脚本语言对并行非阻塞数据库访问具有成熟、稳定的支持?如果是这样,你能指出我正确的方向吗?免费的开源是首选,但我主要想要一些可以工作的东西。
线程对我来说很好,但我不需要真正的多线程支持。我想要的只是对五个不同的数据库服务器进行五个 10 秒的数据库查询需要 10 秒而不是 50 秒。它实际使用了多少 CPU 对我来说并不重要。
sql - 顺序或并行启动存储过程
我们有一个每晚运行的存储过程,它依次启动许多其他过程。其中一些程序在逻辑上可以与其他一些程序并行运行。
- 我如何向 SQL Server 指示一个过程应该并行运行还是串行运行——即:异步启动还是阻塞启动?
- 并行运行它们会有什么影响,请记住,我已经确定这些进程不会竞争表访问或锁定 - 只是总磁盘 io 和内存。在大多数情况下,他们甚至不使用相同的表。
- 如果其中一些程序是相同的程序,只是参数不同,这有关系吗?
- 如果我异步启动一对或过程,SQL Server 中是否有一个好的系统来等待它们完成,或者我是否需要让它们中的每一个在某处设置一个标志并使用定期检查和轮询标志
WAITFOR DELAY
?
目前我们仍在使用 SQL Server 2000。
附带说明一下,这很重要,因为主程序是响应从大型机系统到服务器的数据转储完成而启动的。大型机转储每晚大约需要 2 个小时,我们无法控制它。因此,我们一直在努力寻找减少处理时间的方法。
concurrency - 您如何利用多核?
作为来自企业 Web 开发领域的HPC领域的人,我总是很想知道“现实世界”中的开发人员如何利用并行计算。现在所有芯片都在走向多核,这一点更加重要,当一个芯片上有数千个核心而不是几个核心时,它会更加重要。
我的问题是:
- 这对您的软件路线图有何影响?
- 我对有关多核如何影响不同软件领域的真实故事特别感兴趣,因此请在您的答案中指定您所做的开发类型(例如服务器端、客户端应用程序、科学计算等)。
- 您如何处理现有代码以利用多核机器,您面临哪些挑战?你在使用OpenMP、Erlang、Haskell、CUDA、TBB、UPC还是别的什么?
- 随着并发水平的不断提高,您打算做什么,您将如何处理成百上千个内核?
- 如果您的领域不容易从并行计算中受益,那么解释为什么也很有趣。
最后,我把这个问题描述为一个多核问题,但请随意谈论其他类型的并行计算。如果您正在移植应用程序的一部分以使用MapReduce,或者如果大型集群上的MPI是您的范例,那么也一定要提到这一点。
更新:如果您确实回答了 #5,请提及您是否认为如果内核数(100、1000 等)超过可用内存带宽所能提供的数量(看看每个内核的带宽如何变得越来越小),情况是否会发生变化)。您仍然可以将剩余的内核用于您的应用程序吗?
parallel-processing - 如何通过 tcp 电缆连接两台或多台机器以形成网络网格?
如何连接两台或多台机器以形成网络网格,以及如何将工作负载分配给两台机器?
我需要在机器上运行什么操作系统,我应该使用什么应用程序来管理负载平衡?
注意:我在某处读到谷歌使用廉价机器来执行这个盛宴,他们如何连接两个网卡('Teaming')并在机器之间分配负载?
好的实际示例对我很有帮助,带有实际的代码示例。
指向一些我可能会阅读这些内容的好网站的指针将不胜感激。
delphi - Finding available LPT (parallel) ports and addresses in Delphi
I am doing direct I/O on a parallel port which is fine and necessary for speed. I would like to enumerate the available ports to offer the user a choice of ports at setup time rather than a tedious trawl through device manager to read the address manually. Does anyone know a means of doing this please? Many thanks, Brian
.net - 在 Web 应用程序中使用并行扩展
我想听听一些关于并行计算方法(包括并行扩展(例如 June CTP)的潜在用途)在 Web 应用程序中的作用(如果有的话)的意见。这种方法适合和/或不适合什么场景?
我对 IIS 和 Web 浏览器线程任务的确切理解是相当有限的。如果有人对此有很好的理解,我将不胜感激。我更想知道 IIS 和 Web 浏览器的工作方式是否限制了在 Web 应用程序中创建线程和/或异步任务的投资回报率。
提前致谢。