改章节笔者在广东游玩的时候突然想到的...明天就有想写几篇关于函数说明的文章,所以回家到之后就奋笔疾书的写出来发布了
/*=======================================================================
* 第二天了,算打弄完这个去吃劈柴院的灌汤包,海上起雾了,要是不冷了,去趟只听过没去过的栈桥
* 金刚狼3上映有一段时间了吧,晚上去试试。。
=======================================================================*/
我看过cublas的说明文档,它在解讲的时候先从总体上说明cublas的基本存储则规,所以这里,我说几点,这些容内将在实际中体具习练。
上一篇中绍介了如何配置cublas的编译境环,不过要应用cublas,还需要cuda的runtime支撑,所以你需要在链接器的依附项中添加cudart.lib的外额依附。体具添加法方,与上一篇中法方相似,不再赘述。
另外,源码中应用cuda runtime函数的文件中要添加#include “cuda_runtime.h”
明天我们要验实的库函数是cublasIsamax(...),它要实现的能功是得获某个量向中第一个最大模的引索号,注意这个引索号是从1开始的。
函数型原是:cublasStatus_t cublasIsamax(cublasHandle_t handle, int n, const float *x, int incx, int *result)
参数说明:
数学上解释下算法:
此函数回返第一个i,使得 |Im(x[j])| + |Re(x[j])| 为最大值,其中i=1,...,n,并且,j=1 + (i-1)*incx.
码代我贴在了上面
#include <stdio.h> #include <stdlib.h> #include <time.h> #include "cuda_runtime.h" #include "cublas_v2.h" #define DATA_SIZE 1024 #define CUBLAS_ERROR_CHECK(sdata) if(CUBLAS_STATUS_SUCCESS!=sdata){printf("ERROR at:%s:%d\n",__FILE__,__LINE__);exit(-1);} void InitVector(float *vec, int n, int down, int up) { int i; srand((unsigned int)time(NULL)); for (i = 0; i < n; i++) { vec[i] = (float)(rand()%(up-down+1)+down); } return ; } void myIsamax(int n, float *x, int incx, int *result) { int i = 0; *result = 0; for (i = 1; i < n; i+=incx) { if(x[i]>x[*result]) *result=i; } } int main(int argc, char **argv) { cublasHandle_t cubhandle; cublasStatus_t cubStatus = CUBLAS_STATUS_SUCCESS; float *h_datax; float *d_datax; int h_result; int d_result; int data_size = DATA_SIZE; // initialize cublas resource cubStatus = cublasCreate(&cubhandle); CUBLAS_ERROR_CHECK(cubStatus) // allocate memory CPU + GPU h_datax = (float*)malloc(data_size*sizeof(float)); cudaMalloc((void**)&d_datax, data_size*sizeof(float)); // initialize cpu memory InitVector(h_datax, data_size, 0, 100); // copy cpu value to gpu memory cubStatus = cublasSetVector(data_size, sizeof(float), h_datax, 1, d_datax, 1); CUBLAS_ERROR_CHECK(cubStatus) // execute GPU version cubStatus = cublasIsamax(cubhandle, data_size, d_datax, 1, &d_result); CUBLAS_ERROR_CHECK(cubStatus) // execute CPU version myIsamax(data_size, h_datax, 1, &h_result); printf("host : h_datax[%d]=%.2f\n", h_result, h_datax[h_result]); printf("device : d_datax[%d]=%.2f\n", d_result-1, h_datax[d_result-1]); // Free memory free(h_datax);h_datax=0x0; cudaFree(d_datax);d_datax=0x0; cublasDestroy(cubhandle); getchar(); return 0; }
总结
为尽的地方,欢送大家批驳针指。
文章结束给大家分享下程序员的一些笑话语录: 这年头的互联网真是娱乐了中国,网民们从各种各样的“门”里钻来钻去,又有好多“哥”好多“帝”,值得大家品味不已……网络经典语录,关于IT与互联网,经典与您分享!