在 CUDA 5.5 中启动内核函数时发生的错误
Errors that occur when I start the kernel function in CUDA 5.5
我安装了CUDA5.5。开发环境正在使用 Visual Studio 2010 Professional。我尝试像下面这样运行源代码。但是,由于某种原因,红线被绘制到Visual Studio上的"<<<"部分。它显示错误"表达式。必需"和。如果有人发生同样的现象,请告诉我如何解决。
开发环境--------------------------------------------------------------------------
OS:Windows7 64bit
Visual Studio 2010 Professional SP1
CUDA 5.5
现象-----------------------------------------------------------------------------------------
↓源代码"<<<"的红色部分带有下划线,您将看到以下内容。但是,第三个下划线仅显示"<"。它似乎是:"需要表达。错误",然后将鼠标指针移动到红线的位置。
源代码---------------------------------------------------------------------------
#include <cuda_runtime.h>
#include <stdio.h>
#include <math.h>
#include <cuda.h>
#define N 256
__global__ void matrix_vector_multi_gpu_1_1(float *A_d, float *B_d, float *C_d){
int i,j;
for(j=0;j<N;j++){
A_d[j]=0.0F;
for(i=0;i<N;i++){
A_d[j]=A_d[j]+B_d[j*N+i]*C_d[i];
}
}
}
int main(){
int i,j;
float A[N], B[N*N], C[N];
float *A_d, *B_d, *C_d;
dim3 blocks(1,1,1);
dim3 threads(1,1,1);
for(j=0;j<N;j++){
for(i=0;i<N;i++){
B[j*N+i]=((float)j)/256.0;
}
}
for(j=0;j<N;j++){
C[j]=1.0F;
}
cudaMalloc((void**)&A_d, N*sizeof(float));
cudaMalloc((void**)&B_d, N*N*sizeof(float));
cudaMalloc((void**)&C_d, N*sizeof(float));
cudaMemcpy(A_d,A,N*sizeof(float),cudaMemcpyHostToDevice);
cudaMemcpy(B_d,B,N*N*sizeof(float),cudaMemcpyHostToDevice);
cudaMemcpy(C_d,C,N*sizeof(float),cudaMemcpyHostToDevice);
matrix_vector_multi_gpu_1_1<<<blocks,threads>>>(A_d,B_d,C_d);
cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToDevice);
for(j=0;j<N;j++){
printf("A[ %d ]=%f n",j,A[j]);
}
getchar();
cudaFree(A_d);
cudaFree(B_d);
cudaFree(C_d);
return 0;
}
发生地
你至少应该从
cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToDevice);
自
cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToHost);
更多建议
- 运行一些 CUDA 示例代码以查看您是否正确设置 CUDA。
- 确保源代码文件具有外部名称
.cu
解决cudaMemcpyDeviceToDevice
问题后,我可以编译并运行您的代码。结果得到了纠正。您的代码应该没有阻止编译的问题。
正如我在上面的评论中指出的那样,这是一个智能感知问题。在 Visual Studio 2010 CUDA 项目上启用智能感知支持的步骤总结在
为 Visual Studio 2010 CUDA 项目设置 Intellisense 支持
相关文章:
- C++内核出现Jupyter笔记本错误
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- openCL 内核返回垃圾值,尽管没有错误
- 分段错误(内核转储) C++面向对象编程
- 当 2 个线程共享同一物理内核时,具有错误共享的易失性增量在发布中的运行速度比在调试中慢
- 有关矩阵的代码错误导致分段错误(内核转储)
- 尝试在类中编译内核,出现错误"__init__() got an unexpected keyword argument 'kernel'"
- 来自简单循环的 OpenAcc 错误:内核执行期间的非法地址
- 内核.cpp在制作 kernel.o 时显示错误和 Makefile 错误
- 带有大结构变量的 CUDA 内核函数给出了错误的结果
- cuda 内核调用/传递参数中的编译错误
- 张量流错误:执行器无法创建内核。没有注册'Snapshot' 适用于 GPU 设备的 OpKernel 运行图像标签示例
- 内核调用会产生错误"error: a host function call cannot be configured"。调用有什么问题?
- 带有大型矢量大小的CUDA内核的点产品返回错误的结果
- 错误:无法列出内核事件:不可用的内核示踪剂(LTTNG)
- 将索引超出数组边界在 C++ 中的内核之前抛出异常或错误
- 使用特定输入的cuda/cublas简单内核中的数值错误
- CUDA单独的内核文件错误
- 将 stuct 数组传递给内核会导致写入时出现段错误
- 使用较大的升压矩阵时出现分段错误(内核转储)