在Cilk共享函数中使用Cilk减速器
Using Cilk reducer inside Cilk shared function
嗨,我正在尝试使用_Cilk_Shared和_Cilk_download将一些并行工作卸载到MIC。
我声明一个Cilk共享函数:
_Cilk_shared void somefun(int count)
我主要使用调用这个函数
_Cilk_offload somefun(12) ;
在这个功能中,所有的东西都被期望卸载到MIC;
我想在somefun中声明一个Cilk reducer,这样我就可以使用Cilk_for并附加到Cilk reductor列表中
但我得到错误:
error: illegal to declare an object of a class not marked _Cilk_shared, in a _Cilk_shared context
cilk::reducer_list_append<int> rw;
我知道我可以用卸载pragma来做这件事,所以我应该也可以用共享的cilk来做,对吧?
我找不到使用_Cilk_shared和_Cilk_dunload的具体示例。
提前感谢
基本上,编译器抱怨的是,您从未告诉它需要为reducer_list_append类中的所有函数创建协处理器代码和主机代码。将对象rw声明为协处理器上需要的对象是必要的,但这还不够。您还需要说明该类可以在协处理器上使用。
因为您正在使用共享内存编程,所以您的程序中可能已经有了以下内容:
#pragma offload_attribute (push, _Cilk_shared)
#include <vector>
#include <offload.h>
#pragma offload_attribute (pop)
如果rw要在共享内存中,请尝试在这些pragma之间添加reducer_list_append的标头,并使用共享分配器。如果共享内存中不需要rw,那么就不需要共享分配器。在这种情况下,您也可以将类的头放在一个简单的offload_attribute区域中,而不是_Cilk_shared offload_aattribute区域(假设没有依赖项),但只要您已经有了_Cilk_shared offload _attributeregion,您就可以使用它。这不会有任何影响。
我发现我需要将cilk库放在offload_attribute _cilk_shared:中
#pragma offload_attribute (push,_Cilk_shared)
#include <cilk/cilk.h>
#include <cilk/cilk_api.h>
#include <cilk/reducer_list.h>
#pragma offload_attribute (pop)
此外。。。。截至目前,我发现了两个有趣的事实:
最好不要把#define放在任何地方。。。它会产生一个奇怪的运行时错误。
尽可能多地将#define放入offload_attribute中。。如果你把它们放在外面,有时会出现奇怪的错误。
希望英特尔为骑士登陆修复此问题。
- 在Ubuntu 16.04上安装Cilk时出现问题
- 编译 Cilk Plus 程序时遇到问题
- C++(cilk 加代码):分段错误 11.
- Cilk 加上使用 JetBrains Clion IDE 的注释 (C++)
- 为什么它会在 cilk 中给出分段错误,我正在使用 ICC 编译器
- 在Cilk共享函数中使用Cilk减速器
- 在pthreads上采用Cilk++
- gcc-5.2 cilk加上卸载到intel gfx硬件
- compile cilk plus code centos 7 gcc-5.2 devtoolset-4
- Intel MIC上的Intel TBB和Cilk Plus线程亲和性
- 通过传递句柄减速器将 C++ 包装为 C#
- 是否可以使用Cilk Plus Array Notation在“if”块语句中使用“__sec_implicit_ind
- 使用Cilk数组表示法和STL向量
- 如何在Cilk Plus中组织非线程安全资源池(每个worker一个资源)
- Cilk Plus代码的结果取决于工作者的数量
- Cilk Plus in Ubuntu
- 为什么我在编译 cilk 程序时会"error expected an expression"
- 什么是正确的方法来计算斐波那契使用cilk