小编gor*_*ill的帖子

Spring boot ddl自动生成器

我正在使用spring boot spring.jpa.hibernate.ddl-auto=create,但是当应用程序重新启动时,所有表都会丢弃并再次创建.有没有办法避免现有表的重新创建?

java spring hibernate spring-boot

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

SSE-copy,AVX-copy和std :: copy性能

我试图通过SSE和AVX提高复制操作的性能:

    #include <immintrin.h>

    const int sz = 1024;
    float *mas = (float *)_mm_malloc(sz*sizeof(float), 16);
    float *tar = (float *)_mm_malloc(sz*sizeof(float), 16);
    float a=0;
    std::generate(mas, mas+sz, [&](){return ++a;});

    const int nn = 1000;//Number of iteration in tester loops    
    std::chrono::time_point<std::chrono::system_clock> start1, end1, start2, end2, start3, end3; 

    //std::copy testing
    start1 = std::chrono::system_clock::now();
    for(int i=0; i<nn; ++i)
        std::copy(mas, mas+sz, tar);
    end1 = std::chrono::system_clock::now();
    float elapsed1 = std::chrono::duration_cast<std::chrono::microseconds>(end1-start1).count();

    //SSE-copy testing
    start2 = std::chrono::system_clock::now();
    for(int i=0; i<nn; ++i)
    {
        auto _mas = mas;
        auto _tar = tar; …
Run Code Online (Sandbox Code Playgroud)

c++ performance sse simd avx

19
推荐指数
2
解决办法
1万
查看次数

浮动矢量的SSE减少

如何使用sse intrinsics获得浮点向量的和元素(减少)?

简单的串口代码:

void(float *input, float &result, unsigned int NumElems)
{
     result = 0;
     for(auto i=0; i<NumElems; ++i)
         result += input[i];
}
Run Code Online (Sandbox Code Playgroud)

c++ sse sum simd reduction

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

使用std :: aligned_storage对齐静态数组

我正在尝试使用std :: aligned_storage模式实现简单静态数组的16字节对齐:

#include <type_traits>
int main()
{
    const size_t SIZE = 8;
    using float_16 = std::aligned_storage<sizeof(float) * SIZE, 16>::type;
    float_16 mas;
    new(&mas) float[SIZE];//Placement new. Is this necessary? 

    mas[0]=1.f;//Compile error while attempting to set elements of aligned array
}
Run Code Online (Sandbox Code Playgroud)

我得到以下编译错误:

«mas [0]»中«operator []»不匹配

然后我尝试使用显式指针转换:

float* mas_ = reinterpret_cast<float*>(mas); 
Run Code Online (Sandbox Code Playgroud)

但这也会产生编译错误:

从类型«float_16 {aka std :: aligned_storage <32u,16u> :: type}»无效转换为类型«float*»

任何人都可以建议我如何正确使用std :: aligned_storage对齐静态数组?

c++ arrays pointers memory-alignment c++11

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

SSE和AVX内在混合物

除了SSE-copy,AVX-copy和std :: copy性能.假设我们需要以下列方式对一些循环进行矢量化:1)通过AVX向量化第一个循环批次(多次乘8).2)将循环的剩余部分分成两批.通过SSE矢量化批次为4的倍数.3)通过串行程序处理整个循环的剩余批次.让我们考虑复制数组的例子:

#include <immintrin.h>

template<int length,
         int unroll_bound_avx = length & (~7),
         int unroll_tail_avx  = length - unroll_bound_avx,
         int unroll_bound_sse = unroll_tail_avx & (~3),
         int unroll_tail_last = unroll_tail_avx - unroll_bound_sse>
