0
我正在編寫一個CUDA內核來執行哈希。一旦我得到輸入,我首先嚐試使用預定義的散列桶大小對它進行散列,如果發生溢出,則在散列期間,然後我需要使用更大的桶大小重新執行散列。所以我想知道是否有內置的cuda函數可以讓我在發生桶溢出時向主機代碼報告錯誤。我知道我可以將某些東西寫入預定義的內存位置,然後讓主機代碼讀取它,但如果可用,我寧願在構建的基元中使用一些。有沒有內置的CUDA函數允許CUDA內核向主機代碼報告錯誤?
我正在編寫一個CUDA內核來執行哈希。一旦我得到輸入,我首先嚐試使用預定義的散列桶大小對它進行散列,如果發生溢出,則在散列期間,然後我需要使用更大的桶大小重新執行散列。所以我想知道是否有內置的cuda函數可以讓我在發生桶溢出時向主機代碼報告錯誤。我知道我可以將某些東西寫入預定義的內存位置,然後讓主機代碼讀取它,但如果可用,我寧願在構建的基元中使用一些。有沒有內置的CUDA函數允許CUDA內核向主機代碼報告錯誤?
CUDA的assertion support在所有固定支持的硬件上(sm_20和更新版本)。根據文檔,這樣做是合法的:
__global__ void testAssert(void)
{
int is_one = 1;
int should_be_one = 0;
// This will have no effect
assert(is_one);
// This will halt kernel execution
assert(should_be_one);
}
您可能能夠利用這一點將錯誤情況發信號給主叫主機代碼。
我不認爲有任何沒有。正如你所說,你必須在某處寫點東西,然後從主機上讀取它。 – leo