草庐IT

intrinsics

全部标签

c++ - 不同的内在行为取决于 GCC 版本

我对内在函数很陌生,我在GCC-7.4和GCC-8.3中遇到了我的代码的不同行为我的代码很简单b.cpp:#include#includevoidfoo(constfloatnum,constfloatdenom){const__v4sfnum4={num,num,num,num,};const__v4sfdenom4={denom,denom,denom,denom,};floatres_arr[]={0,0,0,0};__v4sf*res=(__v4sf*)res_arr;*res=num4/denom4;std::cout在b.cpp中,我们基本上只是从浮点变量构造两个__v4s

c++ - SIMD 内部函数 : _mm_stream_load_si128 vs _mm_load_si128

什么时候应该使用流媒体版本以及什么时候使用SSE2与_mm_load_si128?什么是性能权衡? 最佳答案 流加载内在(mm_stream_load_si128)执行加载“使用非时间内存提示”(根据IntelIntrinsicsGuide)。这意味着加载的值不会导致从缓存中逐出任何内容。如果您将大量数据组合在一起,您将立即对其进行操作并且“很长”一段时间内不再查看,这将非常有用。最常见的情况是在流操作期间发生这种情况。当我知道我正在对一个大数据集执行一个简单的操作时,我就使用过它,我知道数据无论如何都会很快从缓存中被逐出。memc

c++ - 如何使用 SSE 高效地进行 int8/int64 转换?

我正在SSE类型之间实现转换,我发现为SSE4.1之前的目标实现int8->int64扩展转换很麻烦。最直接的实现是:inline__m128iconvert_i8_i64(__m128ia){#ifdef__SSE4_1__return_mm_cvtepi8_epi64(a);#elsea=_mm_unpacklo_epi8(a,a);a=_mm_unpacklo_epi16(a,a);a=_mm_unpacklo_epi32(a,a);return_mm_srai_epi64(a,56);//missinginstrinsic!#endif}但是由于_mm_srai_epi64在A

c++ - 如何优化一个周期?

我有以下瓶颈功能。typedefunsignedcharbyte;voidCompareArrays(constbyte*p1Start,constbyte*p1End,constbyte*p2,byte*p3){constbyteb1=128-30;constbyteb2=128+30;for(constbyte*p1=p1Start;p1!=p1End;++p1,++p2,++p3){*p3=(*p1我想用SSE2内部函数替换C++代码。我试过_mm_cmpgt_epi8但它使用了签名比较。我需要无符号比较。有什么技巧(SSE、SSE2、SSSE3)可以解决我的问题吗?注意:在这种

c++ - 如何将两组 4 条短裤加载到 XMM 寄存器中?

我刚刚开始使用VisualC++2012使用SSE内部函数,我需要一些指导(没有双关语意)。我有两个数组,每个数组包含4个signedshort(因此每个数组都是64位的,总共128个)。我想将一个加载到XMM寄存器的高位,另一个加载到低位。我可以使用SSE内在函数有效地完成这项工作吗?如果是,怎么办? 最佳答案 SSE2:shortA[]={0,1,2,3};shortB[]={4,5,6,7};__m128ia,b,v;a=_mm_loadl_epi64((const__m128i*)A);b=_mm_loadl_epi64((

c++ - 如何将 C++ 类转换为内部类型

基础C++类问题:我目前有简单的代码,看起来像这样:typedefintsType;intarray[100];inttest(sTypes){returnarray[(int)s];}我想要的是将“sType”转换为一个类,这样就不需要更改“returnarray[(int)s]”行。例如(伪代码)classsType{public:intcastInt(){returnval;}intval;}intarray[100];inttest(sTypes){returnarray[(int)s];}感谢您的帮助。 最佳答案 clas

c++ - OpenGL/VTK : setting camera intrinsic parameters

我正在尝试在VTK中渲染3D网格的View,我正在执行以下操作:vtkSmartPointerrender_win=vtkSmartPointer::New();vtkSmartPointerrenderer=vtkSmartPointer::New();render_win->AddRenderer(renderer);render_win->SetSize(640,480);vtkSmartPointercam=vtkSmartPointer::New();cam->SetPosition(50,50,50);cam->SetFocalPoint(0,0,0);cam->SetVi

c++ - SSE 内在函数中的 if/else 语句

我正在尝试使用SSE内在函数优化一小段代码(我是该主题的完全初学者),但我对条件的使用有点卡住。我原来的代码是:unsignedlongc;unsignedlongconstant=0x12345678;unsignedlongtable[256];intn,k;for(n=0;n>1);elsec>>=1;}table[n]=c;}这段代码的目的是计算一个crc表(常数可以是任何多项式,在这里不起作用),我想我的优化代码会是这样的:__m128x;__m128y;__m128*table;x=_mm_set_ps(3,2,1,0);y=_mm_set_ps(3,2,1,0);//of

c++ - 使用(float&)int可以进行类型修剪,(float const&)int可以像(float)int那样转换吗?

VS2019版本x86。templatefloatget()const{intf=_mm_extract_ps(fmm,i);return(floatconst&)f;}当使用return(float&)f;编译器使用时extractpsm32,...movssxmm0,m32。正确的结果当使用return(floatconst&)f;编译器使用时extractpseax,...movdxmm0,eax。错误的结果T&和Tconst&首先是T,然后是const的主要思想。const只是程序员的某种协议(protocol)。您知道您可以解决它。但是汇编代码中没有任何const,只能输入f

ios - iOS 13 beta 中 WKWebView 的 Intrinsic Content Size 问题

我试图在加载WKWebView时获取它的高度,并使用委托(delegate)方法更改TableView中单元格的高度。下面的代码在iOS12之前运行良好。当我尝试在iOS13beta中运行时,单元格高度不断增加,因为固有大小每次都不断增加1。有什么办法可以阻止吗?overridevarintrinsicContentSize:CGSize{print("intrinsiccontentsizeid\(self.scrollView.contentSize.height)")self.delegate?.changeHeight(self.scrollView.contentSize.h