я попытался скопировать матрицу [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12 ]
сохраненной в формате столбцы, как x
, сначала скопируйте его в матрицу в качестве NVIDIA GPU d_x
с использованием cublasSetMatrix
, а затем скопировать d_x
в y
используя cublasGetMatrix()
.CUDA cuBlasGetmatrix/cublasSetMatrix не работает | Объяснение аргументов
#include<stdio.h>
#include"cublas_v2.h"
int main()
{
cublasHandle_t hand;
float x[][3] = { {1,5,9} , {2,6,10} , {3,7,11} , {4,8,12} };
float y[4][3] = {};
float *d_x;
printf("X\n");
for(int i=0 ; i<4 ; i++)
{
printf("Row %i:",i+1);
for(int j = 0 ; j<3 ; j++)
{
printf(" %f",x[i][j]);
}
putchar('\n');
}
printf("Y\n");
for(int i=0 ; i<4 ; i++)
{
printf("Row %i:",i+1);
for(int j = 0 ; j<3 ; j++)
{
printf(" %f",y[i][j]);
}
putchar('\n');
}
cublasCreate(&hand);
cudaMalloc(&d_x,sizeof(d_x));
cublasSetMatrix(3,4,sizeof(float),x,3,d_x,3);
cublasGetMatrix(3,4,sizeof(float),d_x,3,y,3);
printf("X\n");
for(int i=0 ; i<4 ; i++)
{
printf("Row %i:",i+1);
for(int j = 0 ; j<3 ; j++)
{
printf(" %f",x[i][j]);
}
putchar('\n');
}
printf("Y\n");
for(int i=0 ; i<4 ; i++)
{
printf("Row %i:",i+1);
for(int j = 0 ; j<3 ; j++)
{
printf(" %f",y[i][j]);
}
putchar('\n');
}
cudaFree(d_x);
cublasDestroy(hand);
return 0;
}
Выход после копирования показывает y
заполнены 0
с.
Выполнено ли какое-либо из вызовов функции cublas
?
/или
Есть неправильные аргументы были переданы в cublas
функции?
Кроме того, пожалуйста, объясните назначение каждого аргумента для функций.
Использование GeForce GTX 650 с CUDA 6.5 на Fedora 21 x86_64.