Questions tagged «parallel-computing»

有关在多个处理单元上同时计算的算法或程序的问题。不要与并发或分布式计算相混淆!

4
MapReduce的新颖之处是什么?
几年前,MapReduce被誉为分布式编程的革命。也有批评家但总的来说是热心的炒作。它甚至获得了专利![1] 这个名字让人联想到的map和reduce函数式编程,但是当我阅读(维基百科) 映射步骤:主节点获取输入,将其分为较小的子问题,然后将其分配给工作节点。辅助节点可以依次再次执行此操作,从而导致多层树结构。工作节点处理较小的问题,并将答案传递回其主节点。 减少步骤:主节点然后收集所有子问题的答案,并以某种方式将它们组合起来以形成输出-最初试图解决的问题的答案。 或[2] MAP的内部原理: MAP将输入值分割为多个单词。MAP旨在将输入的每个给定键/值对与潜在的许多中间键/值对相关联。 REDUCE的内部要素: [REDUCE]执行命令式聚合(例如,减少):采用许多值,并将其减少为单个值。 我忍不住想:这是分而治之(在Mergesort的意义上),简单明了!那么,MapReduce中是否存在(概念上的)新颖性,还是只是在某些情况下有用的旧思想的新实现? 美国专利7,650,331:“有效进行大规模数据处理的系统和方法”(2010) Google的MapReduce编程模型 -R.Lämmel(2007)重新审视

6
分布式与并行计算
我经常听到人们谈论并行计算和分布式计算,但是我给人的印象是两者之间没有明确的界限,人们往往很容易混淆这一点,尽管我相信这是非常不同的: 并行计算与多线程或如何充分利用单个CPU紧密结合。 分布式计算是指分而治之的概念,即在不同的计算机上执行子任务,然后合并结果。 但是,自从我们迈入大数据时代以来,这种区别似乎确实正在消失,并且当今大多数系统都使用并行计算和分布式计算的组合。 我在日常工作中使用的示例是具有Map / Reduce范式的Hadoop,它是一个分布清晰的系统,其工作人员在不同的计算机上执行任务,但也充分利用了每台计算机的并行计算优势。 我想征询一些建议,以了解如何在当今世界中真正实现区分,以及我们是否仍然可以谈论并行计算还是不再存在明显的区分。在我看来,分布式计算在过去几年中增长了很多,而并行计算似乎停滞了,这可能可以解释为什么我听到了更多关于分布式计算而不是并行化的讨论。


2
为什么C的void类型不同于Empty / Bottom类型?
维基百科以及我发现的其他来源都将C的void类型列为单位类型,而不是空类型。我觉得这很混乱,因为在我看来,它void更适合于空/底类型的定义。 void据我所知,没有价值观存在。 返回类型为void的函数指定该函数不返回任何内容,因此只能执行某些副作用。 类型的指针void*是所有其他指针类型的子类型。同样,void*在C中进行来回转换是隐式的。 我不确定最后一点是否可以作为void空类型的参数,void*或多或少是与无关的特例void。 另一方面,void它本身不是所有其他类型的子类型,据我所知,这是将类型作为底部类型的要求。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

3
哪些算法不能并行化?
是否有任何算法很难并行化或研究仍在进行中? 我想了解并行计算中的任何算法或任何研究领域。 我搜索的所有内容都完成了“并行”实现。只是想对任何未开发的并行计算领域进行研究。

5
P完全性和并行计算
我最近在阅读有关检查双相似性的算法,并了解到问题是P-complete的。此外,其结果是该问题或任何P完全问题不太可能具有有效的并行算法。 最后的陈述背后的直觉是什么?

