我正在尝试编写一个有人发给我的cuda项目.虽然编译阶段通过,但链接阶段失败.以下是错误的示例:
Error 298 error LNK2005: "int __cdecl compare_ints(void const *,void const *)" (?compare_ints@@YAHPBX0@Z) already defined in 3level_1.cu.obj decode_p4.cu.obj
Run Code Online (Sandbox Code Playgroud)
基本上,文件decode_p4.cu.obj抱怨函数compare_ints已在3level_1.cu.obj中定义.关于如何避免这种行为的任何想法?
如果有帮助,下面是类似错误的列表:
Error 384 error LNK2005: "int __cdecl compare_ints(void const *,void const *)" (?compare_ints@@YAHPBX0@Z) already defined in 3level_1.cu.obj decode_p4.cu.obj god
Error 385 error LNK2005: "int __cdecl cpu_intersection(unsigned int *,int,unsigned int *,int)" (?cpu_intersection@@YAHPAIH0H@Z) already defined in 3level_1.cu.obj decode_p4.cu.obj god
Error 386 error LNK2005: "int __cdecl intersection_cpu(unsigned int * * const,int * const,int)" (?intersection_cpu@@YAHQAPAIQAHH@Z) already defined in 3level_1.cu.obj decode_p4.cu.obj god
Error 387 error LNK2005: …Run Code Online (Sandbox Code Playgroud) 下面是一小段代码,可将4个元素从数组复制到GPU.我真的不明白为什么cudaMemcpy在这种情况下会抛出错误.请帮忙
int size = 5;
float *a = (float*)malloc(size * sizeof(float));
a[0] = 1.0;
a[1] = 2.0;
a[2] = 3.0;
a[3] = 4.0;
a[4] = 5.0;
float *g;
cudaMalloc((void**)g, 4 * sizeof(float));
float *tem = a+2;
cudaError_t err = cudaMemcpy(g,a,4 * sizeof(float), cudaMemcpyHostToDevice);
if(err !=0){
printf("Cudamemcpy threw error\n");
getchar();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用NVIDIA Tools Extension使用Visual Profiler对CUDA代码执行更准确的性能评估.我正在使用Visual Studio 2010来开发代码.
要为此功能设置Visual Studio 2010,我已添加
Properties -> Linker -> General -> Additional Library Directories -> $(NVTOOLSEXT_PATH)\lib\$(Platform);
Properties -> Linker -> General -> Input -> Additional Dependencies -> nvToolsExt32_1.lib;
Run Code Online (Sandbox Code Playgroud)
但是,当我使用时
#include <nvToolsExt>
Run Code Online (Sandbox Code Playgroud)
编译说
Error 1 error C1083: Cannot open include file: 'nvToolsExt': No such file or directory
Run Code Online (Sandbox Code Playgroud)
环境变量NVTOOLSEXT_PATH设置为
NVTOOLSEXT_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\nvToolsExt\
Run Code Online (Sandbox Code Playgroud)
但C:\Program Files\NVIDIA GPU Computing Toolkit\nvToolsExt\我的系统上没有该目录,所以我认为没有安装NVIDIA Tools Extension.
我有两个问题:
1)为NVIDIA工具扩展功能设置Visual Studio 2010的上述过程是否正确?2)如何安装工具?
提前致谢.
我想在我的cuda代码中指定我是使用CUDA构建规则版本4.2还是使用CUDA构建规则版本5进行编译.
有没有用于此类提议的宏?
注意:我知道可以选择指定当前编译过程是否支持某种体系结构,例如
__CUDA_ARCH__
我正在为cuda构建规则版本寻找类似的宏
非常感谢帮助
我创建了一个简单的C树,我打算在GPU上移植它.
我树的结构如下:
typedef struct node{
short int final; // 2 byte
char number; // 1 byte
struct node *child[2]; // 8 * NUM_SIZE byte
}node;
Run Code Online (Sandbox Code Playgroud)
我现在想知道如何在CUDA上移植代码,或者如何在CUDA中使用结构,我应该在设备上创建树吗?或者在主机上创建树并将其传递给设备?
在设备上创建树似乎是我的最佳答案,虽然我不确定如何在设备上使用结构.
谢谢
我试图理解CUDA中统一虚拟寻址(UVA)的概念.我有两个问题:
是否有可用于演示此概念的示例(psudo)代码?
我在CUDA C编程指南中读到,UVA只能用于64位操作系统.为什么会这样?
__device__来自内核的CUDA设备函数调用(定义)是否与主机函数类似,即它是否涉及在堆栈上推送返回地址并推送堆栈上的变量并在返回时检索?
如果是,那么在这种情况下使用哪个内存用于堆栈?(缓存,共享或全局)
我正在使用wglCreateContextAttribsARB()函数来创建具有以下参数的OGL上下文:
const int contextAttrib[] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, 4,
WGL_CONTEXT_MINOR_VERSION_ARB, 2,
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
#ifdef _DEBUG
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB | WGL_CONTEXT_DEBUG_BIT_ARB,
#else
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
#endif
0
};
mContext = wglCreateContextAttribsARB_local(mhDC, shareLists, contextAttrib);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到一个错误 - 0xc00710dd或3221688541(由GetLastError()返回),当我尝试创建第二个上下文,它与先前成功创建的某些上下文共享数据(shareLists参数).谷歌搜索只给出了一个结果:http://software.intel.com/en-us/forums/topic/303629我在Windows 8.1上使用GeForce 680 GTX和最新的驱动程序,所以线程不是很多我们无论如何.
一个奇怪的是这个错误的再现方式.当我创建与A共享数据的上下文A和上下文B,然后C与A共享数据时,只有当B在创建C(失败)之前呈现某些内容时才会发生错误.
有谁知道可能会发生什么?
我在这里有一个小的无意义的脚本,我在MATLAB R2013b中执行:
clear all;
n = 2000;
times = 50;
i = 0;
tCPU = tic;
disp 'CPU::'
A = rand(n, n);
B = rand(n, n);
disp '::Go'
for i = 0:times
CPU = A * B;
end
tCPU = toc(tCPU);
tGPU = tic;
disp 'GPU::'
A = gpuArray(A);
B = gpuArray(B);
disp '::Go'
for i = 0:times
GPU = A * B ;
end
tGPU = toc(tGPU);
fprintf('On CPU: %.2f sec\nOn GPU: %.2f sec\n', tCPU, tGPU);
Run Code Online (Sandbox Code Playgroud)
不幸的是,在执行后我收到来自Windows的消息说:" 显示驱动程序停止工作并已恢复. ". …
我在OpenACC上使用NVIDIA GPU(NVIDIA GeForce960,编译器:PGI 15.7)
NVIDIA GPU是否支持分支预测?我的代码在长循环中有条件执行代码.但是当我在GPU上运行代码时,需要很长时间.
下面是示例代码.
#pragma acc parallel loop
for(i=0; i<1000; i++) // NVIDIA GPU kernel with OpenACC
for(j=0; j<1000; j++)
if(a[i][j]==value)
// do something...
else if(a[i][j]==value2)
// do another something...
else
// do another something...
Run Code Online (Sandbox Code Playgroud)
如果此代码在CPU上编译并运行,则CPU将对条件执行循环执行分支预测.NVIDIA GPU是否具有与CPU分支预测相同或类似的技能?
如果有,我该如何启用它?
附加问题:
PGI 15.7编译器可以编译GPU的优化代码吗?我知道通常的编译器(gcc ...等)可以使用优化技能进行编译,比如更改条件代码执行顺序.