Q
測試在CUDA
5
A
回答
5
isfinite(a)
與!isnan(a) && !isinf(a)
相同。如果x
是NaN,則isfinite(x)
和isinf(x)
都是錯誤的。
1
浮點比較不一定有效。例如,有可能是(1.0f + 3.0f != 2.0f + 2.0f)
。非常有可能,isfinite將小於特定常量的值視爲等於INFINITE或-INFINITE,而您寫的是文字相等。
1
許多GPU和SIMD單元並不完全符合IEEE754標準,尤其是對於無窮大和NaN的邊緣情況。就在昨天晚上,我注意到與我合作的特定矢量處理器聲稱∞ +1 ≠ ∞和x == x即使對於x ∈ NaN。
2
isinf()
只檢查+INFINITY
或-INFINITY
。
!isfinite()
檢查+INFINITY
,-INFINITY
或NaN
。
0
在最近的帖子Checking if a matrix contains nans or infinite values in CUDA中,Robert Crovella建議使用isinf()
來檢查CUDA中的無限值。
下面我提供了使用isinf()
和利用CUDA Thrust檢查數組中無限值的示例。也許它可以作爲其他用戶的參考。下面的例子相當於Matlab的d_result=isinf(d_data);
。這與我上面提到的問題發佈的例子不同,因爲本文檢查每個單獨的元素是無限的,而另一個檢查整個數組是否包含至少一個NaN
並且等同於Matlab的sum(isnan(d_data));
。
#include <thrust/sequence.h>
#include <thrust/device_vector.h>
#include <thrust/host_vector.h>
#include <thrust\device_vector.h>
#include <thrust\reduce.h>
#include <float.h>
// --- Operator for testing inf values
struct isinf_test {
__host__ __device__ bool operator()(const float a) const {
return isinf(a);
}
};
void main(){
const int N = 10;
thrust::host_vector<float> h_data(N);
for (int i=0; i<N; i++)
h_data[i] = rand()/RAND_MAX;
h_data[0] = FLT_MAX/FLT_MIN;
thrust::device_vector<float> d_data(h_data);
thrust::device_vector<float> d_result(h_data);
thrust::transform(d_data.begin(), d_data.end(), d_result.begin(), isinf_test());
for (int i=0; i<N; i++) {
float val = d_result[i];
printf("Isinf test for element number %i equal to %f\n",i,val);
}
getchar();
}
相關問題
- 1. CUDA,試圖在設備
- 2. 調試CUDA內核
- 3. 調試CUDA代碼
- 4. Emgu CV未檢測到CUDA
- 5. CUDA基準測試中的執行時間問題
- 6. 使用Cuda測試多個陣列的組合
- 7. 是否可以模擬GPU以進行CUDA/OpenCL單元測試?
- 8. Cuda單線程調試
- 9. GPGPU CUDA調試服務器
- 10. CUDA調試與Microsoft VS2010
- 11. 從C#調試CUDA Dll#
- 12. CUDA 5調試器5
- 13. CUDA:如何重用在多個文件中的內核(單元測試)
- 14. 如何創建makefile CUDA,使其在CPU中執行以測試CPU FLOP?
- 15. 從cmake測試存在cuda GPU的最簡單方法是什麼?
- 16. 測量CUDA程序和CUDA內核耗用時間的問題
- 17. 在測試EJB時測試EJB
- 18. 沒有測試在餘燼測試
- 19. Selenium IDE:在測試中執行測試
- 20. Rails - 在測試中測試國際化
- 21. 在測試
- 22. 在NUnit測試
- 23. 在測試
- 24. 測試在python
- 25. 測試在Python
- 26. 測試在bash
- 27. 測試在Salesforce
- 28. 在測試類
- 29. 在CUDA編程中使用基於窗體的Cuda的Cuda
- 30. Comparsion在CUDA
對於結果有什麼不同?結果是什麼?預期的結果是什麼? – 2010-12-03 22:08:33
我還不確定,但似乎是無限的比INFINITY測試更嚴格。 – hannes 2010-12-03 22:14:53
@stephen canon:授予,但Cg文檔沒有提及math.h中的INFINITY宏,這是我所詢問的區別。顯然,INFINITY宏確實像isinf一樣工作(請參閱我的編輯),因此它有一定的相關性。 – hannes 2010-12-03 22:33:55