草庐IT

PERFORMANCE

全部标签

c# - 对于小型密集型任务,C# 的性能与 C++ 的性能有多接近?

我在考虑C++与C#的速度差异主要是C#编译为JIT编译器接收的字节码(正确吗?)以及C#所做的所有检查。我注意到可以在编译选项中关闭很多这些功能,也可以通过使用unsafe关键字来关闭,因为公共(public)语言运行时无法验证不安全代码。因此,如果您要用两种语言编写一个简单的控制台应用程序,无限次地抛一枚假想的硬币,并每10,000次左右的迭代将结果显示在屏幕上,那么速度会有多大差异?我选择它是因为它是一个非常简单的程序。我想对此进行测试,但我不懂C++,也没有编译它的工具。这是我的C#版本:staticvoidMain(string[]args){unsafe{Randomrnd

c++ - 内存泄漏如何提高性能

我正在构建一个充满节点的大型RTree(空间索引)。它需要能够处理许多查询和更新。对象不断地被创建和销毁。我正在运行的基本测试是查看树中对象数量增加时树的性能。我以100为增量插入100-20000个大小均匀、随机定位的对象。搜索和更新与我目前面临的问题无关。现在,当没有NO内存泄漏时,“插入树”性能无处不在。从约15000个对象的10.5秒到约18000个对象的1.5秒不等。没有任何模式。当我故意添加泄漏时,就像添加“newint;”一样简单我没有将它分配给任何东西,它本身有一条线,性能立即下降到一条漂亮的平缓曲线上,从100个对象的0(大约)秒到整个20k的1.5秒。此时非常非常迷

c++ - 仿函数与模板参数

将模板参数与静态成员函数一起使用而不是仿函数式谓词是否有任何性能优势?例如,仿函数样式的排序接口(interface)通常是这样的:templatevoidsort(RandomAccessIteratorfirst,RandomAccessIteratorlast,_Predless_than){//actualsortingcodehere,callingless_than()...}你可以做更多类似的事情,并要求_Pred包含一个静态成员函数_Pred::less_than:templatevoidsort(RandomAccessIteratorfirst,RandomAcce

c++ - Taglib:性能和崩溃问题

我在我的Qt应用程序中使用taglib库(1.7.2),从音乐文件夹中读取mp3文件的一些元数据。问题是我发现它很慢。例如,这是代码:QStringpath="C:/Music/";QDird(path);QStringListfileTypes;fileTypes此代码大约需要11秒来加载包含400首歌曲的文件夹,即每个文件大约需要28毫秒。这是一条很慢的线路:TagLib::FileRef*f=newTagLib::FileRef(pathFile.toStdWString().c_str());这么长正常吗?我试过使用多线程,但它没有改变任何东西,而且它不是来self的PC,因为

c++ - 性能与 SSE 相同

我矢量化了以下循环,它出现在我正在开发的应用程序中:voidvecScl(Node**A,Node*B,longval){intfact=round(dot/const);for(i=0;ivector[i]-=fact*B->vector[i];}这是SSE代码:voidvecSclSSE(Node**A,Node*B,longval){intfact=round(dot/const);__m128ivecPi,vecQi,vecCi,vecQCi,vecResi;intsseBound=SIZE/4;for(i=0,j=0;jvector)[i]);vecQi=_mm_set_ep

c++ - 是否可以在 "reserved"cpu 内核上运行代码?

简化背景:我的应用程序运行很多任务。其中大部分是CPU密集型的。一个任务(实际上是一个循环运行的单线程,监听来自网络的数据包)是一个非常“实时”的任务。更有趣的是,该线程是使用pinvoke调用的native代码。问题:当显示大量流量时,任务非常努力,所有核心都已满负荷运转。发生这种情况时,“实时”线程(在100%cpu内核上运行)开始丢弃数据包,因为它没有获得足够的cpu时间。问题:有可能以某种方式为“实时”线程“保留”一个核心,并将所有其他线程(任务)限制到其他核心吗?当然,还有其他进程在运行,也消耗CPU时间,但我们假设它们消耗的资源很少且持续存在。这是一个真正的问题,可以通过“

c++ - x86 上简单循环中的慢速指令

我有一个用C++编写的简单循环,因为我想分析乘法指令在我的CPU上的性能。我在分析它时生成的汇编代码中发现了一些有趣的细微差别。这是C++程序:#defineTESTS10000000#defineBUFSIZE1000uint32_tbuf_in1[BUFSIZE];uint32_tbuf_in2[BUFSIZE];uint32_tvolatilebuf_out[BUFSIZE];unsignedinti,j;for(i=0;i我使用以下标志编译:优化:代码生成:虽然我在64位机器上运行它,但它是在Win32下的visualstudio2012中编译的。注意buf_out上的vola

c++ - DSP性能,应该避免什么?

我现在开始使用DSP编程,并且正在编写我的第一个低级类和函数。由于我希望函数速度快(或者至少不是低效的),所以我经常想知道在每个样本调用的函数中我应该使用什么以及应该避免什么。我知道指令的速度差异很大,但我认为你们中的一些人至少可以分享经验法则或经验。:)条件语句如果我必须使用条件,switch应该比if/elseifblock更快,对吗?使用两个if语句或一个if-else之间有区别吗?我在某处读到应该避免使用else但我不知道为什么。此外,与乘法相比,是否有一个粗略的估计ifblock需要多少时间?因为在某些情况下,可以使用乘以零来代替if语句://somethingcouldbe

c++ - 堆数组性能慢

我遇到了奇怪的内存访问性能问题,有什么想法吗?int*pixel_ptr=somewhereFromHeap;intlocal_ptr[307200];//local//thisisveryslowfor(inti=0;i尝试将值合并到本地扫描线intscanline[640];//local//thisisveryslowfor(inti=xMin;i有什么想法吗?我正在使用带有cflags-01-std=c++11-fpermissive的mingw。更新4:我不得不说,这些是我程序的片段,前后运行了大量代码/函数。扫描线block确实在退出前在函数末尾运行。现在有了适当的测试程序

c++ - 网格 : "Sorting/Reordering" Arrays Referencing Shared Entries of Another for Cache Efficiency

给定一个顶点数组:{v1,v2,v3,v4,v5,...,vN}和K个多边形用这样的块索引它,用于示例4边多边形*:{v7,v2,v51,v16}请注意,两个或多个多边形可能共享同一个顶点。事实上,大多数顶点将由4-6个多边形共享(四边形网格的价数为4,三角形网格的价数为6)。...我们如何有效地重新排序/排序顶点数据,例如在读取给定多边形的顶点时减少缓存未命中?我对一种在合理时间内完成的算法感兴趣,而不仅仅是提供最佳结果的算法。在这里,即使是一些粗略的启发式方法也比完全任意的顺序要好。理想的情况是将{v1052,v507213,v63252,v3}之类的东西变成更像:{v70,v71