Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int N = 2500;
- int N2= N*N;
- float a = 2.f;
- float b = 1.f;
- float* gpuMatrxA, * matrxA, * matrxB, * gpuMatrxB, *matrxC, *gpuMatrxC;
- cudaEventCreate(&start);
- cudaEventCreate(&stop);
- //выделение закрепленной (pinned) памяти, особый участок памяти на ОЗУ
- cudaMallocHost((void**)&matrxA, N2 * sizeof(float));
- cudaMallocHost((void**)&matrxB, N2 * sizeof(float));
- cudaMallocHost((void**)&matrxC, N2 * sizeof(float));
- // выделение на девайсе глобальной памяти
- cudaMalloc((void**)&gpuMatrxA, N2 * sizeof(float));
- cudaMalloc((void**)&gpuMatrxB, N2 * sizeof(float));
- cudaMalloc((void**)&gpuMatrxC, N2 * sizeof(float));
- for(int i = 0; i < N2; i++){
- matrxA[i] = (float)i;
- matrxB[i] = 0.55f;
- }
- //копирование на девайс//хост то вектор
- cublasSetMatrix(N, N, sizeof(float), (void*)matrixA, N, (void*)gpuMatrxA, N);
- cublasSetMatrix(N, N, sizeof(float), (void*)matrixB, N, (void*)gpuMatrxB, N);
- cublasSetMatrix(N, N, sizeof(float), (void*)matrixC, N, (void*)gpuMatrxC, N);
- //дескриптор cublas
- cublasHandle_t cuHandle;
- cublasCreate(&cuHandle);
- //CUBLAS_OP_T - transp matrix;
- cublasSgemm(cuHandle, CUBLAS_OP_N, CUBLAS_OP_N, N, N, N, &a, gpuMatrxA, N, gpuMatrxB, N, &b, gpuMatrxC, N);
- //копирование с девайса
- cublasGetMatrix(N, N, sizeof(float), (void*)gpuMatrxA, N, (void*)matrxA, N);
- cublasGetMatrix(N, N, sizeof(float), (void*)gpuMatrxB, N, (void*)matrxB, N);
- cublasGetMatrix(N, N, sizeof(float), (void*)gpuMatrxC, N, (void*)matrxC, N);
- cout << "Matrix A equal" << endl;
- outputMatrix(matrxA, N);
- cout << endl;
- cout << "Matrix B equal" << endl;
- outputMatrix(matrxB, N);
- cout << endl;
- cout << "Matrix C equal" << endl;
- outputMatrix(matrxC, N);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement