2015-05-24 30 views
3

我想知道使用declare target指令的原因是什麼。我可以簡單地使用target {, data} map (to/from/tofrom ...)來指定設備應該使用哪些變量。至於功能,是否必須將從target區域調用的函數強制聲明爲目標?假設,我有以下代碼:在OpenMP中使用聲明目標編譯指示的原因

int data[N]; 

#pragma omp target 
{ 
    #pragma omp parallel for 
    for (int i=0; i<N; i++) 
     data[i] = my_function(i); 
} 

就是圍繞my_function()聲明/定義與declare target需要它?

回答

1

在您的示例中,data[N]數組將在每個目標區域的開始處映射到設備,並在最後取消映射。在具有多個目標區域的程序中,在啓動時只使用declare target指令映射data[N]可能很有用。

至於功能,OpenMP 4.0 specification對此很不清楚。它只說:

聲明目標指令指定將變量,函數(C,C++和Fortran)和子例程(Fortran)映射到設備。

因此,它沒有明確禁止從目標區域和其他目標函數調用非目標函數。

但我個人認爲my_function必須聲明爲目標。否則,爲什麼這個編譯指示(針對函數)完全被引入?

相關問題