![
#include "cula_lapack_device.h"
#include "iostream"
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <cuda_runtime.h>
#include <cublas_v2.h>
#include "cuda.h"
#include <math_functions.h>
#include "windows.h"
//主函数;
extern "C" void FNSGA_GPU(void const * const host_data,size_t const width,size_t const height,size_t const bands,size_t const type,int const numofduanyuan,float *time_elapsed,float *cula_time_elapsed)
{
//初始化;
cudaError_t cudaStat;
cublasStatus_t stat;
cublasHandle_t handle;
int numPixel=height*width;
int i=0;
int j=0;
int pos=0;
int* duanyuanIndex=NULL;
if (type==1||type==2||type==3)
{
float* Vt=NULL;
float* Mt;
float result=0;
int e1=0,e2=0,e3=0;
float* d_Vt=0;
stat=cublasCreate(&handle);
float* d_Mt;
float *temp_data=(float *)host_data;
duanyuanIndex=(int *)malloc(sizeof(duanyuanIndex[0])*numofduanyuan);
//申请主机端空间;
Vt=(float *)malloc(sizeof(*Vt)*bands);
Mt=(float *)malloc(sizeof(*Mt)*numPixel);
//申请设备端空间;
cudaStat=cudaMalloc((void**)&d_Vt,bands*sizeof(*Vt));
cudaStat=cudaMalloc((void**)&d_Mt,numPixel*sizeof(*Mt));
//求第一个端元;
for (int i=0;i<numPixel;i++)
{
for (int j=0;j<bands;j++)
{
pos=i+j*numPixel;
Vt[j]=temp_data[pos];
}
stat=cublasSetVector(bands,sizeof(Vt[0]),Vt,1,d_Vt,1);
stat=cublasSnrm2(handle,bands,d_Vt,1,&result);
Mt[i]=result;
}
stat=cublasSetVector(numPixel,sizeof(Mt[0]),Mt,1,d_Mt,1);
stat=cublasIsamax(handle,numPixel,d_Mt,1,&e1);
duanyuanIndex[0]=e1;
}
}
图片说明](https://img-ask.csdn.net/upload/201603/14/1457941404_844286.png)