聪明的开发者! 我是CUDA编程的初学者,我的代码有很大的问题。
以下代码是Nvidia的示例代码,我做了一些改动,以显示GPU进程比CPU进程快得多。但是,在编译这段代码后,我从CPU进程比GPU进程要快得多的结果中得到了意外的结果。
这是我对Visual Studio 2017的cuda代码。
================================================ ==========================
30001 <= int(vermogen) <= 100800
#define N 10
`___global____ void add2(int *a, int *b, int *c) {`
// GPU block from grid sector
//int tid = blockIdx.x; // checking the data of index = if you
insert min of N, you will get slow result from CPU. But if you put big number, this show much faster than CPU
// GPU thread
//int tid = threadIdx.x; // Same result as blockIdx.x
// GPU unexpected vector // Same result as above
int tid = threadIdx.x + blockIdx.x*blockDim.x;
if (tid < N) {
c[tid] = a[tid] + b[tid];
}
}
`void add(int *a, int *b, int *c) {
int tid = 0;
while (tid < N) {
c[tid] = a[tid] + b[tid];
tid += 1;
}
}
This is result of compiling this code.
我想使GPU处理比CPU处理快得多。
答案 0 :(得分:1)
运行单个操作的GPU通常实际上比CPU慢。此外,将数据发送到GPU并再次读回它需要花费时间。
GPU的优势在于它可以并行执行许多操作。
正如您将N
定义为10一样,上载和下载数据可能比在CPU上执行花费更长的时间。为了了解GPU的优势,您可以将问题的大小扩大到更大。理想情况下,在开始看到一些好处之前,您希望在每个GPU内核上至少执行几个操作。例如,使用GPU的1280个内核,您希望一次执行4000次或更多操作,以获得GPU的好处。