我有一个内核来根据它们的位置(对角线或非对角线)计算矩阵的不同元素.在计算大小矩阵时,内核按预期工作:
但是,当我尝试计算大小为2383 x 2383的矩阵时,内核崩溃了.具体来说,在cudaMemcpy()行上抛出错误"Unspecified launch failure"以将结果从设备返回到主机.从研究中我知道这个错误通常出现在超出内存访问的情况下(例如在数组中),然而,我没有得到的是它适用于前三个案例但不适用于2383 x 2383例.内核代码如下所示:
__global__ void createYBus(float *R, float *X, float *B, int numberOfBuses, int numberOfBranches, int *fromBus, int *toBus, cuComplex *y)
{
int rowIdx = blockIdx.y*blockDim.y + threadIdx.y;
int colIdx = blockIdx.x*blockDim.x + threadIdx.x;
int index = rowIdx*numberOfBuses + colIdx;
if (rowIdx<numberOfBuses && colIdx<numberOfBuses)
{
for (int i=0; i<numberOfBranches; ++i)
{
if (rowIdx==fromBus[i] && colIdx==fromBus[i]) { //diagonal element
y[index] = cuCaddf(y[index], make_cuComplex((R[i]/((R[i]*R[i])+(X[i]*X[i]))), (-(X[i]/((R[i]*R[i])+(X[i]*X[i])))+ (B[i]/2))));
}
if …Run Code Online (Sandbox Code Playgroud) cuda ×1