我正在使用CUDA 4.1和GCC 4.5 ...(最终!CUDA支持GCC 4.5,但仍在等待GCC 4.6).无论如何,是否可以将C++ 11与CUDA 4.1一起使用?
我试过传递:
--compiler-options "-std=c++0x"
Run Code Online (Sandbox Code Playgroud)
到nvcc,它给我带来了一堆错误:
/usr/include/c++/4.5/exception_ptr.h(100): error: copy constructor for class "std::__exception_ptr::exception_ptr" may not have a parameter of type "std::__exception_ptr::exception_ptr"
/usr/include/c++/4.5/exception_ptr.h(100): error: expected a ")"
/usr/include/c++/4.5/exception_ptr.h(110): error: expected a ")"
/usr/include/c++/4.5/exception_ptr.h(132): error: identifier "type_info" is undefined
/usr/include/c++/4.5/exception_ptr.h(101): error: identifier "__o" is undefined
/usr/include/c++/4.5/exception_ptr.h(112): error: expected a ">"
/usr/include/c++/4.5/exception_ptr.h(112): error: identifier "__o" is undefined
/usr/include/c++/4.5/nested_exception.h(62): error: expected a ";"
/usr/include/c++/4.5/nested_exception.h(64): error: expected a ";"
/usr/include/c++/4.5/nested_exception.h(77): error: member function "std::nested_exception::~nested_exception" may not be redeclared outside …Run Code Online (Sandbox Code Playgroud) 我收到了消息:
"cutilCheckMsg()CUTIL CUDA错误:内核启动失败:CUDA驱动程序版本不足以用于CUDA运行时版本."
在尝试运行示例源代码时.也适用于该功能cutilSafeCall.
在以下环境中进行操作.
windows 7 64bits
visual studio 2008
CUDA开发人员驱动程序,工具包和sdk 3.1
仿真模式
有人可以帮忙吗?:)
直接问题: 如何在visual studio 2010中创建一个简单的hello world CUDA项目?
背景: 我写过CUDA内核.我非常熟悉Visual Studio 2005中的.vcproj文件 - 手动调整了几个.在VS 2005中,如果我想构建一个CUDA内核,我会添加一个自定义构建规则,然后显式定义nvcc调用以构建文件.
我已经迁移到Win 7和VS 2010,因为我真的想尝试nSight.我安装了nSight 1.5.但这就是我完全迷失的地方.如果我像以前一样继续,nvcc报告它只支持msvc 8.0和9.0.但该网站明确表示它支持VS 2010.
我在其他地方读到了我需要安装VS 2008(msvc 9.0) - 我的话.现在这样做.
但我猜测,我的问题至少部分来自自产自定义生成工具的规格干. 一些 网站谈论添加*.rules文件添加到构建,但我已经收集,这是只适用于VS 2008在"构建自定义"我看到CUDA 3.1和3.2,但是当我添加内核他们AREN项目没有建成. 另一个网站宣称,关键是三个文件:Cuda.props Cuda.xml Cuda.targets,但它并没有说如何或在哪里添加这些文件-或者更确切地说,我会赌我只是不明白的说明在网站上引用.
因此,没有人知道如何创建在VS 2010中一个简单的项目,该项目构建了一个CUDA内核-使用无论是nSight 1.5设置或NvCudaRuntimeApi.v3.2.rules文件所附带CUDA 3.2 RC?
提前致谢!我会提供赏金,但我总共得到65分.
每个内核启动可以创建的网格中的最大块数是多少?从那以后我有点困惑
现在,这里的计算能力表表明,在CUDA计算能力2.0中,每个网格可以有65535个块.
这是否意味着总块数= 65535*65535?
或者它是否意味着您可以将最多65535重新排列为65536块的1d网格或sqrt(65535)*sqrt(65535)的2d网格?
谢谢.
我正在尝试使用CUDA开发一个小程序,但由于它是SLOW,我做了一些测试并用Google搜索了一下.我发现虽然单个变量默认存储在本地线程内存中,但数组通常不存在.我想这就是为什么它花了这么多时间来执行.现在我想知道:因为本地线程内存至少应该是16KB,因为我的数组就像52个字符长,有没有办法(语法请:))将它们存储在本地内存中?
不应该是这样的:
__global__ my_kernel(int a)
{
__local__ unsigned char p[50];
}
Run Code Online (Sandbox Code Playgroud) 我知道CUDA GPU上有多处理器,其中包含CUDA核心.在我的工作场所,我使用的是GTX 590,它包含512个CUDA内核,16个多处理器,其warp大小为32.因此,这意味着每个多处理器中有32个CUDA内核,它们在同一个warp中完全相同的代码.最后,每块大小的最大线程数为1024.
我的问题是块大小和多处理器数量 - warp大小是如何完全相关的.让我告诉我对情况的理解:例如,我在GTX 590上分配了最大threadPerBlock大小为1024的N个块.据我从CUDA编程指南和其他来源的理解,这些块首先由硬件枚举. .在这种情况下,来自N个块的16被分配给不同的多处理器.每个块包含1024个线程,硬件调度程序将32个这些线程分配给单个多处理器中的32个核心.同一多处理器(warp)中的线程处理代码的同一行,并使用当前多进程的共享内存.如果当前的32个线程遇到像存储器读写这样的片外操作,则它们将替换为来自当前块的另一组32个线程.所以,实际上有32个线程,其中在单个块恰好在任何给定时间并行运行在多处理器,而不是整个的1024的最后,如果一个块完全被多处理器中,从一个新的线程块处理N个线程块的列表插入到当前的多处理器中.最后,在执行CUDA内核期间,GPU中总共有512个并行运行的线程.(我知道如果一个块使用的寄存器多于单个多处理器上可用的寄存器,那么它被分成两个多处理器,但我们假设在我们的情况下每个块可以适合单个多处理器.)
那么,我的CUDA并行执行模型是否正确?如果没有,有什么不对或缺失?我想微调我正在处理的当前项目,所以我需要最正确的工作模型.
我首先使用cuda安装cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb.现在我正在尝试安装OpenCV 3.3.0但是我得到了CMake错误:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)
Run Code Online (Sandbox Code Playgroud)
然后是很长的目标列表,如下所示:
linked by target "opencv_cudev" in directory /home/jjros/opencv-3.3.0/modules/cudev
Run Code Online (Sandbox Code Playgroud)
我正在使用此命令来编译库:
cmake
-D CMAKE_C_COMPILER=/usr/bin/gcc-5 \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D WITH_CUBLAS=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D ENABLE_FAST_MATH=1 \ …Run Code Online (Sandbox Code Playgroud) 我有一个用Erlang编写的神经网络,我刚买了一块带有240核GPU的GeForce GTX 260卡.使用CUDA作为粘合剂在显卡上运行它是否微不足道?
如何使用两个设备来改善例如以下代码的性能(向量之和)?是否可以"同时"使用更多设备?如果是,我如何管理不同设备的全局内存上的向量分配?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <cuda.h>
#define NB 32
#define NT 500
#define N NB*NT
__global__ void add( double *a, double *b, double *c);
//===========================================
__global__ void add( double *a, double *b, double *c){
int tid = threadIdx.x + blockIdx.x * blockDim.x;
while(tid < N){
c[tid] = a[tid] + b[tid];
tid += blockDim.x * gridDim.x;
}
}
//============================================
//BEGIN
//===========================================
int main( void ) {
double *a, *b, *c;
double *dev_a, *dev_b, *dev_c;
// allocate …Run Code Online (Sandbox Code Playgroud)