Ptx程序集由于错误而中止
Ptx assembly aborted due to errors
我曾尝试在MS Visual Studio 2012中的C/CUDA 5.5上编写CSR矩阵和向量相乘的程序,但遇到了ptx错误。我的代码清单:
__global__ void multKernelSymm(double* s, double* u, double* val, int* rowPtr, int* colInd)
{
int l = 0, jl, i;
int idx = blockDim.x*blockIdx.x;
l = rowPtr[idx] - 1;
for ( i = 0; i < (rowPtr[idx + 1] - rowPtr[idx]); i++){
jl = colInd[l] - 1;
s[idx] = s[idx] + val[l] * u[jl];
l+=1;
}
l = 0;
l = rowPtr[idx] - 1;
for (int i = 0; i < (rowPtr[idx + 1] - rowPtr[idx]); i++){
jl = colInd[l] - 1;
if(jl > idx)
atomicAdd(&s[jl], val[l] * u[idx]);
//s[jl] = s[jl] + val[l] * u[idx];
l+=1;
}
}
__device__ double atomicAdd(double* address, double val)
{
unsigned long long int* address_as_ull =
(unsigned long long int*)address;
unsigned long long int old = *address_as_ull, assumed;
do {
assumed = old;
old = atomicCAS(address_as_ull, assumed, __double_as_longlong(val + __longlong_as_double(assumed)));
} while (assumed != old);
return __longlong_as_double(old);
}
我在VS:中得到的
C:UsersДмитрийDocumentsVisual Studio 2012Projectsmatrix mult simplematrix mult simple>"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv6.0binnvcc.exe" -gencode=arch=compute_20,code="sm_20,compute_20" --use-local-env --cl-version 2012 -ccbin "C:Program Files (x86)Microsoft Visual Studio 11.0VCbinx86_amd64" -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv6.0include" -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv6.0include" -G --keep-dir x64Debug -maxrregcount=0 --machine 64 --compile -cudart static -g -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o x64Debugkernel.cu.obj "C:UsersДмитрийDocumentsVisual Studio 2012Projectsmatrix mult simplematrix mult simplekernel.cu"
1> ptxas C:/Users/AACE~1/AppData/Local/Temp/tmpxft_00001b88_00000000-4_kernel.ptx, line 479; : fatal error : Parsing error near '-': syntax error
1>ptxas : fatal error : Ptx assembly aborted due to errors
1> kernel.cu
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V110BuildCustomizationsCUDA 6.0.targets(597,9): error MSB3721: The command ""C:Program FilesNVIDIA GPU Computing ToolkitCUDAv6.0binnvcc.exe" -gencode=arch=compute_20,code="sm_20,compute_20" --use-local-env --cl-version 2012 -ccbin "C:Program Files (x86)Microsoft Visual Studio 11.0VCbinx86_amd64" -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv6.0include" -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv6.0include" -G --keep-dir x64Debug -maxrregcount=0 --machine 64 --compile -cudart static -g -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o x64Debugkernel.cu.obj "C:UsersДмитрийDocumentsVisual Studio 2012Projectsmatrix mult simplematrix mult simplekernel.cu"" exited with code -1.
1>
> ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
我能修吗?
我通过做3个更改来编译您的代码:
- 如@PaulR所示,在调用自定义
atomicAdd
函数时,请删除double
关键字 -
atomicAdd
的第一个参数应该是指向要更新的地址(要将值添加到的地址)的指针。所以你的函数调用应该是这样的:atomicAdd(&(s[jl]), val[l] * u[idx]);
-
最后,将自定义
atomicAdd
函数的声明和定义移动到内核定义之前的。
通过这些更改,我可以编译您的代码。
相关文章:
- 内联程序集printf将整数解释为地址
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 具有外部"c"和程序集的未定义函数
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 64 位进程中的 AnyCPU C# DLL 无法引用 64 位C++ DLL(给出错误:无法加载文件或程序集)
- 在.NET Core 3.1中运行托管C++/CLI程序集时,映像格式错误
- 使用程序集嵌入数据时"Undefined reference"错误,使用适用于窗口的 mingw-w64 编译(COFF 而不是 ELF)
- 混合模式程序集是针对版本 'v2.0.50727' 构建的 ...本机C++/Visual C++/C# 项目错误
- C++宏程序集错误
- C++外部程序集:我的代码中的错误在哪里
- 从C++调用 dotnet 程序集方法将返回错误COR_E_SAFEARRAYTYPEMISMATCH
- 从C++COM dll生成的互操作程序集出现生成引用错误
- 内联程序集发生Clang错误
- gcc-编译x386程序集代码错误
- 从程序集调用 Win32 的睡眠函数会产生访问冲突错误
- tfs 生成错误 无法注册程序集"MyAssembly.dll" - 访问被拒绝
- Ptx程序集由于错误而中止
- GCC内联程序集错误:无法识别块程序集操作数
- GCC 内联程序集错误:无法获取"this"的地址,这是一个右值表达式
- GCC 内联程序集错误:表达式后的垃圾"(%ebp)+4"