我的代码是一个并行的implmentation,计算pi的第n位数.当我完成内核并尝试将内存复制回主机时,我得到"启动超时并被终止"错误.我使用此代码对每个cudamalloc,cudamemcpy和kernal启动进行错误检查.
std::string error = cudaGetErrorString(cudaGetLastError());
printf("%s\n", error);
Run Code Online (Sandbox Code Playgroud)
这些调用说一切都很好,直到从内核返回后的第一个cudamemcpy调用.错误发生在"cudaMemcpy(avhost,avdev,size,cudaMemcpyDeviceToHost)"行中; 在主要.任何帮助表示赞赏.
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define mul_mod(a,b,m) fmod( (double) a * (double) b, m)
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
/* return the inverse of x mod y */
__device__ int inv_mod(int x,int y) {
int q,u,v,a,c,t;
u=x;
v=y;
c=1;
a=0;
do {
q=v/u;
t=c;
c=a-q*c;
a=t;
t=u;
u=v-q*u;
v=t;
} while (u!=0);
a=a%y;
if (a<0) a=y+a;
return a;
}
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
/* return the inverse of u mod v, if v is odd …Run Code Online (Sandbox Code Playgroud) 我的monte carlo pi计算CUDA程序导致我的nvidia驱动程序在我超过500次试验和256个完整程序段时崩溃.它似乎发生在monteCarlo内核函数中.非常感谢.
#include <stdio.h>
#include <stdlib.h>
#include <cuda.h>
#include <curand.h>
#include <curand_kernel.h>
#define NUM_THREAD 256
#define NUM_BLOCK 256
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
// Function to sum an array
__global__ void reduce0(float *g_odata) {
extern __shared__ int sdata[];
// each thread loads one element from global to shared mem
unsigned int tid = threadIdx.x;
unsigned int i = blockIdx.x*blockDim.x + threadIdx.x;
sdata[tid] = g_odata[i];
__syncthreads();
// do reduction in shared mem
for (unsigned int s=1; s < blockDim.x; s *= 2) { …Run Code Online (Sandbox Code Playgroud)