代码解释:
实现的多个向量和一个向量之间的距离的计算。让kernal函数去执行开设一定的线程去做。代码详细解释如下:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdio.h>
const int N=33*1024;//修改向量的个数
const int D=256;
//const int MAX=10;
#include<sys/time.h>
#include<math.h>
#include<time.h>
#include<iostream>
using namespace std;
__global__ void MatrixMultiply(float *a,float *b,float*c,int N){
int tx=threadIdx.x+blockIdx.x*blockDim.x;//因为线程块里面是多个快的线程并发执行的。
while(tx < N) {//N 表示的是总的向量个数,每个kernal都算的是(线程块*线程数)个向量的距离
float sum = 0;
for (int k = 0; k < D; ++k) {
sum += ((a[tx * D + k] - b[k])*(a[tx * D + k] - b[k]));
}
c[tx] = sum;
tx+=blockDim.x*gridDim.x;//每次增加的是一个grid的数量,也就是一个kernal执行的线程数量
}
}
cudaError_t matrixMultiplyWithCuda(float *a, float *b, float *c, size_t size);
int main()
{
//添加计算时间的函数
struct timeval start,end;
gettimeofday(&start,NULL);
float *