求助:运行《cuda for Engineers》的dd_ld_shared案例一直出错?求指导

lugui2009 2019-03-22 04:26:05

在学习cuda的时候,运行了《CUDA for Engineers an Introduction to High-Performance Parallel Computing》的dd_ld_shared这个案例时,一直出错,这个案例主要是输入一个一维数组,然后每个数组值取其前后两值做个加加减减的运算,然后输出打印,发现打印的值都是初始值,说明这个核没有运行过。然后我在每个cuda函数加了各check_error的函数,发现运行到从显存写出数据到内存的时候,说是非法的内存访问(illeage memory之类的),那么也间接说明了那个核根本没有运算。这个案例用到了动态申请共享内存。所有代码如下:


#include <math.h>
#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 TPB 64
#define RAD 1

__global__ void ddKernel(float *d_out, const float *d_in, int size, float h) {
const int i = threadIdx.x + blockDim.x * blockIdx.x;
if (i >= size) return;

const int s_idx = threadIdx.x + RAD;
extern __shared__ float s_in[];

// Regular cells
s_in[s_idx] = d_in[i];

// Halo cells
if (threadIdx.x < RAD) {
// careful: the two lines below will also access d_in[-1] and d_in[size+1] which
// are undefined! This bug is fixed in heat_2d (cf. idxClip function)
s_in[s_idx - RAD] = d_in[i - RAD];
s_in[s_idx + blockDim.x] = d_in[i + blockDim.x];
}
__syncthreads();
d_out[i] = (s_in[s_idx-1] - 2.f*s_in[s_idx] + s_in[s_idx+1])/(h*h);
}

int main(){
const float PI = 3.1415927;
const int N = 150;
const float h = 2*PI/N;

float x[N] = {0.0};
float u[N] = {0.0};
float result_parallel[N] = {0.0};

for(int i=0;i<N;i++)
{
x[i] = 2*PI*i/N;
u[i] = sinf(x[i]);
}

float *d_in = 0;
float *d_out = 0;
HANDLE_ERROR(cudaMalloc(&d_in,N*sizeof(float)));
HANDLE_ERROR(cudaMalloc(&d_out,N*sizeof(float)));
HANDLE_ERROR(cudaMemcpy(d_in,&u[0],N*sizeof(float),cudaMemcpyHostToDevice));

const size_t smemSize = (TPB+2*RAD)*sizeof(float);

ddKernel<<<(N+TPB-1)/TPB,TPB,smemSize>>>(d_out,d_in,N,h);

HANDLE_ERROR(cudaMemcpy(result_parallel,d_out,N*sizeof(float),cudaMemcpyDeviceToHost));

HANDLE_ERROR(cudaFree(d_in));
HANDLE_ERROR(cudaFree(d_out));

FILE *outfile = fopen("results.csv", "w");
for (int i = 1; i < N - 1; ++i) {
fprintf(outfile, "%f,%f,%f,%f\n", x[i], u[i],
result_parallel[i], result_parallel[i] + u[i]);
}
fclose(outfile);

}


我用的显卡RTX2080,TITTAN V都试过,CUDA版本9.1和10.1试过。我想是不是新的显卡或者cuda将什么功能给改变了什么,望高手能指导一下,谢谢。
...全文
591 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjsjason 2019-03-23
  • 打赏
  • 举报
回复
你的核函数里面不是有一行注释吗“ // careful: ***”,关注一下
pstrunner 2019-03-23
  • 打赏
  • 举报
回复
const int s_idx = threadIdx.x + RAD;// 有没有可能为零 如果为0, 则s_in[s_idx-1]就会出现越界
wjsjason 2019-03-22
  • 打赏
  • 举报
回复
非法内存访问这个错误可能是核函数报出来的,只是在别处被你检测到了而已。导致非法内存访问的原因一般都是由于访问全局内存或者共享内存的index超出界限了,所以你可以检查一下核函数里index的计算是否正确
内容概要:本文介绍了如何利用 GitHub Copilot 辅助进行程序调试与 Bug 分析,强调 Copilot 不仅可用于代码生成,更是强大的代码分析与调试工具。文章详细阐述了 Copilot 在调试复杂问题、老旧项目维护和难以复现 Bug 场景下的优势,提出了“先分析、再修改”的四步流程:分析原因→评估风险→提出方案→修改代码,并推荐结合错误日志、用户操作等信息精准提问,提升 AI 回答质量。同时展示了如何通过 Copilot 增强调试能力,如自动加日志、异常保护、生成测试数据和性能分析。最后通过游戏拾取系统的实际案例,说明如何结构化描述问题以获得有效反馈。; 适合人群:具备一定开发经验,正在参与项目调试或维护工作的程序员,尤其是面对复杂逻辑、历史代码或难复现 Bug 的 1-3 年开发者;也适合希望提升 AI 协作能力的技术人员。; 使用场景及目标:①快速定位偶发性崩溃、数据异常等问题根源;②理解无文档或结构混乱的老代码模块;③优化调试流程,借助 AI 生成诊断建议、修复方案与测试用例;④构建更具健壮性的程序,提前发现潜在缺陷。; 阅读建议:学习者应结合自身项目中的真实问题,按照文中提供的结构化提问模板实践,逐步训练与 Copilot 的协作能力,重视问题描述的完整性与准确性,避免直接要修改代码,优先通过分析提升对系统的理解。
内容概要:本文针对高精度电流控制下的永磁同步电机(PMSM)参数辨识难题,提出一种基于粒子群优化算法(PSO)的多参数辨识模型,并在Simulink环境中完成系统级仿真实现。研究旨在克服传统控制中因电机参数(如定子电阻、交直轴电感、永磁磁链等)随温度、负载变化而失配所导致的电流控制性能下降问题。通过构建以电流跟踪误差为核心的适应度函数,利用PSO算法全局寻优能力强的特点,实现对关键电机参数的在线或离线精确辨识。文中详述了PSO算法的实现机制、参数初始化策略、收敛判据设计以及与PMSM矢量控制系统的集成方法,验证了该方案在不同运行工况下的辨识精度、收敛速度与鲁棒性,显著提升了电流环的动态响应品质与稳态控制精度。; 适合人群:具备电机驱动控制、现代控制理论及优化算法基础,熟悉MATLAB/Simulink仿真平台,从事高性能PMSM控制系统研发的研究生、高校科研人员及自动化、电力电子领域的工程师;特别适合正在开展参数自适应、智能控制算法应用等相关课题的研究者。; 使用场景及目标:①应用于高端制造装备、电动汽车驱动系统、精密伺服系统等对电流控制精度要严苛的场合;②解决实际工程中因电机温升、老化等因素引发的参数漂移问题,提升系统长期运行稳定性;③作为智能优化算法与电机控制深度融合的教学案例,帮助理解PSO在复杂非线性系统参数辨识中的应用逻辑与实现路径。; 阅读建议:建议读者结合提供的Simulink仿真模型进行复现实验,重点剖析PSO算法模块与电机控制模型的接口设计、适应度函数的构建原则及参数敏感性分析方法,可进一步尝试引入其他先进优化算法(如GWO、HHO)进行性能对比,以深入掌握不同智能算法在工程辨识问题中的适用性与优劣。

591

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