//一些基本的cublas示例#include
#include
#include
#include
#include
#include
//初始化向量
void vector_init(float*a, int n) {for (int i = 0; i < n; i++) {a[i] = (float)(rand() % 100);}
}
//验证结果
void verify_result(float*a, float*b, float*c, float factor, int n) {for (int i = 0; i < n; i++) {assert(c[i] == factor * a[i] + b[i]);}
}int main() {int n = 1 << 16;//向量大小size_t bytes = n * sizeof(float);float *h_a, *h_b, *h_c;//声明向量指针float *d_a, *d_b;//分配内存h_a = (float*)malloc(bytes);h_b = (float*)malloc(bytes);h_c = (float*)malloc(bytes);cudaMalloc(&d_a, bytes);cudaMalloc(&d_b, bytes);//初始化向量vector_init(h_a, n);vector_init(h_b, n);//创建handle并初始化cublasHandle_t handle;cublasCreate_v2(&handle);//将向量复制到设备上cublasSetVector(n, sizeof(float), h_a, 1, d_a, 1);cublasSetVector(n, sizeof(float), h_b, 1, d_b, 1);//启动简单的saxpy内核const float scale = 2.0f;cublasSaxpy(handle, n, &scale, d_a, 1, d_b, 1);//复制结果向量cublasGetVector(n, sizeof(float), d_b, 1, h_c, 1);//打印结果verify_result(h_a, h_b, h_c, scale, n);//清理创建的handlecublasDestroy(handle);cudaFree(d_a);cudaFree(d_b);free(h_a);free(h_b);return 0;}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!