我目前正在與CUSPARSE合作。我遇到了麻煩,因爲我不知道如何打印複雜的數字。例如,當我寫:如何使用CUSPARSE中的複數?
cuComplex a;
a.x = 1.2;
a.y = 2.2;
如何打印varable a? 我試過了:
cout < < a;
但它不起作用。
我目前正在與CUSPARSE合作。我遇到了麻煩,因爲我不知道如何打印複雜的數字。例如,當我寫:如何使用CUSPARSE中的複數?
cuComplex a;
a.x = 1.2;
a.y = 2.2;
如何打印varable a? 我試過了:
cout < < a;
但它不起作用。
您需要將<<
運算符重載爲cuComplex和cuDoubleComplex數據類型。
std::ostream& operator<<(std::ostream& strm, const cuComplex& in)
{
char sgn[2] = "+-"
strm << in.x << sgn[in.y < 0] << " i"<< std::abs(in.y);
return strm;
}
可以在std::complex
做同樣cuDoubleComplex
的數據是相同的一個cuComplex相應的數據,即你可以reinterpret_cast
指針(因此陣列,太)的一種類型的其他 - 它的工作原理在實踐中,我認爲,用C++ 11實際上保證,你可以像這樣的測試:
namespace check_stdComplexdouble_to_cuDoubleComplex_binary_compatibility{
using std::complex;
const complex<double> testarr[] = { complex<double>(0.,.5)
, complex<double>(1.,1.5) };
const cuDoubleComplex* cucomplexd
= reinterpret_cast<const cuDoubleComplex*>(testarr);
auto tester() -> bool {
assert(cuCreal(cucomplexd[0])==0. && cuCimag(cucomplexd[0])==.5
&& cuCreal(cucomplexd[1])==1. && cuCimag(cucomplexd[1])==1.5);
return true;
}
const bool ok = tester();
bool good(){return ok;}
};
如果你調用的應該讀/寫從/向std::complex<float>
一個CUBLAS函數,你可以給它一個reinterpret_cast
ed指針,例如
std::complex<double> result;
xhandle->cublasstat = yhandle->cublasstat
= cublasZdotc(*xhandle->cublashandle
, xhandle->vect_dimension
, xhandle->vector, 1
, yhandle->vector, 1
, reinterpret_cast<cuDoubleComplex*>(&result));
非常感謝。 – 2012-03-12 19:32:49
你可以做到這一點,但坦率地說,我不會讓那些簡單的低層次的未被抽象類型靠近'ostream :: operator <<'。 – leftaroundabout 2012-03-12 19:52:27