问题标签 [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.
c - 为什么使用 GCC 5 和 cilk-plus 时会出现此编译错误?
由于某种原因 cilk_spawn 不适用于 x86 内在函数。每次尝试将两者组合到同一函数的主体中时,都会出现错误。(请注意 cilk_for 工作正常)。如果我删除所有 SIMD 指令,它会编译并运行良好。
这是 gcc 输出:
我刚刚注意到这是 GCC 4.9 但错误消息与 GCC 5 相同。
c++ - cilk reduce是如何完成的(thread vs smid)
我有类似的东西:
我想使用 cilk 进行并行化。我写了以下代码:
但问题是,我可以在主循环上使用 cilk_for,但如果 reduce 操作已经在生成线程,那么 cilk_for 不会增加线程开销并减慢整个过程吗?我应该在dest和src args 中添加限制以进一步帮助编译器吗?还是在这种情况下是隐含的?
(ps:我现在无法尝试代码,因为
内部编译器错误:在 find_rank 中,位于 c-family/array-notation-common.c:244
在
我也在努力解决。)
c++ - 使用 Cilk 数组表示法和 STL 向量
我正在学习使用 C++ 的 Cilk Plus 扩展(在 gcc 上)进行并行编程。我读过的最简单的重构之一是使用 Cilk 数组表示法,即使用它执行与顺序无关的向量运算。
IE:c[:] = a[:] + b[:]
而不是:for (unsigned i = 0; i < a.size(); ++i) c[i] = a[i] + b[i];
我有一个大量使用std::vector
对象而不是数组的大型代码。是否可以将这个概念与std::vector
?
考虑到a
,b
和c
的std::vector<double>
长度相等,我尝试了这些但没有成功:
1.
2.
两者都返回
在指针或记录中使用数组表示法所需的起始索引和长度字段
我知道方法 #2 使指针指向没有长度信息的向量,但是有什么解决方法吗?
编辑:
一个有效的解决方案是首选。例如,可以定义一个数组并使用std::copy
将值从向量复制到数组,使用 Cilk 数组表示法执行加法,然后将值复制回向量。这可能比仅仅做原始的元素加法更昂贵。
c - 使用 Cilk 嵌套并行执行
我正在尝试实现一个操纵矩阵的二维模板算法。对于矩阵中的每个字段,将其上、下、左、右的字段相加并除以 4 以计算新值。对于给定的矩阵,这个过程可能会重复多次。
该程序是用 C 语言编写的,并使用 cilkplus gcc 二进制文件进行编译。
**编辑:我认为您可能对编译器标志感兴趣:
请注意,实际代码涉及一些指针算法以保持一切一致。顺序实现有效。我在这里省略了这些步骤以增强可理解性。
伪代码看起来像这样(没有边缘情况处理):
然后将模板计算本身移至函数apply_stencil(...)
并尝试并行化:
Floating point exception
此版本编译时没有错误/警告,但在执行时会直接产生一个。如果您想知道:将哪个 for 循环制成 cilk_for 循环并不重要。所有配置(除了没有 cilk_for)都会产生相同的错误。
可能的其他方法:
这会在编译时产生 3 个警告:i, j
并且k
似乎未初始化。尝试执行时,执行该matrix = result_matrix;
步骤的函数似乎未定义。
现在是实际问题:Cilk 为什么以及如何破坏我的顺序代码;或者更确切地说,我怎样才能阻止它这样做?
如果您有兴趣,实际代码当然也可用。然而,这个项目是针对大学课程的,因此会受到其他学生的抄袭,这些学生发现了这个线程,这就是为什么我不想公开分享它。
**更新:
正如建议的那样,我尝试仅使用 1 个工作线程运行该算法,从而有效地使 cilk 实现顺序化。令人惊讶的是,这确实很好。但是,一旦我将工人的数量更改为两个,熟悉的错误就会返回。
我不认为这种行为是由竞争条件引起的。由于工作矩阵在每次迭代后都会更改cilk_sync
并被调用,因此实际上没有临界区。所有线程不依赖于其他人在同一迭代中写入的数据。
我将尝试的下一步是尝试其他版本的 cilkplus 编译器,看看它是否可能是他们一方的错误。
c++ - 在 Mac OS X 上的 Cilk Plus 上安装
如何在 Mac OS X 上安装 CilkPlus?
当我在我的 Mac 上检查 g++ 版本时,它显示以下内容:
我确实从他们的网站下载了 Intel Cilk Plus SDK build 4421 。
但我不知道如何进行。
visual-studio-2015 - 包括 Visual Studio 2015 中的 Cilk
如何在 Visual Studio 2015 中包含用于并行编程的 Cilk?因为只有 Visual Studio 2010 的默认安装。
c++ - 编译cilk加代码centos 7 gcc-5.2 devtoolset-4
像这样编译找不到库
所以我尝试使用 -L 开关查找并添加它
$ find /opt/rh/devtoolset-4 -name " cilkrts " /opt/rh/devtoolset-4/root/usr/lib/gcc/x86_64-redhat-linux/5.2.1/32/libcilkrts.a /opt/ rh/devtoolset-4/root/usr/lib/gcc/x86_64-redhat-linux/5.2.1/32/libcilkrts.so /opt/rh/devtoolset-4/root/usr/lib/gcc/x86_64-redhat- linux/5.2.1/libcilkrts.spec
指针赞赏
c++ - gcc-5.2 cilk plus 卸载到英特尔 gfx 硬件
我们可以使用 cilk plus 和 gcc-5.2 卸载到图形硬件吗
编译器对以下测试代码给出上述警告:
编译
c++ - 用于检测竞争条件的 g++ 和 cilkscreen
我试图用它cilkscreen
来检测代码中的一些竞争条件。我正在编译我的代码
但是,当我启动时,cilkscreen
我收到以下错误消息:
我应该添加更多选项g++
吗?或者cilkscreen
仅适用于编译的代码icc
?
FWIW:我正在使用