-CGAL_IA_MUL(-1.1, 10.1) != CGAL_IA_MUL(1.1, 10.1)

這兩天編譯的時候由於用到了CGAL庫,在用GCC或者其他編譯器的時候遇到了問題:
*Expr: -CGAL_IA_MUL(-1.1, 10.1) != CGAL_IA_MUL(1.1, 10.1)
File: /usr/include/CGAL/Interval_nt.h
Line: 209
Explanation: Wrong rounding: did you forget the -frounding-math option if you use GCC (or -fp-model strict for Intel)*

上網搜了很久,有兩個資料講的比較詳細,CGAL官網的discussion也討論過這個,在下面也列出來了.具體的原因沒看明白,解決辦法可以歸結爲:
如果在源代碼裏面包含了CGAL庫裏的頭文件(也就是調用了它實現的某個函數),這是在編譯的時候需要使用GCC的參數 -frounding-math 選項.
如果使用的nvcc編譯.cu文件,由於nvcc不是別上面的參數,此時在nvcc編譯選項後添加宏-DCGAL_DISABLE_ROUNDING_MATH_CHECK應該就沒問題了.

我是在調試修改後的caffe的時候遇到的這個問題,在正常情況下編譯和運行caffe都沒有問題,在debug模式下,編譯沒有問題,但是運行就會出現上面的錯誤,後來在reference裏面找到了這個辦法.如果有對這個問題更深入的解釋或者更好的辦法,歡迎交流~

Reference
[1]http://cgal-discuss.949826.n4.nabble.com/CGAL-Assertion-exception-CGAL-IA-MUL-1-1-10-1-CGAL-IA-MUL-1-1-10-1-td4655241.html
[2]http://cgal-discuss.949826.n4.nabble.com/frounding-math-trouble-with-GCC-4-0-1-td952635.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章