【问题标题】:Prefix Sum with global memory and an error with local memory全局内存的前缀 Sum 和本地内存的错误
【发布时间】:2014-06-05 03:12:32
【问题描述】:

我有一个完全不支持本地内存的 Mali GPU。 每次我运行由本地内存组成的代码时,它都会给我一些来自设备的错误。 所以,我想将我的代码转移到只使用全局内存的版本。 我在想是否可以仅在 GPU 上使用全局内存来运行前缀求和/并行减少算法。

EDITED :我正在调试错误并发现一个奇怪的事情是一个特定的行给出了错误。 我有这样的 e 行:

`#define LOG_LSIZE 8`
`#define LSIZE_SHIFT_VALUE 4`
`#define LOG_NUM_BANKS 2`
`#define GET_CONFLICT_OFFSET(lid) ((lid) >> LOG_NUM_BANKS)`
`#define LSIZE 32`
`__local int lm_sum[2][LSIZE + LOG_LSIZE]`
`**lm_sum[lid >> LSIZE_SHIFT_VALUE][bi]  +=  lm_sum[lid >>  LSIZE_SHIFT_VALUE][ai]**`

lid 是本地 id,我使用 qork 组大小为 32。我发现突出显示的行是错误的原因。我尝试使用固定值,发现不能在语句右侧使用lm_sum。如果我这样做,那会给我一个错误。例如,这一行也给了我错误: int temp= lm_sum[0][0]

知道发生了什么吗?

错误:

`In initial.cpp***[14100.684249] Mali<ERROR, BASE_MMU>: In file: /home/jbmaster/work/01.LPD_OpenCL_RFS/01.arm_work_3_0_31/SEC_All_EVT0_TX013-BU-00001-r2p0-00rel0/TX013-BU-00001-r2p0-00rel0/driver/product/kernel/drivers/gpu/arm/t6xx/kbase/src/common/mali_kbase_mmu.c line: 1240 function:kbase_mmu_report_fault_and_kill 
[14100.709724] Unhandled Page fault in AS0 at VA 0x00000002000EC1A0
[14100.709728] raw fault status 0x500003C3
[14100.709730] decoded fault status: SLAVE FAULT
[14100.709733] exception type 0xC3: TRANSLATION_FAULT
[14100.709736] access type 0x3: WRITE
[14100.709738] source id 0x5000
[14100.734958] 
[14100.736432] Mali<ERROR, BASE_JD>: In file: /home/jbmaster/work/01.LPD_OpenCL_RFS/01.arm_work_3_0_31/SEC_All_EVT0_TX013-BU-00001-r2p0-00rel0/TX013-BU-00001-r2p0-00rel0/driver/product/kernel/drivers/gpu/arm/t6xx/kbase/src/common/mali_kbase_jm.c line: 899 function:kbase_job_slot_hardstop 
[14100.761458] Issueing GPU soft-reset instead of hard stopping job due to a hardware issue
[14100.769517] ` 

【问题讨论】:

    标签: opencl prefix-sum


    【解决方案1】:

    由于 lm_sum[0][0] 不起作用,因此未分配数组的内存。你说你的GPU不支持本地内存。好吧,您正在尝试使用声明为在本地内存中的 lm_sum (__local int lm_sum[2][LSIZE + LOG_LSIZE])。

    【讨论】:

    • GPU 不支持本地内存,这是我的假设。如果我可以在左侧使用 lm_sum,我应该也可以在右侧使用它。
    • 所以你是说以下工作:lm_sum[0][0] = 2
    • 是的!这条线完美无缺。这可能看起来很奇怪,但这正在发生。
    • 如果不支持本地内存,它似乎不应该工作。此外,看起来错误与“写入”有关:[14100.709736] access type 0x3: WRITE。不管怎样,你为什么不把 lm_sum 声明为全局内存而不是本地内存?
    • 嗯,问题是访问模式和计算是使用盖子完成的。如果我将 lm_sum 更改为 global,那么我将一一更改所有这些地方,我不确定输出是否正确。
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2018-02-21
    相关资源
    最近更新 更多