问题标签 [cilk]
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++ - 尝试使用 cilkplus 在 gcc 上运行 cilkscreen/cilkview
我目前正在尝试使用 cilkscreen 在 cilk 中查找竞争条件;但是,我有以下问题。
我究竟做错了什么?我已经下载并设置了 PATH 以引用下载的目录https://www.cilkplus.org/download。我在 64 位上运行 ubuntu 13.10。Cilkplus 本身运行良好。
c++ - 为什么它会在 cilk 中出现分段错误,我正在使用 ICC 编译器
我是 cilk 编程的新手。我正在尝试使用 cilk 进行块矩阵乘法。但由于某种原因,我遇到了分段错误。你能帮我解决这个问题吗?
arrays - 英特尔 Cilk Plus 数组符号的奇怪复制行为
我正在使用 Intel Cilk Plus 数组表示法来练习矢量编程。但是,我遇到了数组赋值的奇怪复制行为。
要解决的问题是并行前缀。D是输入,P是输出。
//错误的结果代码。在英特尔 icc 14.0.2 上测试。
如果我删除“printf”行的注释,结果是正确的。否则就错了。但如果所有副本都遵循英特尔文档中的描述,则代码应该是正确的。
好像没有内存栅栏之类的,前两行的Buf1/Buf2拷贝没有完成,后面的add操作使用了一些不稳定的值。或者,编译器优化器只是使用复制传播来删除副本,并创建“P[bound:n-bound] = P[0:n-bound] + P[bound:n-bound]”。这在英特尔的文档中未定义。
//正确的结果代码
参考:英特尔的文件
arrays - Cilk 中的数组表示法是否并行运行?
IE。为了
那会尝试创建 100 个线程吗?还是与执行 for 循环相同?
我认为它是并行化的,但我只是对其进行了测试,它看起来不像。
有没有办法让它使用多个线程,或者数组符号就是这样,符号?
cuda - 如何将 CUDA 库与 Cilk++ 链接
我正在尝试使用 Intel 的 Cilk++ 和 Nvidia 的 CUDA 开发一些混合程序。我从 Cuda 代码(libtest.so)创建了一个共享库。我想将它与 Cilk++ 程序链接,这样我就可以将一些工作卸载到 GPU 上。但是当我编译 cilk++ 程序时,我无法将它与这个 cuda 库链接,并且出现如下错误:
文件:test.cu
文件:main.cilk
以前我已经将 Cilk 库与 CUDA 代码相关联,但现在我想要反过来。是否可以将 CUDA 与 Cilk 链接?如果是这样,我错过了什么?
c - 英特尔至强融核使用的内在函数是否比自动矢量化获得更好的性能?
Intel Xeon Phi 提供使用“IMCI”指令集,
我用它来做“c = a*b”,像这样:
并测试它的性能,当 N SIZE 为 1048576 时,
它需要花费 0.083317 秒,我想将性能与自动矢量化进行比较,
所以其他版本代码如下:
这个版本花费 0.025475 秒(但有时花费 0.002285 或更少,我不知道为什么?)
如果我将 _Cilk_for 更改为 #pragma omp parallel for,性能会很差。
那么,如果答案是这样的,为什么我们需要使用内在函数?
我在哪里犯错了吗?
有人可以给我一些优化代码的好建议吗?
performance - 我应该如何使用递归扫描算法实现 Cilk 并行性?
我实现了一个递归扫描(前缀和)算法,我在下面包含了它。在这里,我简单地生成大小为 2 到 27 次方的随机列表,检查简单的顺序扫描的准确性。有用。
现在,我想并行化它。因为我觉得有点时髦,所以我破解了 Cilk 的实现。我只是替换了两个主要的 for 循环来并行化 1)减少和 2)每个块的递归扫描,使用块减少的适当扫描作为偏移量。看起来是这样。
它有效!好吧,它返回正确的结果。它没有达到我希望的性能。原来的表现是
对于单线程应用程序,但 Cilk 版本的性能更差,具有以下运行时
我有一台 24 核的机器,所以我们显然没有看到我们希望在这里得到的加速。我的第一个想法是 Cilk 对递归处理不当,导致超额订阅,但 Cilk 应该专门处理递归。有关如何正确实施此操作的任何提示?我尝试将 cilk_for 添加到 for 循环的底部(释放所有内容)和倒数第二组循环的内部 for 循环(加入数组),但这会进一步降低性能。
任何建议都值得赞赏。
但是,请不要告诉我切换到这里讨论的 Belloch 的并行扫描算法。我已经在 Cilk 中实现了它,而且效果很好。我想看看我是否可以将它的性能与这个递归解决方案相匹配。
c - 为什么 CILK_NWORKERS 会影响只有一个 cilk_spawn 的程序?
我正在尝试并行化矩阵处理程序。使用 OpenMP 后,我决定还检查 CilkPlus,我注意到以下内容:
在我的 C 代码中,我只在一个部分应用并行性,即:
根据我目前阅读的文档,cilk_spawn 预计-也许-(CilkPlus 不强制并行)采用 highPrep() 函数并在不同的硬件线程中执行它(如果可用),然后继续执行其余代码,包括函数lowPrep()。然后线程应该在 cilk_sync 同步,然后继续执行其余代码。
我在 8 核/16 线程 Xeon E5-2680 上运行它,除了我的实验之外,它不会在任何给定时间执行任何其他操作。我现在的问题是,我注意到当我更改环境变量 CILK_NWORKERS 并尝试诸如 2、4、8、16 之类的值时,需要执行 test_function 的时间会发生很大变化。特别是,CILK_NWORKERS 设置得越高(在 2 之后),函数变得越慢。这对我来说似乎违反直觉,因为我希望可用的线程数不会改变 cilk_spawn 的操作。我希望如果有 2 个线程可用,那么函数 highPrep 将在另一个线程上执行。我希望超过 2 个线程保持空闲状态。
highPrep 和 lowPrep 函数是:
这背后一定有一个合理的解释,这样的程序预期不同的执行时间是否合理?
linux - 在 CentOS 上编译 Cilkplus-GCC
在 CentOS 7 上编译 Intel CilkPlus 时出现错误。
我可以发布我的 config.log (对于这篇文章来说有点太大了 - 如果它有用,我会发布它)
这里是控制台输出的最后几行:
谁能帮我?我只是不知道如何解决这个问题。
c++ - Cilk Program 有不同的速度
我有一个使用 libpuzzle 库的 cilk 程序。我的任务是根据图像的相似性对图像进行并行排序,我使用并行 cilk for 循环将所有图像与参考图像进行比较。我注意到在程序的第一次运行时执行速度很慢,但在第二次运行后它加快了速度,我可以看到所有逻辑内核都在 100% 工作......我每次构建项目时都重复这个总是跑两次,可以看到这种表现。任何可能导致并行程序在第一次运行时运行稍差而在第二次运行时运行良好的想法。我也改变了图像分布,这种模式似乎成立。如果有人有类似的经历,请您分享您为解决问题所做的工作吗?
谢谢