标签: gpu-programming

如何在GPU中将GPU用作第二个处理器?

这个问题说的都是真的.我希望我不必在c ++ .dll中编写代码,然后从托管代码中调用它.

.net gpu-programming

7
推荐指数
1
解决办法
5891
查看次数

CUDA矩阵乘法中断了大型矩阵

我有以下矩阵乘法代码,使用CUDA 3.2和VS 2008实现.我在Windows server 2008 r2 enterprise上运行.我正在运行Nvidia GTX 480.以下代码适用于"宽度"(矩阵宽度)的值高达约2500左右.

int size = Width*Width*sizeof(float);
float* Md, *Nd, *Pd;
cudaError_t err = cudaSuccess;

//Allocate Device Memory for M, N and P
err = cudaMalloc((void**)&Md, size);
err = cudaMalloc((void**)&Nd, size);
err = cudaMalloc((void**)&Pd, size);

//Copy Matrix from Host Memory to Device Memory
err = cudaMemcpy(Md, M, size, cudaMemcpyHostToDevice);
err = cudaMemcpy(Nd, N, size, cudaMemcpyHostToDevice);

//Setup the execution configuration
dim3 dimBlock(TileWidth, TileWidth, 1);
dim3 dimGrid(ceil((float)(Width)/TileWidth), ceil((float)(Width)/TileWidth), 1);

MatrixMultiplicationMultiBlock_Kernel<<<dimGrid, dimBlock>>>(Md, Nd, Pd, Width);

err = …
Run Code Online (Sandbox Code Playgroud)

c cuda gpu nvidia gpu-programming

7
推荐指数
1
解决办法
6834
查看次数

限制(amp)比CUDA内核代码更具​​限制性吗?

在C++ AMP中,内核函数或lambda标记为restrict(amp),这对C++的允许子集(此处列出)施加了严格的限制.CUDA是否允许内核函数中C或C++子集的更多自由?

parallel-processing cuda gpu-programming c++-amp

7
推荐指数
1
解决办法
900
查看次数

如何从主机代码中断或取消CUDA内核

我正在使用CUDA,我试图阻止我的内核工作(即终止所有正在运行的线程)在某个if块被命中后.我怎样才能做到这一点?我真的被困在这里.

c++ cuda gpu nvidia gpu-programming

7
推荐指数
2
解决办法
3649
查看次数

关于C++ /分布式系统/网络中项目的建议

我想开展一个长达2-3个月的项目(全职),涉及用C++编码,并与网络(协议栈)相关.我正在考虑编写自己的网络堆栈,但这看起来并不那么有趣.很高兴找到一个为分布式系统/ GPU实现类似tcp/ip的堆栈的想法,就网络性能而言更好.我一直在谷歌搜索3个小时,但没有看到任何看起来值得花2个月的东西.像netperf这样的开源项目似乎超出了我的范围.我真的很喜欢一个相对较小的独立项目,我可以按照自己的步调进行工作.这个项目的目的是利用我的项目空闲时间(我可能稍后在开源许可下发布),并获得C++,网络,并行编程,GPU,分布式系统等方面的专业知识和实践经验.

我似乎在找到想法时遇到了障碍(或者我可能不太清楚我究竟该做什么).所以任何建议都会非常感激.谢谢!

c++ networking gpu distributed-computing gpu-programming

6
推荐指数
1
解决办法
2356
查看次数

GPU用于科学计算的准确性

一位电气工程师最近告诫我不要使用GPU进行科学计算(例如,准确性非常重要),因为没有像CPU那样的硬件保护措施.这是真的,如果是这样,典型硬件中的问题有多常见/实质性?

gpu gpu-programming

6
推荐指数
1
解决办法
2774
查看次数

如何衡量GPU与CPU的性能?哪个时间测量功能?

需要使用哪些库或函数来客观地比较CPU和GPU性能?为了准确评估,应该警告什么警告

我使用Ubuntu平台和具有计算能力的设备2.1并使用CUDA 5工具包.

time cuda measurement gpu-programming

6
推荐指数
1
解决办法
2924
查看次数

是否值得通过共享内存传递内核参数?

假设我们有一个数组int * data,每个线程将访问该数组的一个元素.由于此数组将在所有线程之间共享,因此它将保存在全局内存中.

让我们创建一个测试内核:

 __global__ void test(int *data, int a, int b, int c){ ... }
