小编sga*_*zvi的帖子

使用std :: vector的稀疏矩阵的缓慢性能

我正在尝试实现MATLAB功能sparse.

在特定索引处的稀疏矩阵中插入值,以便:

如果矩阵中已存在具有相同索引的值,则添加新旧值.

否则,新值将附加到矩阵.

该功能addNode正常运行,但问题是它非常慢.我在循环中调用此函数大约100000次,程序运行时间超过3分钟.而MATLAB在几秒钟内完成了这项任务.有没有办法优化代码或使用stl算法而不是我自己的函数来实现我想要的?

码:

struct SparseMatNode
{
   int x;
   int y;
   float value;
};

std::vector<SparseMatNode> SparseMatrix;

void addNode(int x, int y, float val)
{
   SparseMatNode n;
   n.x = x;
   n.y = y;
   n.value = val;

   bool alreadyPresent = false;

   int i = 0;
   for(i=0; i<SparseMatrix.size(); i++)
   {
    if((SparseMatrix[i].x == x) && (SparseMatrix[i].y == y))
    {
        alreadyPresent = true;
        break;
    }
   }

   if(alreadyPresent)
   {
    SparseMatrix[i].value += val;
    if(SparseMatrix[i].value == 0.0f)
        SparseMatrix.erase(SparseMatrix.begin + i);
   }
   else …
Run Code Online (Sandbox Code Playgroud)

c++ sparse-matrix

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

CUDA纹理线性过滤

在CUDA C编程指南第5版附录E.2(线性过滤)中,声明:

在这种仅适用于浮点纹理的过滤模式中,纹理提取返回的值是......

大胆的部分令我困惑.难道floating point仅仅意味着纹理元素类型或返回类型也?例如,我声明了3个纹理,如下所示.

texture<float,cudaTextureType2D> tex32f;
texture<unsigned char, cudaTextureType2D, cudaReadModeNormalizedFloat> tex8u;
texture<unsigned short, cudaTextureType2D, cudaReadModeNormalizedFloat> tex16u;
Run Code Online (Sandbox Code Playgroud)

线性过滤tex32f仅适用于,也适用于tex8utex16u

textures cuda

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

纹理解除绑定的目的?

解除绑定到线性内存或CUDA数组的CUDA纹理的目的是什么?

在我的许多CUDA程序中,我使用绑定线性内存的纹理cudaBindTexture2D.在函数结束时,我cudaUnbindTexture用来释放纹理.

有几次,我忘了解开纹理.但它对功能的性能和结果没有明显的影响.

是否真的有必要解开纹理?如果我不解除它会产生什么后果?它会导致内存泄漏吗?

textures cuda

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

C++和OpenCV:问题将图像转换为灰度

这是我的代码.这很简单.

Mat image  = imread("filename.png");

imshow("image", image);
waitKey();

//Image looks great.

Mat image_gray;
image.convertTo(image_gray, CV_RGB2GRAY);

imshow("image", image_gray);
waitKey();
Run Code Online (Sandbox Code Playgroud)

但是当我调用该image.convertTo(image_gray, CV_RGB2GRAY);行时,我收到以下错误消息:

OpenCV Error: Assertion failed (func != 0) in unknown function, file ..\..\..\sr
c\opencv\modules\core\src\convert.cpp, line 1020
Run Code Online (Sandbox Code Playgroud)

使用OpenCV 2.4.3

c++ rgb opencv grayscale

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

推荐的C++库设计

我正在开发一个C++库,提供与图像/信号处理和其他东西相关的不同功能.它基本上是一个开发库,供开发人员进一步使用.我希望它尽可能方便易用.我有3种不同的型号:

型号1:

一个包含库的所有功能的大型命名空间.例如,C++标准库是在namespace std.或OpenCV在里面实现namespace cv.

namespace library
{
    //all classes, variables, functions, datatypes are present inside this namespace
}
Run Code Online (Sandbox Code Playgroud)

型号2:

父命名空间,根据功能进一步细分为子命名空间.例如,.NET框架的父namespace System含有namespace Collections,namespace Windows等等......

namespace library
{
    //datatypes go here

    namespace group1
    {
       //functions related to group 1
    }

    namespace group2
    {
       //functions related to group 2
    }

    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

型号3:

与模型2几乎相同,但包含函数作为static类的成员而不是命名空间.

namespace library
{
   //datatypes go here

   class group1
   {
     public:
        static function1();
        static function2(); …
Run Code Online (Sandbox Code Playgroud)

c++ dll design-patterns

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

在Visual C++中找不到CUDA 5.0的构建自定义

我是第一次尝试CUDA gpu编程,并在设置构建自定义时遇到了问题.我不确定我是否只是做错了.基本上,当我设置项目构建自定义到CUDA 5.0时,它不起作用.我尝试制作.cu(甚至.cpp)文件,我收到一条错误消息:

找不到导入的项目"C:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomization\CUDA 5.0.props".确认声明中的路径是否正确,以及该文件是否存在于磁盘上.c:\ Users \"USER NAME"\ documents\visual studio 2010\Projects \"PROJECT NAME"\"PROJECT NAME".vcxproj

之后,项目属性页面变为空,只有一个空框架和参考页面.关闭CUDA声明什么都不做.

我尝试卸载CUDA工具包并重新安装但无济于事.

我对此很新,但任何帮助都将不胜感激!

cuda visual-studio-2010

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

img.at <uchar>(i,j)是什么意思?

这是一个基本问题.我不知道这个结构是什么.

img.at<uchar>(i,j) 
Run Code Online (Sandbox Code Playgroud)

本来应该是?我试图找到定义at,但无法理解它.这个语法意味着什么?

<uchar> 
Run Code Online (Sandbox Code Playgroud)

同样,意思是什么

img.at<cv::Vec3b>(row,col)[channel] 
Run Code Online (Sandbox Code Playgroud)

是的,Mat是矩阵类来操纵矩阵数据.我了解上述那些行为的行为却无法理解它们背后的理论?

这个语法是什么意思?

img.at<cv::Vec3b>
Run Code Online (Sandbox Code Playgroud)

c++ opencv mat

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

cudaEventElapsedTime()的精度是多少?

假设我调用a cudaEventElapsedTime()并获取返回值0.123456.那么它建议的确切时间是多少?

cuda gpu

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

Opencv矩阵乘法

我需要乘以矩阵及其转置,但我得到以下错误:

"OpenCV错误:断言失败(类型== B.type()&&(类型== CV_32FC1 ||类型== CV_64FC1 || type == CV_32FC2 || type == CV_64FC2))在未知函数中,文件.. .. ..\src\opencv\modules\core\src\matmul.cpp,第711行"

这是代码:

int dA[] = {
     1,     2,     3,
     4,     5,     6,
     6,     5,     4,
    }; 
Mat A = Mat(3,3, CV_32S, dA );
Mat C = A.t()* A;
Run Code Online (Sandbox Code Playgroud)

c++ opencv matrix-multiplication

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

C++滥用字符串连接

所以我在最近几个月生成了一些代码,可能更多,我使用C++字符串库来连接字符串.像这样:

template< typename T >
string tostr( const T & val ); // implmented wherever

void somelibraryfunction( const char * );

// begin actual code

somelibraryfunction( ( "foo" + tostr( 5 ) ).c_str( ) );
Run Code Online (Sandbox Code Playgroud)

这编译并正常工作.我担心的是,创建的字符串临时在c_str被占用的地址被销毁之后被破坏,而我只是依赖于读取最近释放但未清除的内存.有什么想法吗?

c++ string

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