2
如何将并行复杂性结果缩小到不断增加的多个内核?
我在接受类NC给出的“通过并行算法有效解决”的复杂性理论视图时遇到了问题: NC是可以通过并行算法在具有处理器上的时间上通过并行算法解决的问题。p (Ñ )∈ ø (Ñ ķ)Ç ,ķ ∈ ÑO (对数Cn )O(logc⁡n)O(\log^cn)p (Ñ )∈ Ô (Ñķ)p(n)∈O(nk)p(n) \in O(n^k)Ç ,ķ ∈ Ñc,k∈Nc,k \in \mathbb{N} 我们可以假设一个PRAM。 我的问题是,这对于“真实”机器似乎没有多说,即具有有限数量处理器的机器。现在,我被告知“众所周知”,我们可以在处理器上“有效地”模拟处理器算法。p ∈ ÑØ (ñķ)O(nk)O(n^k)p ∈ Ñp∈Np \in \mathbb{N} “有效”在这里是什么意思?这是民间传说还是有严格的定理来量化模拟所引起的开销? 我担心发生的事情是我遇到了一个问题,该问题有一个顺序算法和一个“高效”并行算法,当在处理器上进行仿真时,也需要时间(如果顺序算法是渐近最优的,那么在这种粒度的分析上就可以预期到所有这些)。在这种情况下,据我们所知,并没有加速。实际上,模拟并行算法可能比顺序算法慢。那就是我真正在寻找比 bounds 更精确的声明(或声明没有这种结果的声明)。p O (n k)Ø (ñķ)O(nk)O(n^k)pppØ (ñķ)O(nk)O(n^k)ØOO

3
当今的大型并行处理单元是否能够高效运行细胞自动机?
我不知道如今的图形卡中提供的大规模并行计算单元(例如在OpenCL中可编程的一种)是否足以有效地模拟1D细胞自动机(或2D细胞自动机?)。 如果我们选择适合芯片内存的有限网格,是否可以期望在(恒定)恒定时间内计算出在此网格上定义的元胞自动机的一次跃迁? 我认为2D细胞自动机比1D自动机需要更多的带宽来进行芯片不同部分之间的通信。 对于FPGA编程或定制芯片,我也会对同一问题感兴趣。

3
并行随机读取似乎效果很好–为什么?
考虑以下非常简单的计算机程序: for i = 1 to n: y[i] = x[p[i]] 这里和y是字节的n个元素数组,而p是字的n个元素数组。在这里,n很大,例如n = 2 31(这样,只有很小一部分的数据适合任何类型的高速缓存)。XXxÿÿyññnpppññnññnn = 231ñ=231n = 2^{31} 假设由随机数组成,在1和n之间均匀分布。ppp1个1个1ññn 从现代硬件的角度来看,这意味着: 读取很便宜(顺序读取)p [ i ]p[一世]p[i] 读取非常昂贵(随机读取;几乎所有读取都是高速缓存未命中;我们将不得不从主内存中获取每个单独的字节)x [ p [ i ] ]X[p[一世]]x[p[i]] 写很便宜(顺序写)。ÿ[ 我]ÿ[一世]y[i] 这确实是我所观察到的。与仅执行顺序读取和写入的程序相比,该程序非常慢。大。 现在出现一个问题:该程序在现代多核平台上的并行度如何? 我的假设是该程序不能很好地并行化。毕竟,瓶颈是主要内存。单核已经在浪费大部分时间,只是在等待主存储器中的某些数据。 但是,当我开始尝试瓶颈是这种操作的某些算法时,这并不是我观察到的! 我只是用OpenMP并行for循环替换了朴素的for循环(本质上,它将范围拆分为较小的部分,并在不同的CPU内核上并行运行这些部分)。[ 1,n ][1个,ñ][1,n] 在低端计算机上,加速确实很小。但是在高端平台上,我惊讶地发现我获得了出色的近线性加速。一些具体示例(确切的时间安排可能会有所偏离,会有很多随机变化;这些只是快速的实验): 2 x 4核Xeon(总共8核):与单线程版本相比,速度提高了5-8倍。 2 x 6核Xeon(总共12核):与单线程版本相比,速度提高了8-14倍。 现在,这完全出乎意料。问题: 究竟为什么这种程序并行化如此好?硬件会发生什么?(我目前的猜测是沿着这些思路的:从不同线程进行的随机读取是“流水线式的”,得到这些答案的平均速率比单线程情况要高得多。) 是否有必要使用多个线程和多个内核来获得任何加速?如果确实在主内存和CPU之间的接口中发生了某种流水线操作,那么单线程应用程序是否不能让主内存知道很快将需要, …

