如何构建包含CUDA功能和C 模板功能的代码
How to build code containing cuda function and c++ template function
代码如下:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <list>
#include <iterator>
#include <stdio.h>
template<class T> void InsertValueNode(std::list<T> &ValueList,T NewValue)
{
std::list<T>::iterator itCurVal = ValueList.begin();
while(itCurVal != ValueList.end())
{
if(NewValue < (*itCurVal))
break;
itCurVal++;
}
std::insert_iterator< std::list<T> > itNewNode(ValueList, itCurVal);
*itNewNode = NewValue;
}
__global__ void addKernel(int *c, const int *a, const int *b)
{
int i = threadIdx.x;
c[i] = a[i] + b[i];
}
//to simplify the problem, just imply an empty main function
int main()
{
return 0;
}
Aboving代码在Visual Studio 2010项目中的.cu文件中。问题是编译器在编译时无法识别STL迭代器的定义:
error : identifier "itNumerical" is undefined
error : identifier "itCurVal" is undefined
error : expected a ";"
如果我将文件重命名为.cpp和Rebuild,则可以编译代码,但是会出现"错误lnk2001:未解决的外部符号threadiDx"的链接错误。那么如何构建代码?
此可能是在标准库模板上破坏CUDA C 前端/解析器的限制。我可以用CUDA 8和GCC 4.8.5。
复制它。作为解决方法,这似乎有效:
template<class T> void InsertValueNode(std::list<T> &ValueList,T NewValue)
{
auto itCurVal = ValueList.begin();
while(itCurVal != ValueList.end())
{
if(NewValue < (*itCurVal))
break;
itCurVal++;
}
std::insert_iterator< std::list<T> > itNewNode(ValueList, itCurVal);
*itNewNode = NewValue;
}
使用NVCC进行汇编时,只要使用-std=c++11
选项。您可能想考虑使用NVIDIA
相关文章:
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 如何使用 GDB 从功能C++逐步调试到 std::function 用户代码?
- 在大括号内添加语句会更改代码功能?
- c++ Visual Studio 2015 快捷方式,用于从选择代码中生成功能
- 下面的代码是如何工作的?它输出分解的数字并且功能齐全,我只是不明白它是如何做到的
- 如何避免大多数成员功能相同的代码重复
- 如何简化代码并将开关组合成一个功能?
- 维护/维持两个代码集的风险,一个用于 CPU,一个用于 GPU,需要执行非常相似的功能
- 所以我想出了他的代码,但我不确定如何继续删除功能?
- 为什么GCC违反了调用ABS功能的代码,并用简短的参数进行功能
- 如何构建包含CUDA功能和C 模板功能的代码
- 是否有一种方法可以避免在RVALUE和LVALUE参考中创建功能时避免重复的代码
- C //尝试重写一个工作代码以包括我的功能
- 代码仅在2个功能实现中的1个中溢出
- 如何在现有 c++ 代码中以功能方式实现遥测
- 在C/C 中使用检查功能的Windows NT命令行代码循环
- C Linux代码破坏Windows构建,因为缺少标头意味着功能不确定
- 代码由编译器代替,用于成员功能的功能指针
- 此代码中没有匹配功能
- 对功能代码块的未定义引用