草庐IT

Block_size

全部标签

c++ - 如何使用 CUDA 生成随机排列

我可以使用哪些并行算法从给定的集合中生成随机排列?特别是适合CUDA的论文的建议或链接会很有帮助。这的顺序版本将是Fisher-Yates洗牌。例子:设S={1,2,...,7}为源索引集。目标是并行生成n个随机排列。n个排列中的每一个都恰好包含每个源索引一次,例如{7,6,...,1}。 最佳答案 Fisher-Yatesshuffle可以并行化。例如,4个并发worker只需要3次迭代来洗牌8个元素的vector。在第一次迭代中,它们交换01、23、45、67;第二次迭代02、13、45、67;以及最后一次迭代04、15、26、

c++ - block 非专用模板 C++

是否有可能以某种方式禁止对未明确编写专门化的类型使用模板化函数。我的意思是类似的东西templatevoidfoo(){}templatevoidfoo(){}intmain(intargc,char*argv[]){foo();//okfoo();//Wrong-nospecializedversionforchar.}我不能跳过函数的通用版本,因为编译器说,当我尝试专门化时,foo不是模板函数。我可以简单地写一些不能在通用函数中编译的东西,并添加一些注释来解释原因,但这将是非常无用的。我想做的是能够直接导致编译器出现“foo()未定义”之类的错误。 最佳

c++ - 在哪里可以找到 C++ STL 中 vector 的 size_type 定义?

将vector的size()函数的结果转换为unsignedint似乎是安全的。不过,我怎么能确定呢?我的文档不清楚size_type是如何定义的。 最佳答案 不要假定容器大小的类型(或在其中键入的任何其他内容)。今天?目前最好的解决方案是使用:std::vector::size_type其中T是您的类型。例如:std::vector::size_typei;std::vector::size_typej;std::vector>::size_typek;(使用typedef可以帮助使其更好地阅读)对于迭代器和“内部”STL容器中的

c++ - 错误 : initializer fails to determine size of ‘K’

我在行中收到错误“初始化器无法确定‘K’的大小”intK[]=newint[Vertices->total];如何解决? 最佳答案 改变intK[]=newint[Vertices->total];到int*K=newint[Vertices->total];第一个是Java创建数组的方法,其中K是对整数数组的引用。但是在C++中,我们需要让K成为一个指向整数类型的指针。 关于c++-错误:initializerfailstodeterminesizeof‘K’,我们在StackOver

c++ - 我可以使用 block 来管理 C++ 中的内存消耗吗?

我试图在C++程序中节省一些内存,我想知道我是否可以使用block作为变量的范围(如在Perl中)。假设我有一个执行一些计算并给出结果的巨大对象,这样做是否有意义:InputTypeinput;ResultTyperesult;{//BlockofcodeMyHugeObjectmho;result=mho.superHeavyProcessing();}/*Myothercode...*/我可以期望对象在退出block时被销毁吗? 最佳答案 是的,你可以。一旦变量超出范围,析构函数就会被调用,它应该释放堆分配的内存。

c++ - 仅 block 的 HoG 特征

我正在尝试仅为block计算HOG特征。我探索了opencv/module/gpu/src/下列出的hog.cpp。下面是我更改为仅计算block特征的代码。voidcv::gpu::HOGDescriptor::getDescriptors(constGpuMat&img,Sizewin_stride,GpuMat&descriptors,intdescr_format){CV_Assert(win_stride.width%block_stride.width==0&&win_stride.height%block_stride.height==0);computeBlockHis

c++ - 使用 std::array::size 实例化 std::array 时出错

示例代码test.cpp#include#includeintmain(){//OKconststd::arrayarray_int={42,1337};std::arrayarray_float_ok;//Errorconststd::arrayarray_string={"foo","bar"};std::arrayarray_float_error;return0;}使用g++4.8.4(Ubuntu14.04)编译g++-Wall-std=c++0xtest.cpp-otest给出如下错误信息test.cpp:Infunction‘intmain()’:test.cpp:14:

c++ - size_t 和内存分配

有这样一个类型std::size_t。它可用于描述对象的大小,因为它保证能够表达任何对象的最大大小(所以写成here)。但是,这是什么意思?我们实际上在内存中没有对象。那么这是否意味着这种类型可以存储一个整数,代表我们理论上可以使用的最大内存量?如果我尝试写类似的东西size_tmaxSize=std::numeric_limits::max();newchar[maxSize];我会得到一个错误,因为数组的总大小被限制为0x7fffffff。为什么?此外,如果我传递一个等于maxSize的非常量表达式,将抛出std::bad_array_new_length。如果我传递一个小于max

c++ - sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候可以不同?

什么时候可以sizeof(size_t)和sizeof(ptrdiff_t)有区别吗?有这方面的真实示例吗?注意,我知道所有标准都说这些类型是实现定义的。但是我知道的所有实现,sizeof(size_t)和sizeof(ptrdiff_t)等于。也许出于某些奇怪(或不太奇怪)的原因,它们可能会有所不同。看来,sizeof(ptrdiff_t)这不是一个非常有用的情况,因为指针运算对于大型数组来说非常有限。另一种情况,sizeof(ptrdiff_t)>sizeof(size_t)可能有点用处,因为所有指针减法都将在数组上定义(如果数组大于PTRDIFF_MAX,则指针减法将为所有远距离

c++ - 计算一个 cuda 内核有多少 block 和线程,以及如何使用它们

我一直在努力弄清楚如何制作一个我认为是简单的内核来取二维矩阵中的值的平均值,但我在直接思考它时遇到了一些问题。根据我的deviceQuery输出,我的GPU有16MP,32cores/mp,block最大为1024x1024x64,我有最大线程/block=1024。所以,我正在处理一些大图像。也许5000pxx3500px或类似的东西。我的一个内核正在对图像中的所有像素取一些值的平均值。现有代码将图像存储为二维数组[行][列]。因此,在C中,内核看起来像您期望的那样,有一个遍历行的循环和一个遍历列的循环,中间有计算。那么如何在CUDA中设置这段代码的维度计算部分呢?我看过SDK中的缩