草庐IT

PERFORMANCE

全部标签

c++ - 用于成员变量无锁更新的环形分配器?

我有一个类存储一些传入实时数据的最新值(大约1.5亿个事件/秒)。假设它看起来像这样:classDataState{Eventlatest_event;public://pusheseventatomicallyvoidpush_event(constEvent__restrict__*e);//pullseventatomicallyEventpull_event();};我需要能够以原子方式推送事件并以严格的顺序保证拉取它们。现在,我知道我可以使用自旋锁,但考虑到大量事件发生率(超过1亿/秒)和高度并发,我更愿意使用无锁操作。问题是Event大小为64字节。没有CMPXCHG64B

由 C++ 静态 lambda 性能

我偶然发现了这段使用C++lambda的代码:qrealdefaultDpiScale(){staticqrealscale=[](){if(constQScreen*screen=QGuiApplication::primaryScreen())returnscreen->logicalDotsPerInchX()/96.0;return1.0;}();returnscale;}为什么有人会使用lambda编写此函数而不是像这样:qrealdefaultDpiScale(){if(constQScreen*screen=QGuiApplication::primaryScreen()

c++ - 使用CUDA对两个数组求和

我在学习thisguide的同时正在学习CUDA。我还没有完成,但是我决定尝试一下到目前为止所看到的。我试图重写第一个使用256个线程的示例。我想这样做,以便每个线程都在数组的连续切片上进行操作。目标是将2个数组与1,048,576个项相加。为了进行比较,这是原始代码,其中根据跨步访问每个数组项:__global__voidadd(intn,float*x,float*y){intindex=threadIdx.x;intstride=blockDim.x;for(inti=index;i这是我的功能:__global__voidadd2(intn,float*x,float*y){i

c++ - 运算符比函数快吗?

在搜索new和malloc的区别时,我遇到了这个语句(source):newisfasterthanmalloc()becauseanoperatorisalwaysfasterthanafunction.运算符总是比函数快吗?如果是这样,为什么?我真的很感激低层次的解释(你可以假设基本的编译器、SASS和硬件知识)。 最佳答案 newisfasterthanmalloc()becauseanoperatorisalwaysfasterthanafunction.这是完全不正确的。事实上,new表达式的默认行为是在内部调用mallo

c++ - 了解 std::string 的效率

我正在努力学习更多关于C++字符串的知识。考虑constchar*cstring="hello";std::stringstring(cstring);和std::stringstring("hello");假设在应用程序的.data部分存储“hello”,然后将字节复制到堆上的另一个区域,由std::string管理的指针可以访问它们,我是否正确?我怎样才能有效地存储一个非常非常长的字符串?我正在考虑一个从套接字流中读取数据的应用程序。我害怕连接很多次。我可以想象使用一个链表并遍历这个列表。字符串让我害怕太久了!任何链接、提示、解释和更多详细信息都将非常有帮助。

c++ - 关于如何使用英特尔的集成性能原语评估 openCV 的建议?

我们有相当数量的openCV代码,我们计划调查英特尔的IPP,看看我们可以在我们的应用程序中实现什么样的加速。英特尔有一份关于如何链接OpenCV和IPP的白皮书。UsingIntelIPPwithOpenCV看起来在某些情况下链接可能是自动的,但支持的数量尚不清楚。我们是一家橱窗商店,对任何war故事或执行此类评估时需要注意的问题/问题感兴趣。谢谢 最佳答案 OpenCV越来越少和IPP有关系了。后来几年,与GCC或Intel平台上任何其他不错的编译器的结果相比,IPP很难提供更好的东西。在过去,IPP提供了高达50%的加速,但如

c++ - 深层嵌套循环的缓存中毒问题

我正在为一种数学方法(IncompleteCholesky)编写代码,但遇到了一个奇怪的障碍。请看下面的简化代码。for(k=0;kA1_[row][col]-=localFuncArr[row][col];}}}}}//Innerloopiendshere}//Innerloopjendshere}//outerloopkendshere对于上下文,statObj是一个包含多个3x3静态double组的对象。我正在通过调用新函数来初始化statObj。然后我使用一些数学函数填充其中的数组。一个这样的数组是A1_。变量nosUnknowns的值在3000左右。数组localFuncAr

c++ - C/C++中的gettext国际化系统的性能开销

我只是阅读了http://www.gnu.org/software/gettext/manual/gettext.html的文档,而根本没有关于性能开销的讨论。在互联网上,我只发现了针对其他语言(PHP和Java)的性能讨论,而没有针对C/C++的性能讨论。因此,我的问题是:使用gettext的程序启动过程中的性能开销是什么(加载共享库?翻译如何加载到内存中?所有翻译是在启动还是按需加载的吗?)该程序正常运行期间的性能损失是多少?(即需要翻译时)程序增加的内存占用量是多少?如何组织内存?在程序空闲时将程序的某些部分交换到磁盘上是否有更高的危险/可能性?(如果翻译与程序的其余部分存储在内

c++ - 未使用的默认参数会降低性能 C++

假设我声明了一个函数foo(intarg1,intarg2=0,intarg3=0,intarg4=0)。最后三个参数只会偶尔指定(如果有的话),大多数情况下,函数将被称为foo(some_int)。我是否可以通过将函数声明为foo(intarg1)来获得性能,并在确实需要时使用不同的解决方案来传递其他参数?换句话说,声明但未指定的默认参数会使函数调用变慢吗?本例中的函数是对象的构造函数,但这是一个一般性问题。 最佳答案 (喜欢的可以看最后的结论)我做了一个基准测试来测试这个,我先把这个短程序跑了大约十次:#include#incl

c++ - 代码优化子集总和

这是我的代码,它打印总和等于给定总和的子集元素(它仅适用于正数):#includeusingnamespacestd;voidtraverse(vectorvec){for(inta=0;avec,intsum,vectornow){if(sum==0){traverse(now);}elseif(sum0&&vec.size()>0){for(inta=0;avecc(vec.begin()+a+1,vec.end());possible(vecc,sum-vec[a],now);now.erase(now.end()-1);}}}intmain(){intn,sum;cin>>n>