2013-07-13 88 views
4

我的CL程序:OpenCL的荒謬CL_OUT_OF_RESOURCES

constant double LATTICEWEIGHTS[19] = { 1.0/36.0, 

             ..... 

             1.0/36.0 }; 

void 
computeFeq(
    double density, 
    double3 velocity, 
    double* feq) { 
    for (int i = 0; i < 19; ++i) { 
    feq[i] = LATTICEWEIGHTS[i];   // Line 1 
    //feq[i] = 2.0 * LATTICEWEIGHTS[i]; // Line 2 
    } 
} 

__kernel void 
Kernel(){ 

    ..... 

    double density; 
    double3 velocity; 
    double feq[19]; 

    computeFeq(density, velocity, feq); 
} 

此代碼的工作。 但是,如果我評論第1行並取消註釋第2行,CL_OUT_OF_RESOURCES將立即發生。

任何想法?

我使用NVIDIA GTX 670M進行測試。

回答

4

這似乎是錯誤的,但有些事情要先檢查:註冊使用情況。 Nvidia GPU支持詳細輸出選項。將其傳遞給clBuildProgram,然後檢查構建日誌。事情是這樣的:

clBuildProgram(program, 1, &device_id, "-cl-nv-verbose", NULL, NULL); 

這下cl_nv_compiler_options擴展記錄。在CUDA文檔中查找設備的最大寄存器數量。可能發生的情況是,一塊工作項所需的寄存器總數超過了單個SM/SMX中可用的寄存器總數,從而導致錯誤。

如果註冊使用不是問題,那麼它可能是某處出現越界存儲器訪問。我不知道這個錯誤信息並不表明這一點,但我曾經遇到過這樣的錯誤。這樣的錯誤可能在任何地方,而且很難找到。