嗨,我正试着用_Cilk_Shared和_Cilk_offload把一些并行的工作卸给MIC。
我声明一个Cilk共享函数:
_Cilk_shared void somefun(int count)总的来说,我使用以下方法调用此函数
_Cilk_offload somefun(12) ;在这个功能中,所有的东西都将被卸载到MIC;
我想在里面声明一个Cilk减速机,这样我就可以使用cilk_for并附加到cilk减速器列表中,
但我错了:
error: illegal to declare an object of a class not marked _Cilk_shared, in a _Cilk_shared context
cilk::reducer_list_append<int> rw;我知道我可以用卸载实用主义来做这件事,所以我应该能够和cilk共享这个,对吗?
我找不到使用_Cilk_shared和_Cilk_offload的具体例子。
提前感谢
发布于 2015-04-14 06:17:07
基本上,编译器抱怨的是,您从未告诉它它需要为reducer_list_append类中的所有函数创建协处理器代码和主机代码。将对象rw声明为协处理器上的需要是必要的,但还不够。您还需要说类可以在协处理器上使用。
因为您使用的是共享内存编程,所以您的程序中可能已经有了如下内容:
#pragma offload_attribute (push, _Cilk_shared)
#include <vector>
#include <offload.h>
#pragma offload_attribute (pop) 如果rw要在共享内存中使用,请尝试在这些实用程序之间添加reducer_list_append的头,并使用共享分配器。如果不需要rw在共享内存中,则不应该需要共享分配器。在这种情况下,您还可以将类的头放在一个简单的offload_attribute区域中,而不是一个_Cilk_shared offload_attribute区域(假设没有依赖项),但是只要您已经有了_Cilk_shared offload_attribute区域,就可以使用它。不会有任何伤害的。
发布于 2015-04-14 05:14:18
我发现我需要在offload_attribute _Cilk_shared中放置cilk库:
#pragma offload_attribute (push,_Cilk_shared)
#include <cilk/cilk.h>
#include <cilk/cilk_api.h>
#include <cilk/reducer_list.h>
#pragma offload_attribute (pop)另外.我发现了两个有趣的事实:
希望英特尔能为骑士们的着陆做好准备。
https://stackoverflow.com/questions/29610450
复制相似问题