小编Tra*_*s3r的帖子

CMake添加调用clang分析器的目标

我基本上喜欢和http://blog.alexrp.com/2013/09/26/clangs-static-analyzer-and-automake一样,但是使用CMake.

analyze_srcs = foo.c
analyze_plists = $(analyze_srcs:%.c=%.plist)
CLEANFILES = $(analyze_plists)

$(analyze_plists): %.plist: %.c
  @echo "  CCSA  " $@
  @$(COMPILE) --analyze $< -o $@

analyze: $(analyze_plists)
.PHONY: analyze
Run Code Online (Sandbox Code Playgroud)

所以你可以跑

make analyze
make clean
Run Code Online (Sandbox Code Playgroud)

我想我需要使用add_custom_command/add_custom_target并以某种方式更改仅针对该目标的"目标文件"扩展名.

然后获取生成文件的列表,或者将它们传递给脚本,以将它们组合成1个输出文件.

谁能指出我正确的方向?

c++ cmake clang clang-static-analyzer

19
推荐指数
3
解决办法
7665
查看次数

如何记忆地图巨大的矩阵?

假设您有一个巨大的(40+ GB)特征值(浮点)矩阵,行是不同的特征,列是样本/图像.

该表是按列预先计算的.然后,它被完全访问行和多线程(每个线程加载整行)几次.

处理这个矩阵的最佳方法是什么?我特别琢磨超过5分:

  1. 由于它是在x64 PC上运行的,我可以一次性映射整个矩阵,但这有意义吗?
  2. 多线程的影响怎么样(多线程初始计算?)?
  3. 如何布局矩阵:行或列主要?
  4. 在预计算完成后,将矩阵标记为只读是否有帮助?
  5. 是否可以使用类似http://www.kernel.org/doc/man-pages/online/pages/man2/madvise.2.html来加快速度?

c++ mmap d

15
推荐指数
1
解决办法
1957
查看次数

Arm Neon Intrinsics vs手装配

https://web.archive.org/web/20170227190422/http://hilbert-space.de/?p=22

在这个过时的网站上,它表明手写的asm会比内在的更好.我想知道这是不是现在的真相,即使是现在2012年.

那么使用gnu交叉编译器为内在函数改进了编译优化?

arm intrinsics neon

12
推荐指数
2
解决办法
8553
查看次数

从右值重新解释到右值引用

它只是一个简单的编译测试。当clang和msvc拒绝它时,gcc接受以下内容:https : //godbolt.org/z/DlUasL

float test()
{
    return reinterpret_cast<float&&>(0x7F800000);
}
Run Code Online (Sandbox Code Playgroud)

根据标准,哪一个是正确的?

c++ standards-compliance

8
推荐指数
1
解决办法
132
查看次数

OpenMP矢量化是否有保证?

OpenMP标准是否保证#pragma omp simd能够正常工作,即如果编译器无法对代码进行矢量化,编译是否会失败?

#include <cstdint>
void foo(uint32_t r[8], uint16_t* ptr)
{
    const uint32_t C = 1000;
    #pragma omp simd
    for (int j = 0; j < 8; ++j)
        if (r[j] < C)
            r[j] = *(ptr++);
}
Run Code Online (Sandbox Code Playgroud)

gcc和clang无法对此进行矢量化,但根本不会抱怨(除非您使用-fopt-info-vec-optimized-missed等).

c++ simd vectorization openmp

5
推荐指数
1
解决办法
526
查看次数

换档操作后使用进位标志

对于以下代码的div/mod部分:

int pow(int x, unsigned int n)
{
    int y = 1;
    while (n > 1)
    {
        auto m = n%2;
        n = n/2;
        if (m)
            y *= x;
        x = x*x;
    }
    return x*y;
}
Run Code Online (Sandbox Code Playgroud)

我希望组装像

shr n
cmovc y, yx
Run Code Online (Sandbox Code Playgroud)

但是gcc/clang甚至icc都没有在这里使用进位标志(使用2个寄存器和/和测试代码):https://godbolt.org/z/L6VUZ1

所以我想知道如果你手工编写它以及为什么(ILP,依赖项......)最好的方法.

c++ x86 assembly

5
推荐指数
1
解决办法
149
查看次数

未使用的模板方法出错

struct B
{
    int a;
    void foo() {a = 5;}
};

template <typename T>
struct A
{
    A(int i) { B::foo(); }
    A(double d) {}
};

int main()
{
    A<int> a(5.0);
}
Run Code Online (Sandbox Code Playgroud)

gcc 4.7.2编译它没有错误.clang 3.4svn抱怨:

$ clang -Wall -Wextra test.cpp 
test.cpp:10:16: error: call to non-static member function without an object argument
        A(int i) { B::foo(); }
                   ~~~^~~
Run Code Online (Sandbox Code Playgroud)

当然代码是错误的,但哪个编译器符合标准?

同样奇怪的是,如果使用5而不是5.0,则clang不会像gcc那样打印任何"实例化"注释:

$ gcc test.cpp 
test.cpp: In instantiation of ‘A<T>::A(int) [with T = int]’:
test.cpp:15:12:   required from here
test.cpp:9:13: error: cannot call member …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates clang non-static

4
推荐指数
1
解决办法
731
查看次数