问题标签 [cilk-plus]
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.
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]”。这在英特尔的文档中未定义。
//正确的结果代码
参考:英特尔的文件
c++ - 为什么我的 cilk_spawn for 循环比我的 cilk_for 循环做得更好?
我有
以上需要 6.151 秒
和
耗时 5.703 秒
这fib(x)
是可怕的递归斐波那契数函数。如果我拨下 fib 功能cilk_for
确实比 更好cilk_spawn
,但在我看来,无论花费多少时间都fib(x) cilk_for
应该比cilk_spawn
.
我不明白什么?
cuda - 如何将 CUDA 库与 Cilk++ 链接
我正在尝试使用 Intel 的 Cilk++ 和 Nvidia 的 CUDA 开发一些混合程序。我从 Cuda 代码(libtest.so)创建了一个共享库。我想将它与 Cilk++ 程序链接,这样我就可以将一些工作卸载到 GPU 上。但是当我编译 cilk++ 程序时,我无法将它与这个 cuda 库链接,并且出现如下错误:
文件:test.cu
文件:main.cilk
以前我已经将 Cilk 库与 CUDA 代码相关联,但现在我想要反过来。是否可以将 CUDA 与 Cilk 链接?如果是这样,我错过了什么?
parallel-processing - Cilk_for 在数组中返回错误数据
我是多线程编程的新手。最近,我有一个项目,我将 cilk_for 应用到其中。这是代码:。
上面的代码运行后,发生了荒谬的事情。数组中的数据未正确更新。例如,如果我有一个包含 1000 个元素的数组,则该数组有可能被正确更新(1000 个元素是 AND-ed)。但也有可能会省略数组的某些部分(第一个元素到第 300 个元素是 AND-ed,第 301 个元素到第 505 个元素不是 AND-ed,第 506 个元素到第 707 个元素是 AND-ed,等等, ...)。这些省略的部分在每次运行中都是随机的,所以我认为这里的问题是关于缓存未命中。我对吗?请告诉我,任何帮助表示赞赏。:)
c++ - 英特尔 C++ 编译器给出“此平台不支持卸载构造”错误
_Cilk_offload
在使用关键字的Windows(使用 Visual Studio)上编译基本代码段时,编译器会error : offload constructs are not supported on this platform
在所有带有_Cilk_offload
and的行上抛出_Cilk_shared
(使用 \Qoffload 编译)
平台或设置的具体问题是什么?
编辑:代码在编译时失败,编译机和目标机不同
以下是我的代码的基本大纲
主文件
卸载.h
卸载.cpp
cilk-plus - 带有 cilk_for 关键字的英特尔 Cilk Plus 代码示例
cilk_for
是 Intel Cilk Plus 的关键字,我们可以通过以下方式使用它:
我需要更多带有cilk_for
关键字的 Intel Cilk Plus 示例代码。
multithreading - 如何将 Intel (c) Cilk Plus 与 CodeBlocks 一起使用
我最近一直在学习算法简介(Cormen,Rivest)第三版中的多线程算法。这本书的前言启发了我使用 Cilk Plus 扩展来实现由 MIT 开发的相同内容。但是,我无法在线获得任何文章以将其与我的 CodeBlocks IDE 集成以供使用。是否有任何一组命令来声明相同的链接器设置?
文件夹 C:\Programs(x86)\Intel\CilkTools 的内容
- bin:包含 ia32、intel64 文件夹(包含 dll)+ 其他 dll 和 exe
- doc:一个html页面和一个jpg文档
- 包括:有 CilkTools,它有四个 .h 文件:cilkscreen.h、cilkveiw.h、fake_mutex.h 和 lock_guard.h
- opensrc:有一个 zip 文件(ZedGraph,开源绘图包)
- 视觉工作室和示例文件
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 函数是:
这背后一定有一个合理的解释,这样的程序预期不同的执行时间是否合理?
c - 在二维数组的一行上运行的并行化函数(C、OpenMP、CilkPlus)
我正在尝试使用 OpenMP/CilkPlus 将 test_function main 内部的 for 循环中的函数调用并行化(如 C 代码所示)。对于每次迭代,读/写操作仅发生在 2d_array 的一行上,因此迭代中没有数据依赖性(2d_array 在可用线程之间共享,默认情况下 i 是私有的)。
无论如何,结果是错误的。还尝试了 cilk_for 而不是 OpenMP 编译指示。在每次迭代期间更改每一行时,是否有特定的方法来处理 2D 数组?
c++ - 在 std::set 上并行化的 cilk_for 错误缺少 operator-()
我试图cilk_for
用于迭代集合。事实证明,它没有为 set 定义 operator-(..)。Cilk_for 教程解释了原因,但没有提供任何示例来处理这种情况。他们说应该提供以下内容:但我不确定在哪里以及如何输入值:
链接在这里
我如何以及在哪里为 cilk 编译器提供操作符-(..) 来处理这个?
variable_type
是set::iterator
。_ 不同的类型是difference_type (ptrdiff_t)
,但termination_type
根据他们的例子是什么?