2015-05-07 30 views
0

所以我能夠編譯和執行我的內核,問題是隻有兩個工作項正在使用。我基本上試圖用{0,1,2,3,4,5,6,7}填充浮點數組[8]。所以這是一個非常簡單的Hello World應用程序。貝婁是我的核心。並非所有正在使用的工作項opencl

// Highly simplified to demonstrate 
__kernel void rnd_float32_matrix (
    __global float * res 
) { 
    uint idx = get_global_id(0); 

    res[idx] = idx; 
} 

然後我創建並用下面的代碼執行內核...

// Some more code 

    cl::Program program(context, sources, &err); 
    program.build(devices, NULL, NULL, NULL); 
    cl::Kernel kernel(program, "rnd_float32_matrix", &err); 
    kernel.setArg(0, src_d); 

    cl::CommandQueue queue(context, devices[0], 0, &err); 

    cl::Event event; 

    err = queue.enqueueNDRangeKernel(
     kernel, 
     cl::NullRange, 
     cl::NDRange(8), 
     // I've tried cl::NDRange(8) as well 
     cl::NDRange(1), 
     NULL, 
     &event 
    ); 

    event.wait(); 

    err = queue.enqueueReadBuffer(
     // This is: 
     // cl::Buffer src_d(
     //  context, 
     //  CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, 
     //  mem_size, 
     //  src_h, 
     //  &err); 
     src_d, 
     CL_TRUE, 
     0, 
     8, 
     // This is float * src_h = new float[8]; 
     src_h); 

    for(int i = 0; i < 8; i ++) { 
    std::cout << src_h[i] << std::endl; 
    } 

在代碼中我可能不會表現出來,但我也做選擇GPU設備和使用context.getInfo (..)它顯示我正在使用我的NVidia GTX 770M卡,其中顯示1024,1024,64工作項目在維度0,1和2可用。當這個數組打印我不斷... 0,1,0, 0,0,0,0,0。我也嘗試設置res [idx] = 5,我得到... 5,5,0,0,0,0,0,0。因此,似乎只有兩個給工作項目實際上正在使用。我究竟做錯了什麼?

+0

我想,你太簡化了你的程序。 'res [idx] = inSeed'不清楚,因爲'inSeed'的初始化沒有顯示。 – Christian

+0

嘗試用'CL_MEM_READ_WRITE'標誌而不是'CL_MEM_READ_ONLY'創建'src_d'。 – sgarizvi

+0

@Christian:感謝它應該是res [idx] = idx; –

回答

3

你的命令來讀取數據從設備背面僅讀8個字節,這是兩個浮點數:

err = queue.enqueueReadBuffer(
    src_d, 
    CL_TRUE, 
    0, 
    8, // <- This is the number of bytes, not the number of elements! 
    // This is float * src_h = new float[8]; 
    src_h); 

要讀8輛彩車,你需要做的是:

err = queue.enqueueReadBuffer(
    src_d, 
    CL_TRUE, 
    0, 
    8 * sizeof(cl_float), 
    // This is float * src_h = new float[8]; 
    src_h); 
+0

哈哈,我知道!我搞砸了,我後來發現了它,但那肯定是問題所在!我仍然在思考腳本世界。感謝您抽出寶貴的時間! –

相關問題