簡體   English   中英

OpenCL中奇怪的私有內存行為

[英]Strange private memory behaviour in OpenCL

當私有對象的大小超過128個字節時,此代碼將中斷。 它僅在OS X上發生。有人知道發生了什么嗎?

#define SZ 33 // Always works with 32 and below

typedef struct S
{
    int arr[SZ];
} State;

__kernel void myKernel()
{
    printf("sizeof State: %d\n", sizeof(State));
    printf("Threat ID: %d\n", get_local_id(0));

    State state = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}};

    for (int i = 0; i < SZ; i++)
        printf("%d, ", state.arr[i]);

    printf("\n");

    // uncomment this and it bugs with garbage output.
//  state.arr[1] = 111;

    for (int i = 0; i < SZ; i++)
        printf("%d, ", state.arr[i]);
}

預期輸出為:

0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、0、1、2、3、4、5、6、7、8, 9,10,11,12,12,13,14,15,16,
0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、0、1、2、3、4、5、6、7、8, 9,10,11,12,12,13,14,15,16,

但是,如果我取消注釋該行,則輸出將如下所示:

8782104、8782104、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256, 256、256、256、256、256、256、256、256,

8782104、111、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256、256, 256、256、256、256、256、256、256、256,

另外,如果我將大小更改為<= 32(128字節),它將始終有效。 在OpenCL OS X上,printf有問題,但是即使沒有printf,它也會更改錯誤的值。

我擁有配備雙D700 AMD卡的Mac Pro上的所有最新產品。 如果我啟動進入Windows並在其中運行,它會完美運行。

我會說這是OpenCL編譯器錯誤,但是我不確定,也不知道如何解決。

正如Tim Randall建議使用空狀態初始化,然后手動設置成員可以解決此問題。

所以:

State state;
for (int i = 0; i < SZ; i++)
   state.arr[i]=i;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM