计算两个向量间的欧氏距离_求两向量距离的CUDA实现
时间: 2024-03-10 12:45:23 浏览: 140
欧氏距离的公式是:d(x,y) = sqrt((x1-y1)^2 + (x2-y2)^2 + ... + (xn-yn)^2)
以下是使用CUDA实现的代码示例:
```C++
#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>
#define N 1024
__global__ void euclideanDistance(float *x, float *y, float *result) {
int tid = blockIdx.x * blockDim.x + threadIdx.x;
if (tid < N) {
float sum = 0.0f;
for (int i = 0; i < N; i++) {
float diff = x[i] - y[i];
sum += diff * diff;
}
result[tid] = sqrt(sum);
}
}
int main() {
float *x, *y, *result;
cudaMallocManaged(&x, N * sizeof(float));
cudaMallocManaged(&y, N * sizeof(float));
cudaMallocManaged(&result, N * sizeof(float));
// initialize x and y with random values
for (int i = 0; i < N; i++) {
x[i] = static_cast<float>(rand()) / RAND_MAX;
y[i] = static_cast<float>(rand()) / RAND_MAX;
}
int blockSize = 256;
int numBlocks = (N + blockSize - 1) / blockSize;
euclideanDistance<<<numBlocks, blockSize>>>(x, y, result);
cudaDeviceSynchronize();
// print the result
for (int i = 0; i < N; i++) {
printf("Distance between x and y[%d] = %f\n", i, result[i]);
}
cudaFree(x);
cudaFree(y);
cudaFree(result);
return 0;
}
```
在这个示例中,我们使用了CUDA的并行计算能力,通过在GPU上同时计算多个距离来加速计算。首先,我们在GPU上分配了内存用于存储两个向量和计算结果。然后,我们使用随机数初始化了两个向量。接下来,我们将距离计算函数euclideanDistance定义为一个CUDA核函数,在每个线程中计算两个向量之间的距离。最后,我们在主程序中调用这个核函数,并用cudaDeviceSynchronize()等待所有线程完成计算。最后打印结果并释放内存。
请注意,由于这个示例使用了CUDA,因此需要在支持CUDA的GPU上运行。如果您的计算机不支持CUDA,或者您没有安装CUDA,那么您将无法运行这个示例。
阅读全文