我已經聲明瞭一些全局變量是_Cilk_shared。它們用於我想卸載的函數中它們用於某些我不想被卸載的函數。爲什麼使用_Cilk_offload卸載需要每個函數都是_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?
我寫的這些函數都沒有動態鏈接或共享類中的成員函數。他們只是在一個頭文件中聲明.. – yidiyidawu
感嘆,你有可能把一個小的測試用例放在一起,顯示這種行爲?它看起來可能需要更多的挖掘才能弄清楚。 – froth