Cuda 在CUSPARSE中如何处理复数?

Cuda 在CUSPARSE中如何处理复数?,cuda,Cuda,我目前正在与CUSPARSE合作。我遇到了麻烦,因为我不知道如何打印复数。例如,当我写作时: 复合物a a、 x=1.2 a、 y=2.2 如何打印变量a? 我试过: cout您将需要重载您将需要重载std::complex中的数据与cuComplex中的相应数据相同,即,您可以重新解释从一种类型到另一种类型的指针(因此也包括数组)我认为,它在实践中起作用,实际上,由C++11保证,您可以这样测试它: namespace check_stdComplexdouble_to_cuDoubleCom

我目前正在与CUSPARSE合作。我遇到了麻烦,因为我不知道如何打印复数。例如,当我写作时:

复合物a

a、 x=1.2

a、 y=2.2

如何打印变量a? 我试过:


cout您将需要重载
您将需要重载
std::complex中的数据与cuComplex中的相应数据相同,即,您可以
重新解释从一种类型到另一种类型的指针(因此也包括数组)
我认为,它在实践中起作用,实际上,由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
中的数据与cuComplex中的相应数据相同,即,您可以
将一种类型的指针(以及因此而产生的数组)重新解释为另一种类型–它在实践中起作用,我想,实际上是由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;}
};

您可以这样做,但坦率地说,我不会让那些普通的低级未抽象类型靠近
ostream::operator您可以这样做,但坦率地说,我不会让那些普通的低级未抽象类型靠近
ostream::operator
  std::complex<double> result;
  xhandle->cublasstat = yhandle->cublasstat
     = cublasZdotc( *xhandle->cublashandle
                  , xhandle->vect_dimension
                  , xhandle->vector, 1
                  , yhandle->vector, 1
                  , reinterpret_cast<cuDoubleComplex*>(&result) );