草庐IT

sse-stream

全部标签

c++ - 使用 std::streams 格式化输出

我有一个我希望能够流式传输的对象。但是我希望能够通过使用不同的格式以不同的方式流式传输它,或者我应该说描述这个对象的方法。我想知道这应该如何用流来解决。我想要的是能够使用通用格式并使用某种格式适配器将通用格式转换为首选格式。我还希望能够将格式与Item的实现分开,这样我就不必在每次添加或更改新格式时都更改Item。这段代码大致说明了我想要什么。Itemitem;std::cout但这可能是不可能的或不切实际的。面对这样的问题,流媒体库打算如何使用? 最佳答案 我个人会写一套格式化程序。格式化程序必须知道他们正在格式化的对象的内部结构

c++ - 加快一些 SSE2 Intrinsics 的颜色转换

我正在尝试执行从YCbCr到BGRA的图像颜色转换(不要问A位,好头疼)。无论如何,这需要尽可能快地执行,所以我使用编译器内部函数编写它以利用SSE2。这是我第一次涉足SIMD领域,我基本上是一个初学者,所以我确信我做的很多事情都是低效的。事实证明,我执行实际颜色转换的算术代码特别慢,Intel的VTune显示它是一个重大瓶颈。那么,有什么方法可以加快以下代码的速度吗?它以32位、一次4个像素完成。我最初尝试以8位、一次16个像素(如上循环)进行计算,但计算导致整数溢出和转换中断。整个过程,包括Inteljpeg解码,对于全高清的单场大约需要14毫秒。如果我能将它降低到至少12毫秒,最

c++ - boost::spirit stream_parser 消耗太大?

我在将类与iostream解析集成时遇到了一些问题支持spirit解析器。下面的示例(修改自Spirit示例)演示了问题。如果我尝试仅解析自定义类,它会成功由第一个解析和断言调用显示。如果我尝试解析自定义类以及(在本例中)逗号和float,解析器失败。谁能解释为什么会这样?如果我使用spirit解析器而不是流解析器,我可以使第二个示例工作,但是这违背了使用stream_parser的目的。我在本地示例中启用了规则调试,这表明自定义解析器使用字符串的全部内容-然而,代码表明它不应该这样做......感谢任何帮助!boost1.44.0,海合会4.1.1#includestructcomp

提高Java开发生产力,我选Stream API,真香啊

Java8引入的StreamAPI提供了一种新的数据处理方式,它以声明式、函数式的编程模型,极大地简化了对集合、数组或其他支持数据源的操作。Stream可以被看作是一系列元素的流水线。允许你高效地对大量数据执行复杂的过滤、映射、排序、聚合等操作,而无需显式地使用循环或者临时变量。StreamAPI的设计理念主要包括两个方面:链式调用和惰性求值。链式调用允许我们将多个操作连接在一起,形成一个流水线,而惰性求值意味着只有在真正需要结果的时候才执行计算,从而避免了不必要的计算开销。接下来我们就来盘点一下日常开发中常用的一些StreamAPI。创建Stream集合创建Listlist=newArray

c++ - 将 boost filtering_stream 替换为 std::ofstream 的参数语法

关于boostfiltering_streams的一些基本问题。我有几十个函数接受std::ofstream&的参数voidfoo(std::ofstream&outStream){//lotsofoperations,likethis:outStream现在我想使用boostfiltering_stream输出到一个压缩的ZIP文件。经常引用的用于打包和解包的boostfiltering_streams测试代码经过编译、链接和完美运行。我想替换filtering_stream:voidStreamSomeCompressedTextToFile(char*fileName){ofst

c++ - 使用 SSE 计算矩阵乘积比使用直接算法慢得多

我想使用直接算法将两个矩阵相乘一次:templatevoidmultiplicate_straight(T**A,T**B,T**C,intsizeX){T**D=AllocateDynamicArray2D(sizeX,sizeX);transpose_matrix(B,D,sizeX);for(inti=0;i(D);}还有一次是通过使用SSE函数。为此,我创建了两个函数:templatevoidSSE_vectormult(T*A,T*B,intsize){__m128da;__m128db;__m128dc;#ifdeflinuxdoubleA2[2],B2[2],C[2]__

c++ - 设置 SSE 寄存器中的最后或前 n 位

我如何创建一个__m128i并设置了n个最高有效位(在整个vector中)?我需要它来屏蔽与计算相关的缓冲区部分。如果可能的话,解决方案应该没有分支,但这似乎很难实现我该怎么做? 最佳答案 我将此添加为第二个答案,并将第一个答案留给历史兴趣。看起来你可以用_mm_slli_epi64做一些更有效的事情:#include#include__m128ibit_mask(intn){__m128iv0=_mm_set_epi64x(-1,-(n>64));//ANDmask__m128iv1=_mm_set_epi64x(-(n>64),

c++ - 什么是 __memset_sse2 以及它为什么执行这么多指令?

我有两个算法的C++实现,称它们为A和B.A之间的唯一区别和B是那个A使用std::unordered_maphashmap;但是B使用google::dense_hash_maphashmap;.我在A中找到了一个输入与B相比慢得多我不明白为什么。对于相同的输入,我运行sudoperfrecord-einstructions./Ainput.txt然后我得到这个结果:OverheadCommandSharedObjectSymbol65.90%Alibc-2.23.so[.]__memset_sse26.63%Alibc-2.23.so[.]_int_malloc3.44%Alibc

c++ - 关闭 boost asio ssl 套接字时需要调用 ssl::stream::shutdown 吗?

我的代码如下:declaration:boost::asio::ssl::streamm_remote_socket;m_remote_socket.shutdown(ec);if(ec){cdbug每次调用m_remote_socket.shutdown时,它都会出错。这种错误值非常大的未知错误。但是不调用m_remote_socket.shutdown直接调用m_remote_socket.lowest_layer().shutdown()也是可以的。谁能告诉我如何关闭ssl流套接字? 最佳答案 对ssl::stream及其lo

c++ - SSE Intrinsics 和循环展开

我正在尝试优化一些循环并且我已经成功了,但我想知道我是否只做了部分正确的事情。比如说我有这个循环:for(i=0;i将它展开3倍,产生这个:intunroll=(n/4)*4;for(i=0;i现在是SSE翻译等价物:__m128ai_v=_mm_loadu_ps(&a[i]);__m128two_v=_mm_set1_ps(2);__m128ai2_v=_mm_mul_ps(ai_v,two_v);_mm_storeu_ps(&b[i],ai2_v);或者是:__m128ai_v=_mm_loadu_ps(&a[i]);__m128two_v=_mm_set1_ps(2);__m12