file と の両方に出力するmatrixテンプレート クラスを作成していますstd::cout。
matrix<float> myMat;
...
myMat.cout(...) // print to std::cout
myMat.write("out.txt") // print to file
thrust::copy両方ともファイルにデータを書き込むために使用するさまざまな例を見てきたため、テンプレートとしても実装しようとしている共通の基本的な印刷機能を共有しstd::coutます。
以下は私がやったことのスケルトンですが、現在ゴミを出力しています。誰かが私が犯した可能性のあるいくつかのエラーを指摘できますか? 例えば、std::coutこんな風にうろうろしてもいいですか?
template <typename data_T> matrix {
...
template <typename out_T> int printTo(out_T &out, ...) {
data_T *start = ..., *end = ...;
...
thrust::copy(start, end, std::ostream_iterator<data_T>(out, " "));
...
}
int cout(...) {
...
printTo(std::cout, ...);
...
}
int write(char* path, ...) {
...
std::ofstream file;
file.open(path);
printTo(file, ...);
...
}
}
編集:
- に変更し
int printTo(std::ostream &out, ...) {...}ても問題は解決しません。 - 詳細情報: データを a から行列に読み込み
thrust::device_vector<T>、たとえばを使用してポインターdvecに変換します(CUBLAS ライブラリは生のポインターを使用するため)。その後、操作してから印刷したいと思います。data_Tpvecthrust::raw_pointer_cast(&dvec[0])pvec thrust::device_vector元のポインターから直接(つまり*dvec)印刷しようとしましたが、うまくいきます:thrust::copy((*dvec).begin(), (*dvec).begin() + n ...).*dvecでは、生のポインターキャストではなく、イテレーターのみを使用してコピーできるのはなぜpvecですか?