- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
共享内存并行编程(尤其是多核)中的哪些挑战无法使用 Cilk 风格的解决方案解决或无法有效解决(即嵌套数据并行与每核工作窃取任务双端队列)?
最佳答案
我认为 Cilk 的模型是嵌套任务并行性(您可以使用它来实现数据并行性)。它很可爱,但是......
Cilk 不支持 SIMD 数据并行或流并行。
Cilk 似乎不能很好地处理任务的部分顺序,因为它只提供嵌套并行性。尝试对以下一组并行任务进行编码:A、B、C、D,具有顺序约束 A 在 B 之前,A 在 D 之前,C 在 D 之前。(这是嵌套任务并行无法实现的最小部分任务顺序的典型示例直接编码)。您失去了一些使用嵌套并行性实现它的并行性。并行是宝贵的,您不想浪费并行的机会。
它不处理(据我所知)跨线程边界的异常处理。如果你想构建一个非常大的、复杂的符号应用程序,这是必需的。如果您想进行推测性计算,它也很有用。
我也不认为 Cilk 可以处理计算粒度之间的大量交互(等待同步事件),因为 Cilk 程序中的 AFAIK 只能具有与操作系统提供的线程一样多的实时并行计算。这是由于 Cilk 实现选择了生活在标准 C/C++ 编译器及其堆栈模型之上,在大多数工作站中,这些模型使用一个大堆栈每个线程模型。您可能会达到 10 或 100,但不会达到 10,000;这在处理非常大的图形时很重要。 [我不知道 Cilk 甚至允许计算粒度同步这一事实,但我看不出任何技术原因说明如果它放弃大堆栈模型它就不能同步]。
第二个含义是 Cilk 应用程序无法递归处理庞大的数据结构,因为无论您选择的堆栈大小都是有界的,并且在某些示例中您会用完堆栈。 (这不是 Cilk 的设计缺陷,只是其实现的缺陷)。这太糟糕了,因为大型事物是您需要并行性的地方之一。
有关替代方案,请参阅 PARLANSE , 它提供任意大量的计算粒度,具有工作窃取,但具有堆分配的粒度和激活记录。每个 grain 都有自己的上下文(因此可以实现大量交互的 grains 集,因为在需要等待事件时保存 grain 状态很简单。PARLANSE 同步原语包括 future 、信号量和关键函数结果(见下文)
PARLANSE 提供明确的“团队”(一组计算粒度)作为抽象,异常从函数传播到计算粒度的顶部(Java 将其定义为“未定义”,这是愚蠢的),给团队父,作为异步中止异常(可在 try 子句中捕获)返回给所有其他团队子项,以允许其他子项进行清理。
因为某些操作(例如,异步中止异常)可以在任意时间发生,PARLANSE 提供了关键函数的概念,其结果保证以原子方式返回给调用者,因此函数要么确定返回结果,要么不返回结果,并且该函数可以在异步中止处理程序中安全地清理资源。
特殊的“偏序”团队允许对已知偏序的计算进行编码;如果您有大量这样的集合,我认为这比 Cilk 的嵌套并行性更有效。
(我们使用 PARLANSE 来实现 large-scale program analysis/transformation tools.。PARLANSE 就是为了支持这一点而发明的;我们需要并行性,因为我们处理的工件是巨大的,嗯,树和图,代表数百万行代码)。
(PARLANSE 也不支持流或 SIMD,但它们并没有超出该语言的范围。可以说可以将流和 SIMD 添加到 C 和 C++ 中,但这可能非常困难)。
关于performance - Cilk 的共享内存并行编程方法是 Elixir 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983005/
只是想知道是否有可能找出谁从 Windows 共享中读取了文件(最好使用 .NET,但 win32 native 可以)? 我想做的是创建类似 awstats 的东西对于 Windows 共享,这样我
是否可以列出 Intent.ACTION_SEND ?我的意思是我需要知道是否有人通过 action_send 在 Facebook 上分享或在 Twitter 上发推文。 最佳答案 也许你想要一个更
我正在使用 Google Apps 应用程序。实际上,我想在不使用密码的情况下访问另一个 ID。我使用了 OAuth,它运行良好。但我无法分享特定人的日历。我尝试了以下代码。 GoogleOAuthP
我怎样才能只创建模拟器...可能吗?我知道,设备需要分发证书。 最佳答案 您只需将应用程序目录从 iPhone 模拟器复制到另一个实例/操作系统版本,它就应该可以工作。 因此,如果您想分发 3.1.3
我想使用多阶段构建来避免每次构建应用程序时都下载我的 Java 项目所需的所有 Maven 依赖项。 我正在考虑在第一阶段解决 Maven 依赖项,然后在第二阶段构建应用程序,这将需要访问在前一阶段下
我正在寻找保护用户下载内容的初步想法。用户下载充满有趣资源的 zip 文件,这些资源被提取到本地文件系统中以供应用程序使用。我的目标是防止用户通过互联网将下载的资源共享给其他用户(假设他们获得了对文件
我想知道在具有移动和桌面版本的网站上共享身份验证、 session 管理等的最佳方法是什么。我们正在运行 Tomcat,并且更愿意将移动站点和桌面站点的应用程序保持在不同的节点上。 我看过类似的帖子,
我发现了这个单例的实现。我怎样才能创建指向它的指针或共享指针?` 为什么这不起作用?自动测试 = Singleton::Instance(); class Singleton { public: st
我有一个 heroku 项目,我想与其他人分享。作为the instructions describe ,我使用 virtualenv 来管理环境和依赖项。有没有办法在新机器上从 requiremen
Maven 将所有 jar 存储在本地存储库 ~/.m2/repository/ 下。用户多时占用空间大。 那么,是否可以由多个用户共享这个本地存储库,或许在不同的目录结构下? 最佳答案 简单的回答
为什么共享 worker 在重新加载页面时死了?应该是复活了我该如何解决这个问题? 重装前 重新加载后(在example.com上按F5) parent worker var port = new S
我正在开发多个小型应用程序,这些应用程序将共享通用和共享模块和 Assets 。 关于如何创建项目结构的部分在这里回答:https://stackoverflow.com/a/61254557/135
我在 RHEL 上安装了 jenkins (localhost:8080),我能够成功地构建代码 现在,我想设置主/从代理。 我的笔记本电脑将充当“Master Jenkins”,而我同事的笔记本电脑
我有这种方法可以根据我使用的 EXTRA_STREAM 共享文本文件或图片。我有这两个我可以选择 i.putExtra(Intent.EXTRA_STREAM, uri); i.putExtra(In
我正在使用 R 中的一个数据分析项目,我正在使用 R 中的敏感私有(private)数据进行一些逻辑和多级建模。我爱上了 。预订 包,我已经创建了一本关于我们的工作流程和分析管道的相当广泛的书。问题是
我正在构建的应用程序需要在 UITabBarController 框架内为多个 View (及其 subview )显示共享的自定义 UIToolbar。自定义工具栏的内容在所有 View 中都是相同
我有多个应用程序,我想共享相同的 eslint 配置: - project_root/ - app1/ - node_modules/ - eslint.rc
我有多个 Electron 应用程序。一个是主应用程序,其他几个功能应用程序。主应用程序上的按钮很少,这将导致功能应用程序打开。这里的问题是每个应用程序都有一个主进程,该进程导致要利用更多的CPU。是
我正在开发一个 Node.js 后端,它通过 websocket 与一些桌面客户端进行通信,而服务器端的通信是从 Web 前端发起的。一切正常,因为我将 SockJS Connection 实例存储在
我对托管多个网站的服务器上的多个用户帐户使用私有(private) SSH key 和无密码条目。 我为每个用户帐户使用相同的私钥。 (因为我很懒?或者那是“正确”的方式)。 我现在想授权该国不同地区
我是一名优秀的程序员,十分优秀!