我已将一些全局变量声明为 _Cilk_shared。它们用于我要卸载的功能中它们也用于我不想卸载的某些功能中。
所以最初我只将那些需要卸载的函数声明为_Cilk_shared,并使用_Cilk_offload 调用这些函数。
它编译得很好。当我在主机上运行它时,它只会给出正确的结果。
然后我用 MIC 运行它。它给了我关于无法加载库 blablabla 未定义符号的运行时错误,后跟我没有声明为 _cilk_shared 的函数名称。这些函数也不需要 _cilk_shared。
所以我必须把这些函数改成_cilk_shared。再次运行它。这次 MIC 给出了正确的结果。
我检查了这些函数(我不想卸载并且最初没有声明为 _cilk_shared )是否被卸载,通过使用
#ifdef __MIC__
printf(" Running on MIC\n");
#else
printf("No MIC\n");
#endif
结果是它们没有被卸载....
所以我想知道为什么它要我将这些函数声明为_Cilk_shared?