Я попробовал следующую простую программу, используя cublasXt для умножения двух матриц. Я получаю нулевой вывод. Может ли кто-нибудь сообщить мне, почему? Мой компьютер может использовать другие библиотеки cuda, и у меня есть два графических процессора. Моя машина 64 бит, как требуется cublasXt.Невозможно использовать cublasXt
Btw, я проверил, что ни одна из вызовов функций в программе не возвращает ошибку.
#include <stdio.h>
#include "cublasXt.h"
#include <curand.h>
void fill(double* &x, long m, long n, double val) {
x = new double[m * n];
for (long i = 0; i < m; ++i) {
for (long j = 0; j < n; ++j) {
x[i * n + j] = val;
}
}
}
int main() {
cublasXtHandle_t xt_;
cublasXtCreate(&xt_);
double *A, *B, *C;
long m = 10, n = 10, k = 20;
fill(A, m, k, 0.2);
fill(B, k, n, 0.3);
fill(C, m, n, 0.0);
double alpha = 1.0;
double beta = 0.0;
cublasXtDgemm(xt_, CUBLAS_OP_N, CUBLAS_OP_N,
m, n, k, &alpha, A, m, B, k, &beta, C, m
);
cudaDeviceSynchronize();
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
printf ("%lf ", C[i *n + j]);
}
printf ("\n");
}
cublasXtDestroy(xt_);
return 0;
}
Я считаю, что вам все еще нужно управлять памятью для устройства. Я не думаю, что CUBLAS автоматически выделяет, копирует и освобождает память для устройства. Посмотрите образцы образцов cuda/7_CUDALibraries/simpleCUBLAS/simpleCUBLAS.cpp –
cublasXt отличается от обычных куб. Как только вы укажете используемые устройства, он обрабатывает распределения. –
@ChristianSarofeen: вы правы, он не освобождает память хоста для меня. Я просто упрощаю это, задавая вопрос. – shaoyl85