intrinsics

    2热度

    2回答

    在微软的网站上可以找到的 __addgsbyte (offset, data) __addgsword (offset, data) __addgsdword (offset, data) __addgsqword (offset, data) 内在功能some details。据称, offset 是从GS开始的偏移量。我推测GS是指处理器寄存器。 GS如何与堆栈相关?另外,我怎样

    2热度

    1回答

    GCC和Clang的内部函数,我可以很容易地做到这一点: // absolute value inline constexpr int abs(const int number) { return __builtin_abs(number); } inline constexpr long abs(const long number) { return __

    7热度

    2回答

    我最初的尝试看起来像这样(假设我们要乘) __m128 mat[n]; /* rows */ __m128 vec[n] = {1,1,1,1}; float outvector[n]; for (int row=0;row<n;row++) { for(int k =3; k < 8; k = k+ 4) { __m128 mr

    8热度

    2回答

    我一直在试图优化一些处理原始像素数据的代码。目前代码的C++实现过于缓慢,所以我一直试图使用SSE intrinsics(SSE/2/3不使用4)和MSVC 2008做一些理由。考虑到这是我第一次在这么低的水平上进行挖掘,取得了一些进展。 不幸的是,我已经到一个特定的代码块已经卡住我: //Begin bad/suboptimal SSE code __m128i vnMask = _mm_se

    7热度

    1回答

    我试图混合使用gcc中的SSE2内联函数和内联汇编器。但是,如果我指定一个变量为xmm0 /寄存器作为输入,然后在一些的情况下,我得到一个编译器错误。例如: #include <emmintrin.h> int main() { __m128i test = _mm_setzero_si128(); asm ("pxor %%xmm0, %%xmm0" : : "xmm0"

    8热度

    3回答

    我想知道在Visual C++中是否真的没有128位划分内部函数? 有一个64x64 = 128位乘法内部函数叫做_umul128(),它很好地匹配MUL x64汇编指令。当然,我认为将会有一个128/64 = 64位的内部分区(对DIV指令进行建模),但令人吃惊的是Visual C++和Intel C++似乎都没有它,至少它没有列出intrin.h。 有人可以证实吗?我试图在编译器可执行文件中寻

    7热度

    2回答

    我有一个SSE方法我写执行音频处理的问题。我已经实现了基于Intel的纸这里SSE随机函数: http://software.intel.com/en-us/articles/fast-random-number-generator-on-the-intel-pentiumr-4-processor/ 我也有一个使用SSE还执行从浮点转换到S16的方法,转换很简单如下进行: unsigned in

    10热度

    3回答

    我遇到此错误的问题:“未启用SSE指令集”。我怎么能弄明白这一点? 我有ACER i7,Ubuntu 11.10,请任何人都可以帮到我吗? 任何帮助将不胜感激! 还运行: sudo cat /proc/cpuinfo | grep flags 给出: flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat ps

    1热度

    1回答

    我已经开始使用SSE优化我的代码。本质上,它是一个光线跟踪器,通过将坐标存储在__m128数据类型x,y,z中(四个光线的坐标按轴分组),一次处理4条光线。然而,我有一个分支声明,它可以防止零除以我似乎无法转换为SSE。这是: const float d = wZ == -1.0f ? 1.0f/(1.0f-wZ) : 1.0f/(1.0f+wZ); 其中wZ是z坐标,这个计算需要对所有四条射

    0热度

    1回答

    所以我有一点麻烦找出并行使用openmp的这些循环的最佳方式。我猜,最大速度可达将来自并行环路中间像我在这里做的: for(i = 0; i < m/16*16; i+=16){ #pragma omp parallel for for(j = 0; j < m; j++){ C_column_start = C+i+j*m; c_1 = _m