2
任务完成时间的变化如何影响制造跨度?
比方说,我们有大量的任务τ 1,τ 2,。。。,τ Ñ和的相同集合(在性能方面)处理器ρ 1,ρ 2,。。。,ρ 米其完全并行操作。对于感兴趣的场景,我们可以假定米≤ ñ。每个τ 我需要时间/周期的一定量来完成,一旦它被分配给一个处理器ρ Ĵτ1,τ2,...,τn\tau_1, \tau_2, ..., \tau_nρ1,ρ2,...,ρm\rho_1, \rho_2, ..., \rho_mm≤nm \leq nτi\tau_iρj\rho_j,并且一旦分配,就无法重新分配,直到完成(处理器总是最终完成分配的任务)。让我们假定每个τ 我需要的时间量/周期X 我,在事先不知道,从一些离散的随机分布截取。对于这个问题,我们甚至可以假设一个简单的分布:P (X 我 = 1 )= P (X 我 = 5 )= 1 / 2,并且所有X 我是两两独立的。因此μ 我 = 3和στi\tau_iXiX_iP(Xi=1)=P(Xi=5)=1/2P(X_i = 1) = P(X_i = 5) = 1/2XiX_iμi=3\mu_i = 3 2= 4σ2=4\sigma^2 …

2
有关并行计算和NC类的一些问题
关于这两个主题,我有很多相关问题。 首先,大多数复杂文本仅覆盖。有没有很好的资源可以更深入地涵盖研究?例如,下面讨论我所有问题的内容。另外,我假设由于与并行化的联系仍然有大量研究,但我可能是错的。复杂性动物园中的部分并没有太大帮助。NCNC\mathbb{NC}NCNC\mathbb{NC} 其次,如果我们假设半组运算需要恒定的时间,则在半组上的计算将在进行。但是,如果运算不占用固定时间(无界整数就是这种情况)怎么办?是否存在任何已知的问题?NC1NC1\mathbb{NC}^1NCiNCi\mathbb{NC}^i 第三,由于,是否有一种算法可以将任何logspace算法转换为并行版本?L⊆NC2L⊆NC2\mathbb{L} \subseteq \mathbb{NC}^2 第四,听起来大多数人都以相同的方式假设。这背后的直觉是什么?NC≠PNC≠P\mathbb{NC} \ne \mathbb{P}P≠NPP≠NP\mathbb{P} \ne \mathbb{NP} 第五,我读过的每一篇文章都提到了但没有给出其中所包含问题的示例。有吗RNCRNC\mathbb{RNC} 最后,该答案提到了存在亚线性并行执行时间的问题。这些问题有哪些例子?是否还有其他复杂性类包含未知的并行算法?PP\mathbb{P}NCNC\mathbb{NC}


1
如果我们有GPGPU,为什么还要使用SIMD?
我认为这个问题最好在Stack Exchange的CS部分中解决。既然我们已经拥有使用CUDA和OpenCL等语言的GPGPU,那么多媒体SIMD扩展(SSE / AVX / NEON)是否仍然可以满足目的? 最近,我阅读了一篇有关SSE指令如何用于加速分类网络的文章。我以为这很整洁,但是当我告诉我的首席教授时,他笑了,并说在GPU上运行类似的代码会破坏SIMD版本。我毫不怀疑,因为SSE非常简单,GPU是大型的高度复杂的加速器,具有更多的并行性,但是让我思考的是,在许多情况下,多媒体SIMD扩展比使用GPU更有用吗? 如果GPGPU使SIMD冗余,为什么英特尔会增加对SIMD的支持?SSE是128位,现在是AVX的256位,明年将是512位。如果GPGPU可以更好地处理具有数据并行性的代码,为什么英特尔要推出这些SIMD扩展?他们可能能够将等效资源(研究和区域)放入更大的缓存和分支预测器中,从而提高串行性能。 为什么使用SIMD代替GPGPU?

3
多核SAT解算器
我正在尝试解决25k子句5k变量SAT问题。由于它已经运行了一个小时(precosat),因此我想在以后解决更大的问题,因此我正在寻找一种多核SAT-Solver。 由于似乎有许多SAT解算器,我很迷茫。 有人能指出我最适合我的情况吗? 如果有人可以给我大概的时间(如果可能的话),我也很高兴。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.