gpt4 book ai didi

cuda - 使用 CUDA 显示 GPU 优于 CPU 的最简单示例

转载 作者:行者123 更新时间:2023-12-03 10:13:03 44 4
gpt4 key购买 nike

我正在寻找可以为 CPU(使用 g++)和 GPU(使用 nvcc)编写的最简洁的代码量,GPU 的性能始终优于 CPU。任何类型的算法都是可以接受的。

澄清一下:我实际上是在寻找两个短代码块,一个用于 CPU(在 g++ 中使用 C++),另一个用于 GPU(在 nvcc 中使用 C++),GPU 的性能优于该代码块。最好以秒或毫秒为单位。可能的最短代码对。

最佳答案

作为引用,我用时间测量做了一个类似的例子。使用 GTX 660,GPU 加速为 24 倍,其中除了实际计算之外,它的操作还包括数据传输。

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>
#include <time.h>

#define N (1024*1024)
#define M (10000)
#define THREADS_PER_BLOCK 1024

void serial_add(double *a, double *b, double *c, int n, int m)
{
for(int index=0;index<n;index++)
{
for(int j=0;j<m;j++)
{
c[index] = a[index]*a[index] + b[index]*b[index];
}
}
}

__global__ void vector_add(double *a, double *b, double *c)
{
int index = blockIdx.x * blockDim.x + threadIdx.x;
for(int j=0;j<M;j++)
{
c[index] = a[index]*a[index] + b[index]*b[index];
}
}

int main()
{
clock_t start,end;

double *a, *b, *c;
int size = N * sizeof( double );

a = (double *)malloc( size );
b = (double *)malloc( size );
c = (double *)malloc( size );

for( int i = 0; i < N; i++ )
{
a[i] = b[i] = i;
c[i] = 0;
}

start = clock();
serial_add(a, b, c, N, M);

printf( "c[0] = %d\n",0,c[0] );
printf( "c[%d] = %d\n",N-1, c[N-1] );

end = clock();

float time1 = ((float)(end-start))/CLOCKS_PER_SEC;
printf("Serial: %f seconds\n",time1);

start = clock();
double *d_a, *d_b, *d_c;


cudaMalloc( (void **) &d_a, size );
cudaMalloc( (void **) &d_b, size );
cudaMalloc( (void **) &d_c, size );


cudaMemcpy( d_a, a, size, cudaMemcpyHostToDevice );
cudaMemcpy( d_b, b, size, cudaMemcpyHostToDevice );

vector_add<<< (N + (THREADS_PER_BLOCK-1)) / THREADS_PER_BLOCK, THREADS_PER_BLOCK >>>( d_a, d_b, d_c );

cudaMemcpy( c, d_c, size, cudaMemcpyDeviceToHost );


printf( "c[0] = %d\n",0,c[0] );
printf( "c[%d] = %d\n",N-1, c[N-1] );


free(a);
free(b);
free(c);
cudaFree( d_a );
cudaFree( d_b );
cudaFree( d_c );

end = clock();
float time2 = ((float)(end-start))/CLOCKS_PER_SEC;
printf("CUDA: %f seconds, Speedup: %f\n",time2, time1/time2);

return 0;
}

关于cuda - 使用 CUDA 显示 GPU 优于 CPU 的最简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663343/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com