小编pla*_*cel的帖子

如何反转__m128类型变量?

我知道这应该是一个谷歌搜索问题,但我找不到答案.

说我有一个__m128变量a,其内容是a[0],a[1],a[2],a[3].有没有一种单一的,可以扭转它是功能a[3],a[2],a[1],a[0]

c c++ x86 sse simd

7
推荐指数
1
解决办法
1475
查看次数

如何使用SSE执行uint32/float转换?

在SSE中有一个函数_mm_cvtepi32_ps(__m128i input),它接受32位宽的有符号整数(int32_t)的输入向量并将它们转换为floats.

现在,我想将输入整数解释为未签名.但是没有功能_mm_cvtepu32_ps,我找不到一个实现.你知道我在哪里可以找到这样的功能,或者至少对实现有所暗示吗?为了说明结果的差异:

unsigned int a = 2480160505; // 10010011 11010100 00111110 11111001   
float a1 = a; // 01001111 00010011 11010100 00111111;  
float a2 = (signed int)a; // 11001110 11011000 01010111 10000010
Run Code Online (Sandbox Code Playgroud)

c x86 sse simd

7
推荐指数
2
解决办法
2057
查看次数

看似错误的IN_LIST关键字行为

我正在尝试使用CMake 3.3中的新逻辑来检查值是否在列表中

cmake_minimum_required(VERSION 3.3)
cmake_policy(SET CMP0057 NEW)

set(l A B C)
foreach( e ${l} ) 
  if( ${e} IN_LIST "${l}" )
    message( "element ${e} found in ${l}" )
  else()
    message( "element ${e} NOT found in ${l}" )
  endif()
endforeach()
Run Code Online (Sandbox Code Playgroud)

在OSX Yosemite上使用CMake 3.4.3运行此操作会产生意外结果:

$ cmake -P cmakeBug.cmake
element A NOT found in A;B;C
element B NOT found in A;B;C
element C NOT found in A;B;C
Run Code Online (Sandbox Code Playgroud)

我错过了一些微不足道的事情,或者CMake中是否有错误?

macos cmake osx-yosemite

7
推荐指数
1
解决办法
1696
查看次数

测试PRNG的质量

我正在玩PRNG(如Mersenne Twister和rand()stdlib的功能),我想要一个很好的测试,这将有助于我确定PRNG产生的随机数据的质量.我使用PRNG生成的随机数计算了Pi的值,我发现rand()和Mersenne Twister非常接近提供区别(我需要在10个小数点后仔细检查吗?).

我对蒙特卡罗模拟没有太多了解; 请让我知道一些算法/应用程序(可能是一些简单但可以提供良好推论的东西),这将有助于我在质量方面区分它们.


编辑1:我之前没有注意到,但有一个类似的线程:如何测试随机数?

编辑2:我无法解释NIST的结果,如其中一条评论中所述.我从random.org那里得到了从视觉上解释模式(如果有的话)的想法,因为它很简单.如果有人可以评论我的测试过程,我会很高兴:

  1. 使用rand()和MT1997从[0,1]生成N个randoms
  2. 如果(round(genrand_real1() / rand_0_1()))那么红色像素,否则黑色

据我所知,这不是一个非常精确的解决方案,但如果这提供了一个合理的估计,那么我现在可以忍受这个.

random montecarlo mersenne-twister

6
推荐指数
2
解决办法
1680
查看次数

在支持SSE的x86处理器上有多少个XMM寄存器?

如何在支持SSE的处理器上找出XMM寄存器的数量?

例如,在Intel X5550上.

x86 sse processor cpu-registers

6
推荐指数
1
解决办法
5772
查看次数

如何将两组4条短路装入XMM寄存器?

我刚刚开始使用Visual C++ 2012的SSE内在函数,我需要一些指针(没有双关语).

我有两个signed short每个包含4个的数组(每个数组因此是64位,总共128个).我想将一个加载到XMM寄存器的高位,另一个加载到低位.我可以使用SSE内在函数有效地实现这一目标吗?如果是这样,怎么样?

c++ x86 sse simd intrinsics

6
推荐指数
1
解决办法
849
查看次数

我怎么知道我是否可以用FMA指令集编译?

我已经看到有关如何使用FMA指令集的问题,但在我开始使用它们之前,我首先想知道我是否可以(我的处理器是否支持它们).我找到一篇帖子说我需要查看(在Linux上工作)的输出:

more /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)

找出来.我明白了:

processor       : 0                                                  
vendor_id       : GenuineIntel                                       
cpu family      : 6                                                  
model           : 30                                                 
model name      : Intel(R) Xeon(R) CPU           X3470  @ 2.93GHz    
stepping        : 5                                                  
cpu MHz         : 2933.235                                           
size            : 8192 KB                                            
physical id     : 0                                                  
siblings        : 4                                                  
core id         : 0                                                  
cpu cores       : 4                                                  
apicid          : 0                                                  
initial apicid  : 0                                                  
fpu             : yes                                                
fpu_exception   : yes                                                
cpuid level     : 11                                                 
wp              : yes                                                
flags           : fpu vme de pse tsc msr …
Run Code Online (Sandbox Code Playgroud)

linux x86 processor intel fma

6
推荐指数
2
解决办法
3505
查看次数

C++ std :: set和std :: multiset

在C++中默认情况下都std::setstd::multisetstd::less<T>作为他们的比较.任何人都可以解释如何std::multiset允许重复,std::set不是吗?

c++ containers std set multiset

6
推荐指数
1
解决办法
3523
查看次数

AVX中的AVX2 VPSHUFB仿真

在AVX中,只有128位 PSHUFB

VPSHUFB xmm1, xmm2, xmm3/m128
Run Code Online (Sandbox Code Playgroud)

只有AVX2 PSHUFB才能满足整个256位AVX寄存器的要求

VPSHUFB ymm1, ymm2, ymm3/m256
Run Code Online (Sandbox Code Playgroud)

如何使用AVX内在函数有效地模拟该指令?

同样在这种特殊情况下,源只有8个元素(字节),但这些元素可以在目的地的整个32字节内移动.所以只运行2 x就没问题了PSHUFB.

我发现的一个问题VPSHUFB是它将16(0x10)视为0,只有128和up填充为零!(最高位设置)是否可以在不添加比较和屏蔽的情况下执行此操作?

x86 simd intrinsics avx

6
推荐指数
1
解决办法
1485
查看次数

在 clang 11 上显式模板实例化期间的编译器段错误

以下显式模板实例化导致编译器前端段错误在 LLVM clang++ 11.0on 下x86_64-pc-windows-msvc,使用clang-cl接口 with -std=c++17,无论优化级别如何。

A.h

template <typename T>
class A
{
public:

    T value;

    static constexpr auto address = &A<T>::value;
};

extern template class A<float>;
Run Code Online (Sandbox Code Playgroud)

A.cpp

#include "A.h"

template class A<float>;
Run Code Online (Sandbox Code Playgroud)

请注意,由于 C++17A::address内联变量,因此 ODR 使用在这里不会成为问题。

编译器行为显然是错误的,我已经在 LLVM 错误跟踪器上提交了一份报告。尽管如此,我仍然对代码的实际正确性感到好奇。

是编译器处理不当的未定义行为,还是代码本身没有任何问题,仅与编译器有关。我个人在显式模板实例化规范的标准中没有发现任何表明上述代码错误的内容。

我不认为上述内容格式错误,我错过了什么吗?

c++ templates language-lawyer clang++

6
推荐指数
1
解决办法
146
查看次数