2013-06-20 77 views
1

當我創建一個緩衝區並通過clReleaseMemObject函數釋放緩衝區時,總會有一些奇怪的現象,例如,如果我將緩衝區大小設置爲128KB + 8B,那麼總是會發生異常(通常,但不是每一次,它總是在幾次正常執行後發生),但如果我將大小設置爲128KB或256KB或其他大小爲2的整數次冪,那麼clReleaseMemObject總是可以正常工作。我不太確定OpenCL中緩衝區的大小是否有限制,有人知道這個問題有什麼意義嗎?謝謝!OpenCL中的clReleaseMemObject

+0

*「那麼總會發生異常」* - 什麼*「異常」*?程序崩潰了嗎?它會拋出一個實際的C++異常嗎?它是否會導致OpenCL錯誤代碼(如果是,那是什麼錯誤代碼)?或者,您是否使用C++ API並獲取由OpenCL錯誤代碼引發的異常(在這種情況下,又是什麼錯誤代碼)?如果不是那麼頻繁,它可能是由於一些或多或少不相關的東西,比如CPU代碼中的堆損壞或其他。或者,也許你正在映射它並寫入128KB + 8B的邊界。或者這可能是一個對齊問題。 –

+0

無論如何,我想,需要更多的信息來解決這個問題。 –

回答

0

有一些與子緩衝區對齊有關的限制,但這些應該會影響以前的調用,而不是釋放mem對象的調用。其他例如CL_DEVICE_MAX_MEM_ALLOC_SIZE,但如果不遵循這些規則,有效的實現將不允許您創建緩衝區/映像。

你的問題看起來像一些緩衝區溢出。