首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Cilk共享函数中使用Cilk减速器

在Cilk共享函数中使用Cilk减速器
EN

Stack Overflow用户
提问于 2015-04-13 16:32:30
回答 2查看 291关注 0票数 0

嗨,我正试着用_Cilk_Shared和_Cilk_offload把一些并行的工作卸给MIC。

我声明一个Cilk共享函数:

代码语言:javascript
复制
_Cilk_shared void somefun(int count)

总的来说,我使用以下方法调用此函数

代码语言:javascript
复制
_Cilk_offload somefun(12) ;

在这个功能中,所有的东西都将被卸载到MIC;

我想在里面声明一个Cilk减速机,这样我就可以使用cilk_for并附加到cilk减速器列表中,

但我错了:

代码语言:javascript
复制
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的具体例子。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-14 06:17:07

基本上,编译器抱怨的是,您从未告诉它它需要为reducer_list_append类中的所有函数创建协处理器代码和主机代码。将对象rw声明为协处理器上的需要是必要的,但还不够。您还需要说类可以在协处理器上使用。

因为您使用的是共享内存编程,所以您的程序中可能已经有了如下内容:

代码语言:javascript
复制
#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区域,就可以使用它。不会有任何伤害的。

票数 0
EN

Stack Overflow用户

发布于 2015-04-14 05:14:18

我发现我需要在offload_attribute _Cilk_shared中放置cilk库:

代码语言:javascript
复制
#pragma offload_attribute (push,_Cilk_shared)
#include <cilk/cilk.h>
#include <cilk/cilk_api.h>
#include <cilk/reducer_list.h>
#pragma offload_attribute (pop)

另外.我发现了两个有趣的事实:

  1. 最好不要放#define anywhere...it会产生奇怪的运行时错误。
  2. 在offload_attribute中放置#define和将它们放在can..if中一样多,有时会产生奇怪的错误。

希望英特尔能为骑士们的着陆做好准备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29610450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档