void simd_copy(float *src, float *dest)
{
    auto src_  = src;
    auto dest_ = dest;

    //Vectorize first part of loop via AVX
    for(; src_!=src+unroll_bound_avx; src_+=8, dest_+=8)
    {
         __m256 buffer = _mm256_load_ps(src_);
         _mm256_store_ps(dest_, buffer);
    }

    //Vectorize remainder part of loop via SSE
    for(; src_!=src+unroll_bound_sse+unroll_bound_avx; src_+=4, dest_+=4)
    {
        __m128 buffer …
Run Code Online (Sandbox Code Playgroud)

c++ performance sse simd avx

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

stl 向量中的内存映射文件存储

我正在尝试实现自定义allocator以将内存映射文件存储在std::vector. 执行的文件映射boost::iostreams::mapped_file

文件内存映射的分配器类型:

template<typename T>
class mmap_allocator 
{
public:
  typedef T value_type;

  mmap_allocator(const std::string& filename) 
  : _mmfile(filename) {  } 

  T* allocate (size_t n) 
  { 
     return reinterpret_cast<T*>(_mmfile.data());
  }
  void deallocate (T* p, size_t n) 
  { 
     p = nullptr;
     _mmfile.close();
  }

private:
  boost::iostreams::mapped_file _mmfile;
};
Run Code Online (Sandbox Code Playgroud)

内存映射文件的容器,基于std::vector

//Get file size
long GetFileSize(std::string filename)
{
    FILE *p_file = NULL;
    p_file = fopen(filename.c_str(),"rb");
    fseek(p_file,0,SEEK_END);
    int size = ftell(p_file);
    fclose(p_file);
    return size;
}

template<typename T>
class mm_vector : public …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector memory-mapped-files allocator

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

使用本地静态变量调用函数

假设我们使用本地静态变量具有最简单的函数:

int f()
{
    static int a = 0;
    return ++a;
}
Run Code Online (Sandbox Code Playgroud)

让我们多次调用此函数并打印结果:

int main()
{
    int a  = f();
    int b  = f();
    std::cout<<a<<b;
}
Run Code Online (Sandbox Code Playgroud)

输出为"12" - 正如预期的那样.但是这个电话

int main()
{
   std::cout<<f()<<f();
}
Run Code Online (Sandbox Code Playgroud)

产生相反的顺序 - "21".为什么?

c++ function static-variables

3
推荐指数
1
解决办法
112
查看次数

元组处理中的模板函数错误

除了主题:异构序列生成器Variadic模板异构容器 在下面的代码中,我尝试使用模板以循环方式处理对象序列 - 元组序列中的当前对象从前一个对象获取参数:

namespace spec
{
    template <int... Idx>
    struct index { };

    template <int N, int... Idx>
    struct sequence : sequence<N - 1, N - 1, Idx...> { };

    template <int... Idx>
    struct sequence<1, Idx...> : index<Idx...> { };
}
template<int N> 
struct A
{
    A() : _N(N) {}
    template<int PrevN> void print_prevN(){std::cout<<PrevN<<std::endl;}
    int _N;
};

template<int N> 
struct B
{
    B(): _N(N){}
    template<int PrevN> void print_prevN(){std::cout<<PrevN<<std::endl;}
    int _N;
};

template<typename...Arg>
class HeterogenousContainer
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming c++11

2
推荐指数
1
解决办法
148
查看次数

动态内存分配限制

我需要分配一个相当大的块(或块)内存 - 几千兆字节.但是,如果我尝试分配超过532000000个元素(~2 Gb)的float数组,我会收到运行时错误:

抛出'std :: bad_alloc'的实例后调用terminate():std :: bad_alloc

还行吧:

float* d = new float[532000000];
Run Code Online (Sandbox Code Playgroud)

但这很糟糕(bad_alloc异常):

float* d = new float[533000000];
Run Code Online (Sandbox Code Playgroud)

然后我尝试除了第一个之外还分配另一个数组.发现第二个浮点数组的最大大小是195000000个元素(~748 Mb).

还行吧:

float* d = new float[532000000];
float* e = new float[196000000];
Run Code Online (Sandbox Code Playgroud)

这是不好的:

float* d = new float[532000000];
float* e = new float[197000000];
Run Code Online (Sandbox Code Playgroud)

我想知道应用程序中已分配内存的限制是什么以及如何避免它们?如何使用虚拟内存?

我的系统 - 32位ubuntu 12.10,编译器 - gcc 4.7,RAM - 8GB(〜6.5 Gb免费)

c++ memory heap memory-management

2
推荐指数
1
解决办法
2822
查看次数

奇怪的阵列签名

最近看到了以下大块代码:

int main()
{
    int a = 3;
    0[&a] = a+a;//What is this??? 
}
Run Code Online (Sandbox Code Playgroud)

谁有人解释一下,这意味着什么?

c++ arrays reference

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