草庐IT

cuda-c-programming-guide

全部标签

c++ - 在 CUDA 内核中放置一个 for 循环

在内核中放置一个for循环是个坏主意吗?或者这是一件很常见的事情? 最佳答案 将循环放入内核是很常见的。这并不意味着它总是一个好主意,但也不意味着它不是。确定如何有效地分配任务和数据以及利用相关并行性的一般问题是一个非常困难且Unresolved问题,尤其是在涉及CUDA时。正在进行积极的研究以有效地确定(即,不盲目地探索参数空间)如何为给定的内核实现最佳结果。有时,将循环放入内核中会很有意义。例如,对具有强数据独立性的大型常规数据结构的许多元素进行迭代计算非常适合包含循环的内核。其他时候,您可能决定让每个线程处理许多数据点,例如您

cuda 5.0支持的c++版本

我找不到CUDA5.0支持哪个版本/哪些c++概念。我在CUDA5.0RC随附的编程指南或引用指南中找不到任何信息。特别是我想知道CUDA5.0是否支持C++11。谁能告诉我在哪里可以找到这些信息? 最佳答案 显然,5.0RC中没有可用的C++11功能。nvcc仍然不理解gcc4.6标准包含中使用的C++11语法(参见ErrorwhileusingCUDAandC++11):$nvcc--versionnvcc:NVIDIA(R)CudacompilerdriverCopyright(c)2005-2012NVIDIACorpora

c++ - 无法从静态初始化代码启动 CUDA 内核

我有一个在其构造函数中调用内核的类,如下所示:“标量场.h”#includevoidERROR_CHECK(cudaError_terr,constchar*msg){if(err!=cudaSuccess){std::cout“类A.h”#include"ScalarField.h"static__global__voidKernelSetScalarField(ScalarFieldv){intindex=threadIdx.x+blockIdx.x*blockDim.x;if(index>>(v);ERROR_CHECK(cudaGetLastError(),"Kernel");

c++ - 将常量参数传递给 CUDA 内核的最快(或最优雅)方式

假设我想要一个需要做很多事情的CUDA内核,但是有一些对所有内核都是不变的圆顶参数。此参数作为输入传递给主程序,因此它们不能在#DEFINE中定义。内核将运行多次(大约65K)并且它需要这些参数(和一些其他输入)来进行计算。我的问题是:将这些常量传递给内核的最快(或者最优雅)的方法是什么?常量是2或3个元素长度的float*或int*数组。他们大约有5~10个。玩具示例:2个常量const1和const2__global__voidkernelToyExample(intinputdata,?????){value=inputdata*const1[0]+const2[1]/const

c++ - boost::program_options - 如何处理 INI 文件中具有相同名称的多个部分

在如下配置中;有没有办法处理各个部分。我正在寻找一种方法来以可靠的方式验证下面的各个“服务器”部分。[basic]number_of_servers=3[server]ip=10.20.30.40password=sdfslkhf[server]ip=10.20.30.41password=sdfslkhf[server]ip=10.20.30.42password=sdfslkhf[server]password=sdfslkhf[server]ip=10.20.30.42 最佳答案 当使用boost::program_optio

c++ - 什么是 CLSID?它是一个GUID吗?

我想知道CLSID数据类型到底是什么,因为它在C++中使用,我想在delphi中使用它。什么是CLSID? 最佳答案 CLSID是标识COM对象的GUID。为了实例化已注册的COM对象,您需要知道它的CLSID。通常在Delphi中,您会调用CoCreateInstance。您只需调用该函数并传递一个CLSID。CoCreateInstance的声明将类ID参数声明为具有TCLSID类型,它是TGUID的简单别名。所以通过其中一个。以下是从Delphi源代码中提取的声明:typeTCLSID=TGUID;functionCoCrea

c++ - 可由设备或主机调用的 CUDA 函数

我在一些需要从设备和主机调用的CUDA代码中有一个可重用的函数。是否有合适的限定符?例如在这种情况下,func1的正确定义是什么:intfunc1(inta,intb){returna+b;}__global__devicecode(float*A){inti=blockDim.x*blockIdx.x+threadIdx.x;A[i]=func1(i,i);}voidmain(){//Normalcudamemoryset-up//Callfunc1frominsidemain:intj=func1(2,4)//Normalcudamemorycopy/programrun/retr

c++ - Ubuntu 上 Boost program_options 代码中的链接错误

我在ubuntu10.04上安装了boostsudoapt-getinstalllibboost-dev我想在那之后我不需要设置任何-I和-L标志,所以我编译我的代码g++test.cpp这是我的测试.cpp#include#include#include#include#include#include#includenamespacepod=boost::program_options::detail;intmain(){//contentsstd::stringstreams("a=1\n""b=2\n""c=testoption\n");//parametersstd::seto

c++ - CUDA 驱动程序 API 和函数处理

我有一个项目需要C++11,所以我将文件分为两类:使用C++11的文件和使用C++03的文件,因此与nvcc编译器兼容。当我有一个不是模板函数的内核时,很容易加载模块并使用cuModuleGetDataEx找到函数名称。但是,当内核是模板时,函数名称在显式特化后会被破坏。这使得在使用CUDA驱动程序API加载模块后很难获得函数的句柄。例如,考虑这个功能。templateglobalvoidvector_add(constT*a,constT*b,T*c,constSizeTypedim){constSizeTypei=blockIdx.x*blockDim.x+threadIdx.x;

c++ - "The C++ compiler "/usr/bin/c++ "is not able to compile a simple test program."尝试安装 OpenCV 时

我正尝试按照此link在我的Mac上安装OpenCV但是,当我在终端上键入cmake-G"UnixMakefiles"..时,会打印出此错误。--TheCXXcompileridentificationisunknown--TheCcompileridentificationisunknown--CheckforworkingCXXcompiler:/usr/bin/c++--CheckforworkingCXXcompiler:/usr/bin/c++--brokenCMakeErrorat/opt/local/share/cmake-3.0/Modules/CMakeTestCXX