jjzjj

c++ - 在同一项目中混合使用 C++ 风格

在同一个项目中混合使用C++98和C++11是否安全?我所说的“混合”不仅指链接目标文件,还指包含在使用C++98和C++11编译的源代码中的公共(public)头文件。这个问题的背景是希望至少将大型代码库的一部分过渡到C++11。部分代码在C++CUDA中,编译后可以在GPU或CPU上执行,对应的编译器暂时不支持C++11。然而,大部分代码仅适用于CPU,并且可以使用任何一种C++风格进行编译。一些头文件包含在CPU+GPU和CPU-only源文件中。如果我们现在使用C++11编译器编译CPU-only源文件,我们是否有信心避免不良副作用? 最佳答案

c++ - cuda在gpu和主机之间统一内存

我正在编写一个基于cuda的程序,需要定期将一组项目从GPU传输到主机内存。为了保持进程异步,我希望使用cuda的UMA在主机内存中有一个内存缓冲区和标志(这样GPU和CPU都可以访问它)。GPU将确保标志已清除,将其项目添加到缓冲区,然后设置标志。CPU等待设置标志,从缓冲区中复制内容,然后清除标志。据我所知,这不会产生任何竞争条件,因为它会强制GPU和CPU轮流,始终读取和写入彼此相对的标志。到目前为止,我还没有能够让它工作,因为似乎确实存在某种竞争条件。我想出了一个具有类似问题的更简单的示例:#include__global__voiduva_counting_test(intn

c++ - OpenCL 找不到平台?

我正在尝试将C++API用于OpenCL。我已经安装了我的NVIDIA驱动程序并测试了我可以运行提供的简单vector加法程序here.我可以用下面的gcc调用编译这个程序,程序运行没有问题。gccmain.c-ovectorAddition-lOpenCL-I/usr/local/cuda-6.5/include但是,我更愿意使用C++API而不是C所需的非常冗长的主机文件。我从here下载了Khronos的C++绑定(bind)并将cl.hpp文件放在与我的其他cl.h文件相同的位置。该代码使用了一些C++11,因此我可以使用以下代码编译代码:g++main.cpp-ovector

c++ - 在 CUDA 中用小 M 对两个 MxN 矩阵执行逐 vector 点积的最快方法是什么?

我有两个矩阵,每个都是MxN,其中M=16和N大得多(比如n=262144,例如)。我的目标是生成一个长度为N的vector,其中每个元素对应于每个矩阵中的nthvector的点积。我尝试了以下方法,其中cIdx对应于每个矩阵中列vector的列索引。毫不奇怪,NVIDIAVisualProfiler告诉我这种方法主要受内存带宽限制。publicstaticvoidMatrixDotProduct(float*matrix1,float*matrix2,float*dotProduct,int2matrixDimensions){inti=blockIdx.x*blockDim.x+t

c++ - CUDA 纹理和夹紧

有什么方法可以将超出范围的纹理地址限制在某个值吗?就我而言,我希望将它们设置为简单的零,但我需要的地址模式似乎不存在。谢谢。编辑:知道cudaAddressModeBorder设置的作用吗? 最佳答案 我不认为有一种方法可以指定钳位,但你可以做显而易见的事情并在边缘周围添加一个1像素的黑色(零)边框并将你的寻址偏移1。它不应该有更多的数据和它会免费为您夹紧。如果您有最大尺寸的2D纹理(对于CUDA2.x,它是64kx64k),每像素16字节(最坏情况),那么对于1像素边框,您只会看到4MB的额外数据,这对于PCIex16卡,复制到卡

c++ - 在设备上的线性内存中循环二维数组时将 float* 转换为 char*

在CUDA4.0编程指南的第21页有一个示例(下面给出)来说明循环遍历设备内存中二维float组的元素。2D的尺寸是width*height//Hostcodeintwidth=64,height=64;float*devPtr;size_tpitch;cudaMallocPitch(&devPtr,&pitch,width*sizeof(float),height);MyKernel>>(devPtr,pitch,width,height);//Devicecode__global__voidMyKernel(float*devPtr,size_tpitch,intwidth,int

c++ - 如何使用模板函数和 CUDA

所以我有以下代码:文件:Cuda.cutemplate__global__voidxpy(intn,T*x,T*y,T*r){inti=blockIdx.x*blockDim.x+threadIdx.x;if(i>>(numElements,a1,a2,r);}mtx_mtx_add(int*a1,int*a2,int*r,constint&numElements){:::}mtx_mtx_add(longlong*a1,longlong*a2,longlong*r,constint&numElements){:::}文件:调用代码extern"C"boolmtx_mtx_add(fl

c++ - Hello World CUDA 编译问题

我正在使用CUDAbyExample书并尝试编译书中的第一个真实示例。我在OSX10.9.2上:我的来源是:@punk~/Documents/Projects/CUDA$/Developer/NVIDIA/CUDA-6.0/bin/nvcchello.cnvccwarning:The'compute_10'and'sm_10'architecturesaredeprecated,andmayberemovedinafuturerelease.hello.c:6:1:error:unknowntypename'__global__'__global__voidkernel(void){^

c++ - CUDA 中的随机播放指令不起作用

我在CUDA5.0中遇到随机指令问题。这是我的内核片段。它在循环内。打印仅用于调试目的,因为我不能使用普通调试器:...tex_val=tex2D(srcTexRef,threadIdx.x+w,y_pos);if(threadIdx.x==0){left=left_value[y_pos];}else{printf("thread%d;shflvalue:%f\n",threadIdx.x,__shfl_up(value,1));left=__shfl_up(value,1);}printf("thread%d;value:%f;tex_val:%f;left:%f\n",threa

c++ - Armadillo+NVBLAS 变成 RcppArmadillo+NVBLAS

TLDR;fortheonesthatwantstoavoidreadingthewholestory:IsthereawaytointerfaceRcppArmadillowithNVBLAStomakeuseoftheGPU,muchmorelikeyou'ddotointerfaceArmadillowithNVBLASusingpurec++codewithoutR?我正在尝试利用NVBLAS库(http://docs.nvidia.com/cuda/nvblas/)通过将一些计算转移到GPU来加速我项目中的线性代数部分(主要是计算统计、MCMC、粒子过滤器和所有这些好东西).