如何使用GPU加速三角函数计算?
时间: 2024-06-05 07:02:42 浏览: 16
根据提供的引用内容,可以使用CUDA C/C++来加速三角函数计算。以下是一个简单的例子:
```cuda
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <cuda_runtime.h>
__global__ void sin_kernel(float *in, float *out, int n) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < n) {
out[idx] = sin(in[idx]);
}
}
int main() {
int n = 1024;
float *h_in = (float*)malloc(n * sizeof(float));
float *h_out = (float*)malloc(n * sizeof(float));
for (int i = 0; i < n; i++) {
h_in[i] = i * 0.1;
}
float *d_in, *d_out;
cudaMalloc(&d_in, n * sizeof(float));
cudaMalloc(&d_out, n * sizeof(float));
cudaMemcpy(d_in, h_in, n * sizeof(float), cudaMemcpyHostToDevice);
int block_size = 256;
int grid_size = (n + block_size - 1) / block_size;
sin_kernel<<<grid_size, block_size>>>(d_in, d_out, n);
cudaMemcpy(h_out, d_out, n * sizeof(float), cudaMemcpyDeviceToHost);
for (int i = 0; i < n; i++) {
printf("sin(%f) = %f\n", h_in[i], h_out[i]);
}
cudaFree(d_in);
cudaFree(d_out);
free(h_in);
free(h_out);
return 0;
}
```
这个例子使用CUDA C/C++编写了一个简单的kernel函数,用于计算输入数组中每个元素的正弦值,并将结果存储在输出数组中。在主函数中,首先分配了主机内存和设备内存,并将输入数组从主机内存复制到设备内存。然后,计算了kernel函数的块大小和网格大小,并调用了kernel函数。最后,将输出数组从设备内存复制回主机内存,并打印结果。