草庐IT

cuda-streams

全部标签

c++ - CUDA 7.5 实验性 __host__ __device__ lambda

我玩了一下experimentaldevicelambdas在CUDA7.5中引入并在此blogpostbyMarkHarris中提升.对于下面的示例,我删除了很多不需要显示我的问题的东西(我的实际实现看起来更好......)。我尝试编写一个foreach函数,它根据模板参数对设备上的vector(每个元素1个线程)或主机(串行)进行操作。使用这个foreach函数,我可以轻松实现BLAS函数。例如,我使用为vector的每个分量分配一个标量(我在最后附上完整的代码):templatevoidassignScalar(size_tsize,double*vector,doublea){

c++ - 实现可以转换为 Stream<U> 的 Stream<T>,其中 U 是 T 的基数

我正在尝试实现一个通用的对象输入流。即,实现的接口(interface)或轻量级代理。实现的细节是未知的,即我的库的用户可以编写自己的流,比如protobuf消息,将它传递到我的库并返回,比如字符串流或任何其他流。我想保持流的通用接口(interface),以便用户可以编写自己的转换并构建转换管道。流的接口(interface)应该是这样的:templateclassStream{public:T*input();}在每次通话中,input()如果流为空,应返回流中的下一个对象或空指针。问题是我想要Stream可转换为Stream如果T*可转换为U*.我不成功的尝试是像这样使用指向实现

c++ - 流、stream_bufs、codecvt 方面和\n 到\r\n 翻译

\r到\r\n转换的C++IO流的哪一部分?它是stream_buf本身,还是codecvt方面的内部到外部编码转换的一部分?更新1你们都说在streambuf/filebuf中完成。行。但是这种安排如何处理诸如UTF-16之类的外部编码?然后似乎必须使用禁用翻译的ios::binary标志打开文件。 最佳答案 这种转换(通常)不是由流、streambuf或facet执行的。由streambuf的fputc()调用的C库代码(例如overflow())负责和underflow().如果您出于某种原因需要它(例如,在实现dos2uni

c++ - Boost IO Stream 和 ZLib 提速

我有一个大文件,我使用Zlib使用boostIOStreams和过滤流缓冲区压缩了数据:boost::iostreams::array_sourceuncompressedArray(reinterpret_cast(&uncompressedData[0]),uncompressedData.size());boost::iostreams::filtering_streambufout;out.push(*m_compressor);out.push(boost::iostreams::char_back_inserter(compressedData));boost::iostr

c++ - 编译 CUDA 示例会出现构建错误

我正在运行Windows764位和VisualStudio2008。我安装了CUDA驱动程序和SDK。SDK附带了很多示例,包括已编译的可执行文件和源代码。编译后的可执行文件运行得很好。当我打开vc90解决方案并在Win32配置中构建时,我收到此错误:Error1fatalerrorLNK1181:cannotopeninputfile'.\Release\bandwidthTest.cu.obj'bandwidthTestbandwidthTest构建日志:1>------Buildstarted:Project:bandwidthTest,Configuration:Release

c++ - Cuda虚拟类

我想在cuda内核中执行一些虚拟方法,但我不想在同一个内核中创建对象,而是想在主机上创建它并将其复制到gpu内存。我正在内核中成功创建对象并调用虚拟方法。复制对象时出现问题。这是有道理的,因为显然虚函数指针是伪造的。发生的只是“Cudagridlaunchfailed”,至少Nsight是这么说的。但是当查看SASS时,它会在取消引用虚函数指针时崩溃,这是有道理的。我当然在使用Cuda4.2以及在适配卡上使用“compute_30”进行编译。那么推荐的方法是什么?还是根本不支持此功能?我有想法首先运行一个不同的内核,它创建虚拟对象并提取虚函数指针以在复制它们之前“修补”我的对象。遗憾的

c++ - 在 Cmake 中使用 Cuda 对象链接

现在我正在开发一个使用Cuda5的对象链接功能的项目。由于项目开始变得复杂,我想切换到使用cmake来编译代码。但是,我似乎无法让对象链接正常工作。我最终创建了该项目的玩具版本,它出现了与原始项目相同类型的错误。玩具项目包含一个调用内核函数以在GPU上运行的主文件(TextureMain.cu)。在每个GPU线程中,引用了一个用户定义类(TextureFunc)的实例,其中该类存在于与主文件不同的文件夹中。该类由该文件夹中的TextureFunc.cu和TextureFunc.h文件组成。这是我正在使用的CMakeList.txt文件:在项目目录下(包含src目录):project(T

c++ - 将 CUDA 集成到 C++ 应用程序中以使用现有的 C++ 类

我有一个现有的应用程序,它使用C++类、C++包装器和FORTRAN代码来处理应用程序的计算密集型部分。我想在CUDA中实现部分FORTRAN以利用并行化,但我仍想访问一些子例程,因此我需要链接CUDA、C++和FORTRAN代码。我有三个问题:1.如何将所有目标文件正确链接到Linux终端和Makefile(包含在下面)?2.在不混淆编译器对设备和主机代码的识别的情况下,在类头中引用CUDA函数的正确方法是什么?3.将类传递给CUDA就像将类传递给任何其他外部C代码一样吗?注意:除了Makefile之外,我没有包含完整代码(其中一些代码很长)。如果我需要包含更多内容,请告诉我。.h文

c++ - 在 CUDA 内核中使用 memset

这似乎是一个显而易见的问题,但谷歌没有找到任何有趣的东西。在CUDA内核中使用memset是否合法,例如:__device__voidmyKernel(){intarray[10];memset(array,0,sizeof(array));//...etc...}(我知道intarray[10]={0};可能更好,但这只是一个更复杂的例子。) 最佳答案 是的,如AppendixBoftheprogrammingmanual中所述,memset,以及memcpy,malloc,和free(后两者仅在计算能力上>=2.0设备)在设备代

c++ - 如何将 CUDA .cu 代码与 C++ 应用程序集成

这篇文章与我之前的文章非常相似:HowtoseparateCUDAcodeintomultiplefiles恐怕我在实际询问中犯了如此大的错误,以至于无法在那里尝试和更正它会太困惑。我将此代码松散地基于CUDASDK中的cppIntegration示例。我想要一个main.cpp和我的main()函数,并让它调用一个单独的.cu文件在GPU上做一些工作。在单独的.cu文件中,我希望它能够调用驻留在另一个.cu文件中的内核代码。我设想了三个文件:Main.cpp、KernelWrapper.cu和MyKernel.cu。用于测试目的的Main.cpp除了调用位于KernelWrapper