我最近正在开发一个Windows程序,当滚动浏览生产环境中的大量项目时,它有时会变得无法响应.当然它在我的桌面上工作正常.生产环境是:
值得注意的是当进程终止时生成的Dr Watson堆栈跟踪:
State Dump for Thread Id 0xef4
eax=00e3fff8 ebx=000000a0 ecx=00e00000 edx=00000000 esi=0003fff8 edi=00e40000
eip=00b920c2 esp=0012bcac ebp=00000000 iopl=0 nv up ei ng nz na pe cy
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000283
\system32\nview.dll -
function: nview!NVLoadDatabase
00b920a8 c80b0600 enter 0x60b,0x0
00b920ac 83c30f add ebx,0xf
00b920af 33f6 xor esi,esi
00b920b1 03f9 add edi,ecx
00b920b3 83e3f8 and ebx,0xfffffff8
00b920b6 3bcf cmp ecx,edi
00b920b8 89742414 mov [esp+0x14],esi
00b920bc 734c jnb nview!NVLoadDatabase+0xcaf (00b9210a)
00b920be 8bc1 mov eax,ecx
00b920c0 8b10 … 使用glDrawElements()时,我遇到了一个可疑的错误.我正在尝试渲染简单的图元(主要是矩形)以加快文本的绘制等等,但是当我调用glDrawElements()时,整个屏幕闪烁黑色(不仅仅是我的窗口区域)一帧左右.下一帧它变回与以前相同的"Windows颜色".所以它闪烁了几秒钟,最后在一个消息框中说
The NVIDIA OpenGL Driver encountered an unrecoverable error
and must close this application.
Error 12
Run Code Online (Sandbox Code Playgroud)
在调用glDrawElements()之前,我需要重置GL的任何设置吗?我知道这不是一些悬空的glEnableClientState(),我检查了它(我曾经有过其中一个,但后来glDrawElements()崩溃了).
想到它,它几乎看起来像一些后台缓冲区错误...有什么想法尝试?
如何在NVIDIA GPU中实现NVIDIA PhysX引擎:它是一个协处理器还是物理算法被实现为要在GPU管道中执行的片段程序?
当我将程序与CUDA并行时,我还没有达到阶段,但我使用C++而不是C而且我担心如果我的程序不能用CUDA编译!
有人可以找到这笔交易的证据.
我试图获取cuFFT库调用的分析数据,例如plan和exec.我正在使用nvprof(命令行分析工具),选项为"--print-api-trace".除了cuFFT apis之外,它打印所有api的时间.是否需要更改任何标志以获取cuFFT分析数据?或者我需要使用事件并测量自己?
我想确定形式x ^ 2 + 1是多少个素数,1 <= x <= 10 ^ 7.我只想将它与CUDA并行化并检查差异,所以我使用了普通的素数检查,而我并不关心改进它的算法.
我安排了一个网格,并在我的间隔上滑雪,将结果记录在每个块的共享内存中,对每个块上的gpu执行减少,最后执行cpu减少以获得最终结果.
我的问题是当我更改每个块中的块数和线程数时,输出结果会发生变化.我无法解释的另一件事是,对于每个块8个块和2048个线程的配置,代码运行在100ms以下,但是当我将线程数减少到1024并且块数增加一倍时,代码将导致超时在memcpy从设备到主机!! 我该如何解释这种行为以及正确性在哪里出现问题?
我正在使用GTX 480 nvidia gpu.
我的代码是:
#include <stdio.h>
static void HandleError( cudaError_t err, const char *file, int line )
{
if (err != cudaSuccess) {
printf( "%s in %s at line %d\n", cudaGetErrorString( err ), file, line );
exit( EXIT_FAILURE );
}
}
#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ ))
#define N 10000000
#define BLOCKS 8
#define THREADS 2048
__device__ int isprime(int x)
{
long …Run Code Online (Sandbox Code Playgroud) 我们知道Fermi仅支持与GPU的单一连接,如下所示:http://on-demand.gputechconf.com/gtc-express/2011/presentations/StreamsAndConcurrencyWebinar.pdf
Fermi架构可以同时支持
GPU上最多16个CUDA内核
正如我们所知,Hyper-Q允许来自多个CUDA流,MPI流程或流程中的线程的多达32个同时连接:http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-架构Whitepaper.pdf
但是在Kepler CC3.0/3.5,16或32(STREAM)上同时支持多少内核?
这本书引用:
在CUDA中,
__syncthreads()语句(如果存在)必须由块中的所有线程执行.当a__syncthreads()放在一个if语句中时,块中的所有线程都会执行包含__syncthreads()或不包含它们的路径.对于if-then-else语句,如果每个路径都有一个__syncthreads()语句,则块中的所有线程都在路径__syncthreads()上执行,或者所有线程then都执行该else路径.这两个__syncthreads()是不同的屏障同步点.如果块中的线程执行then路径而另一个线程执行else路径,则它们将在不同的屏障同步点处等待.他们最终会永远等待对方.程序员有责任编写代码以满足这些要求.
没有给出例子if和if-else-then案例,所以我无法理解这个概念.请用简单的话语解释我的情况.
PS:我是并行编程和CUDA的初学者.
提前致谢 .
考虑以下主机功能:
uint64_t * SomeDevPtr =...
/* Where SomeDevPtr is a pointer pointed to some device memory address allocated by cudaMalloc(); */
uint32_t * SomeDevIntPtr = reintepret_cast<uint32_t *>(SomeDevPtr);
Run Code Online (Sandbox Code Playgroud)
由于该功能,cudaMalloc将automatcially fullfill一些aligment要求(我认为它对准一些128字节存储器边界),因此,我认为无论是SomeDevIntPtr和SomeDevPtr应在GPU的全局内存确切相同的物理内存地址开始,我是正确的这一?
我只是想确定一下,因为我编写的一些函数依赖于它.
我是GPU编程的新手(而且在C中相当生疏)所以这可能是一个相当基本的问题,我的代码中有一个明显的错误.我想要做的是采用二维数组并找到每一行的每列的总和.所以,如果我有一个包含以下内容的2D数组:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18
Run Code Online (Sandbox Code Playgroud)
我想得到一个包含以下内容的数组:
45
45
90
Run Code Online (Sandbox Code Playgroud)
到目前为止我的代码没有返回正确的输出,我不知道为什么.我猜这是因为我没有正确处理内核中的索引.但是我可能没有正确使用内存,因为我从一个过于简化的1维示例中进行了调整,而CUDA编程指南(第3.2.2节)对于1之间的初学者来说是一个相当大且不太好描述的跳转和2维数组.
我的错误尝试:
#include <stdio.h>
#include <stdlib.h>
// start with a small array to test
#define ROW 3
#define COL 10
__global__ void collapse( int *a, int *c){
/*
Sum along the columns for each row of the 2D array.
*/
int total = …Run Code Online (Sandbox Code Playgroud)