小编Boy*_*nov的帖子

如何预分配(保留)priority_queue <vector>?

如何std::priority_queue使用类型的容器预分配std::vector

std::priority_queue<unsigned char, std::vector<unsigned char>> pq;
pq.c.reserve(1024);
Run Code Online (Sandbox Code Playgroud)

不编译,因为底层向量是受保护的成员.是否可以使用它的构造函数将priority_queue其包装在预先保留的向量周围?

c++ allocation vector std priority-queue

12
推荐指数
2
解决办法
3068
查看次数

(opencv rc1)是什么导致Mat乘法比每像素乘法慢20倍?

// 700 ms
cv::Mat in(height,width,CV_8UC1);
in /= 4;
Run Code Online (Sandbox Code Playgroud)

替换为

//40 ms
cv::Mat in(height,width,CV_8UC1);
for (int y=0; y < in.rows; ++y)
{
    unsigned char* ptr = in.data + y*in.step1();
    for (int x=0; x < in.cols; ++x)
    {
        ptr[x] /= 4;
    }
}
Run Code Online (Sandbox Code Playgroud)

什么可以导致这种行为?是因为opencv"推广"Mat与Scalar乘法Mat匹配Mat乘法,还是特定的失败优化?(启用了NEON).

c++ java-native-interface opencv arm neon

8
推荐指数
1
解决办法
834
查看次数

将全局复制到共享内存的最佳方法

假设我有一个需要随机访问 1024 个元素数组的 32 个线程块。我想通过最初将块从全局转移到共享来减少全局内存调用的数量。我有两个想法:

A:

my_kernel()
{
    CopyFromGlobalToShared(1024 / 32 elements);
    UseSharedMemory();
}
Run Code Online (Sandbox Code Playgroud)

或乙:

my_kernel()
{
    if (first thread in block)
    {
        CopyFromGlobalToShared(all elements);
    }
    UseSharedMemory();
}
Run Code Online (Sandbox Code Playgroud)

哪个更好?或者还有其他更好的方法吗?

c c++ cuda

3
推荐指数
1
解决办法
845
查看次数

是否所有传统相机都通过camera2(API级别21)公开?

是否所有API级别21设备都需要至少在LEGACY支持类型中为所有摄像机(例如正面,背面)公开camera2包装?

换句话说,在新的android.hardware.camera2界面下,或者甚至对于相机设备来说,Android 5相机在不推荐使用的android.hardware.Camera界面下更具功能性(并且确实发生了)是不可能找到或使用android.hardware.camera2设备?

legacy camera android

3
推荐指数
1
解决办法
1866
查看次数

CUDA是否包含真正的c ++库?

"CUDA c ++"语言是一种c ++派生语言,但标准编译器不支持它,但可以由nVidia的nvcc编译器编译.这可以导致多语言项目,其中GPU模块使用nvcc编译,而非GPU模块使用gcc编译.

例如,语法kernel<<<dims>>>(params)不是c ++的一部分.

nVidia是否包含一个GPU库(作为CUDA的一部分),它实际上可以与标准的c ++编译器(如gcc)一起使用?

c++ cuda

2
推荐指数
1
解决办法
458
查看次数

用作整数的float的行为

假设我们必须使用float变量作为计数器 - 例如

float i = 1;
float previ = 0;
do 
{
   previ = i;
}
while (i++);
Run Code Online (Sandbox Code Playgroud)

i(i-previ)与1的值有什么不同?这种差异仍然是一个整数,还是会成为一个理性的非整数?

c floating-point

1
推荐指数
1
解决办法
870
查看次数

有没有办法加快对以下表达式的评估?

我已经分析了我的程序,它花费了20%的CPU时间,基本上评估了以下表达式:

abs(x) > abs(y)
Run Code Online (Sandbox Code Playgroud)

其中x,y是双精度浮点变量.

有没有办法将表达式重构为更快的变体?

以下行(在两个不同的地方调用)在每行占用接近10%的CPU时间:

(这是函数Image_3 :: TestGradientAtPoint的片段)

       if (abs(maxx[ch]) < abs(a)) maxx[ch] = a; 
01187AC9  mov         eax,dword ptr [ch]  
01187ACC  sub         esp,8  
01187ACF  fld         qword ptr [ebp+eax*8-68h]  
01187AD3  fstp        qword ptr [esp]  
01187AD6  call        abs (11305F9h)  
01187ADB  fld         qword ptr [ebp-70h]  
01187ADE  fstp        qword ptr [esp]  
01187AE1  fstp        qword ptr [ebp-0F8h]  
01187AE7  call        abs (11305F9h)  
01187AEC  add         esp,8  
01187AEF  fcomp       qword ptr [ebp-0F8h]  
01187AF5  fnstsw      ax  
01187AF7  test        ah,41h  
01187AFA  jne         Image_3::TestGradientAtPoint+176h (1187B06h)
01187AFC  mov         eax,dword ptr …
Run Code Online (Sandbox Code Playgroud)

c++ math optimization math.h

1
推荐指数
2
解决办法
275
查看次数

cv :: LUT() - 什么是插值参数?

 void LUT(InputArray src, InputArray lut, OutputArray dst, int interpolation=0 )
Run Code Online (Sandbox Code Playgroud)

根据查找表,在8位数组中进行替换,并将结果存储在dst中.

关于该函数的opencv 官方文档对interpolation参数没有提及.它用于什么以及可以为它传递什么值?

c++ opencv

1
推荐指数
1
解决办法
919
查看次数

如何使用std :: vector <bool>进行文件I/O?

我需要实现一个布尔数据容器,它将存储相当多的变量.我想我可以使用char*和实现C风格的宏访问器,但我更喜欢将它包装在一个std::结构中.std::bitset<size_t>似乎不实用,因为它具有固定的编译时大小.

这样我std::vector<bool>就可以优化空间; 它有一个很好的bool式存取器.

  1. 有没有办法做一些事情,比如直接从它输入一个指针fwrite()

  2. 如何将输入文件输入到这样的向量中?

  3. 最后,当需要大量文件I/O时,它是一个很好的数据结构吗?

  4. 那么随机文件访问(fseek等)呢?

编辑:我已经决定std::vector<unsigned int>在一个新类中包装一个具有我的要求所需功能的新类.

c++ boolean bit-manipulation

0
推荐指数
1
解决办法
705
查看次数

返回常量的函数是否比void函数慢?

突出差异的最简单示例:

int foo()
{
   doSomething();
   return 0;
}

void bar()
{
   doSomething();
   return;
}

int main()
{
   foo();
   bar();
}
Run Code Online (Sandbox Code Playgroud)

barfoo,为什么?

c++ performance

0
推荐指数
2
解决办法
215
查看次数