Run Code Online (Sandbox Code Playgroud)

我确定data数组将在全局内存中,因为我使用了为这个数组分配了内存cudaMalloc.至于其他变量,我已经看到一些传递整数而不分配内存的例子,立即到内核函数.在我的情况下,这些变量是a bc.

如果我没有记错的话,即使我们不直接调用cudaMalloc分配4个字节为每三个整数,CUDA会自动为我们做,所以最后的变数a bc将在全球内存中分配.

现在这些变量只是辅助的,线程只读取它们而没有别的.

我的问题是,将这些变量传输到共享内存不是更好吗?

我想如果我们有例如10带有1024线程的块,我们需要10*3 = 30读取4字节以便将数字存储在每个块的共享内存中.

如果没有共享内存,并且每个线程必须读取所有这三个变量一次,那么全局内存读取的总量将1024*10*3 = 30720是非常低效的.

现在,这里的问题是,我有点新的CUDA和我不知道是否有可能转移内存变量a bc每个块的共享内存,而不必每个线程从全局存储器读取这些变量并加载它们到共享内存,所以最终全局内存读取的总量将是1024*10*3 = 30720和否10*3 = 30.

在以下网站上有这个例子:

 __global__ void staticReverse(int *d, int n)
 {
    __shared__ …
Run Code Online (Sandbox Code Playgroud)

cuda gpu-programming gpu-shared-memory

6
推荐指数
1
解决办法
2448
查看次数

同时使用2个GPU调用cudaMalloc时性能不佳

我有一个应用程序,我在用户系统上的GPU之间分配处理负载.基本上,每个GPU都有CPU线程,当主应用程序线程定期触发时,它会启动GPU处理间隔.

考虑以下图像(使用NVIDIA的CUDA探查器工具生成)作为GPU处理间隔的示例- 此处应用程序使用单个GPU.

在此输入图像描述

正如您所看到的,两个排序操作消耗了大部分GPU处理时间,而我正在使用Thrust库(thrust :: sort_by_key).此外,看起来push :: sort_by_key会在启动实际排序之前调用几个cudaMallocs.

现在考虑应用程序在两个GPU上分散处理负载的相同处理间隔:

在此输入图像描述

在完美的世界中,您可以预期2 GPU处理间隔恰好是单GPU的一半(因为每个GPU的工作量只有一半).正如你所看到的,部分原因并非如此,因为cudaMallocs由于某种争用问题而被同时调用(有时长2-3倍)时似乎需要更长的时间.我不明白为什么会出现这种情况,因为2个GPU的内存分配空间是完全独立的,因此cudaMalloc上不应该有系统范围的锁定 - 每GPU锁定会更合理.

为了证明我的假设问题是同时使用cudaMalloc调用,我创建了一个非常简单的程序,它有两个CPU线程(每个GPU),每个线程多次调用cudaMalloc.我首先运行此程序,以便单独的线程不会同时调用cudaMalloc:

在此输入图像描述

你看,每次分配需要大约175微秒.接下来,我用同时调用cudaMalloc的线程运行程序:

在此输入图像描述

在这里,每个呼叫比前一个案例花了大约538微秒或3倍!毋庸置疑,这极大地减慢了我的应用程序,并且理所当然,只有2个以上的GPU才会使问题变得更糟.

我在Linux和Windows上注意到了这种行为.在Linux上,我使用的是Nvidia驱动程序版本319.60,而在Windows上我使用的是327.23版本.我正在使用CUDA工具包5.5.

可能的原因: 我在这些测试中使用的是GTX 690.这张卡基本上是2 680个GPU,安装在同一个单元中.这是我运行的唯一"多GPU"设置,所以cudaMalloc问题可能与690的2 GPU之间的硬件依赖性有关吗?

parallel-processing cuda gpu-programming multi-gpu thrust

6
推荐指数
2
解决办法
1514
查看次数

cuDNN库是否适用于所有nvidia图形卡?

我在我的项目中研究了cuDNN库的使用.但我的nvidia显卡有点旧.

如果cuDNN适用于所有图形卡,我在网上搜索.即使在他们的主页中我也找不到.

哪些nvidia显卡与cuDNN兼容?

cuda gpu gpgpu nvidia gpu-programming

6
推荐指数
2
解决办法
4439
查看次数