为什么我在编译 cilk 程序时会"error expected an expression"
Why I'm getting "error expected an expression" while compile cilk program
我使用Linux, Eclipse和Intel编译器V14。
我正在尝试编译基本的fibonacci示例:
#include <iostream>
#include <cilk/cilk.h>
using namespace std;
int fib(int n) {
if (n < 2) return 1;
else {
int rst = 0;
rst += cilk_spawn fib(n-1);
rst += cilk_spawn fib(n-2);
cilk_sync;
return rst;
}
}
int main() {
int res = fib(9);
return 0;
}
并得到编译错误:
error expected an expression
我尝试使用:
cilk_spawn
Cilk_spawn
_cilk_spawn
_Cilk_spawn
不确定是否可以使用cilk_spawn +=操作符。下面的代码可以工作吗?
int rst = 0;
int temp = 0;
temp = cilk_spawn fib(n-1);
rst += temp;
temp = cilk_spawn fib(n-2);
rst += temp;
cilk_sync;
return rst;
英特尔编译器自动启用Cilk Plus。消息"symbol _Cilk_spawn无法被解析"表明您没有使用英特尔编译器。检查编译命令,确保它调用的是icc而不是gcc。
同样,您的原始示例包含一个race。在Cilk Plus中经典fibonacci的正确实现是:
int fib(int n) {
if (n < 2)
return n;
int x = cilk_spawn fib(n-1);
int y = fib(n-2);
cilk_sync;
return x+y;
}
你需要使用两个独立的变量,它们只在同步后求和,以避免竞争。
你还应该避免在第二次递归调用fib()时使用cilk_spawn。记住,Cilk运行时实现了对延续的窃取。所以,如果你使用第二个cilk_spawn,会被窃取的是;的第二个fib()调用,直到同步。它只会拖慢你的程序。MIT Cilk要求所有对Cilk函数的调用都被生成。英特尔Cilk Plus取消了这个要求。
相关文章:
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 为什么我会"error: expected expression"?
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- NDK 构建中的异常"error: expected ';' after top level declarator"
- 为什么我总是"error: expected unqualified-id before 'case'"?
- "[Error] expected unqualified-Id before 'if'"这个代码块是什么意思
- 推导模板类重载方法的地址会导致"error: expected primary-expression before ‘decltype’"
- 使用宏访问指向数据成员的指针会导致"error: expected unqualified-id before ‘*’ token"
- "error: expected primary-expression before '<=' token" 我做错了什么?
- 内存集调用位置的"error: expected constructor, destructor, or type conversion before '(' token"
- 模板成员函数调用 -- "error: expected primary-expression before 'int'"
- "Error: expected a '{' introducing a lambda body"尝试从地图<字符,字符中获取字符时> C++
- 运算符 [] 重载的"error: expected unqualified-id before 'float' "
- 设置if流,获取'error: expected initializer before ‘.’ token'
- 我的代码看起来不错。为什么我要得到"error: expected primary-expression before ')' token"?
- C++ "Error expected a ')'"
- C++错误"tabulate.cc:19: error: expected primary-expression before ',' token"
- "Error: expected a declaration" 在 Apache Hadoop源代码中使用 Visual Studio 2010
- C++:"error: expected ',' or '...' before '(' token"