小编joe*_*ler的帖子

使用-std = gnu ++ 11时发现了哪些已知的性能差异

我一直在研究遗传算法,我以前一直在使用g ++ 4.8.1编译参数

CCFLAGS=-c -Wall  -Ofast -fopenmp -mfpmath=sse -march=native -std=gnu++11 
Run Code Online (Sandbox Code Playgroud)

我没有使用c ++ 11的许多功能,并且有一个合理的分析系统,所以我替换了3-4行代码并让它编译而没有-std = gnu ++ 11

CCFLAGS=-c -Wall  -Ofast -fopenmp -mfpmath=sse -march=native
Run Code Online (Sandbox Code Playgroud)

当我再次运行我的探查器时,我注意到除了我的排序功能之外,我几乎可以在任何地方看到约5%的性能提升,现在排序大约是两倍.(它是一个重载的运算符<在对象上)

我的问题是:

这两个版本之间存在哪些性能差异,并且预计c ++ 11在较新的编译器中会更快?

我也期待我正在使用的事实--Ofast正在扮演一个角色,我的假设是正确的吗?

更新:

正如评论中所建议的那样,我使用with和without -march = native再次运行测试

// Fast sort, slightly slower in other tests
CCFLAGS=-c -Wall  -Ofast -fopenmp -mfpmath=sse -march=native -std=gnu++11  

// Fast sort, slower in other tests
CCFLAGS=-c -Wall  -Ofast -fopenmp -mfpmath=sse -std=gnu++11  

// Slow sort, slower in other tests
CCFLAGS=-c -Wall  -Ofast -fopenmp -mfpmath=sse                     

// Slow sort, fastest in other …
Run Code Online (Sandbox Code Playgroud)

c++ gcc profiling g++ c++11

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

什么是有条件地控制for循环方向的最佳方法

我的代码中有一个块,其中for循环应该根据条件向前或向后运行.

if (forwards) {
    for (unsigned x = 0; x < something.size(); x++ ) {
        // Lots of code
    }

} else {
    for (unsigned x = something.size()-1 ; x >= 0 ; x-- ) {
        // Lots of code
    }
} 
Run Code Online (Sandbox Code Playgroud)

有没有一个很好的方法来设置它,所以我不重复两次for循环中的所有代码?

有问题的'东西'是std :: vector <>,所以也许它可以用迭代器?(我没有使用C++ 11)

c++ iterator loops

6
推荐指数
3
解决办法
1594
查看次数

当不在列表视图中时,django rest框架添加字段

我正在使用Django Rest Framework,并且我希望能够在返回单个对象时向序列化程序添加额外的细节,这将被排除在列表视图之外.

在下面的代码中,我将celery_state字段添加到TestModelSerializer,但我只想在返回单个对象时添加此字段,而不是在返回TestModel数据列表时添加.

我查看了list_serializer_class选项,但它似乎只是使用原始模型序列化程序,因此即使我尝试从那里排除,它仍将始终包含该字段.

我有什么选择?

class TestModelSerializer(serializers.HyperlinkedModelSerializer):
    celery_state = serializers.CharField(source='celery_state', read_only=True)

    class Meta:
    model = TestModel



class TestModelViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows TestModels to be viewed or edited.
    """
    authentication_classes = (SessionAuthentication, BasicAuthentication)
    permission_classes = (IsAuthenticatedOrReadOnly,)
    queryset = TestModel.objects.all()
    serializer_class = TestModelSerializer
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

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

范围内容的最佳替代方案 - Pre C++ 11

我想在我的代码中的几个地方开始使用枚举,但是我对编译器的先前声明有一个问题.目前声明枚举的方式对我来说最有意义:

避免这种情况的最佳方法是什么?

enum score_methods_t {NONE,ABS_FROM_PERFECT,ERROR_SQUARED};
enum scale_methods_t {NONE,CASES_MULTIPLIER,RANGE_MULTIPLIER};
Run Code Online (Sandbox Code Playgroud)

我应该只使用命名空间使一切都是唯一的或范围吗?我想在类中使用枚举类型,NONE是最具描述性的名称!

枚举冲突的原因也是因为基本上只是#defines引擎盖?

c++ enums c-preprocessor

5
推荐指数
2
解决办法
2399
查看次数

将Ruby哈希字符串转换为Python字典

我正在使用一些命令输出,它作为Ruby哈希的字符串返回.(来自mcollective的东西).

这是我收到的示例字符串:

{:changes=>{"total"=>0},     :events=>{"failure"=>0, "success"=>0, "total"=>0},     :version=>      {"puppet"=>"2.7.21 (Puppet Enterprise 2.8.1)", "config"=>1381497648},     :time=>      {"filebucket"=>0.000287,       "cron"=>0.00212,       "package"=>0.398982,       "exec"=>0.001314,       "config_retrieval"=>5.60761618614197,       "anchor"=>0.001157,       "service"=>0.774906,       "total"=>9.85111718614197,       "host"=>0.002662,       "user"=>0.063606,       "file"=>2.998467,       "last_run"=>1381497660},     :resources=>      {"skipped"=>6,       "failed_to_restart"=>0,       "out_of_sync"=>0,       "failed"=>0,       "total"=>112,       "restarted"=>0,       "scheduled"=>0,       "changed"=>0}}
Run Code Online (Sandbox Code Playgroud)

我有能力为此编写一个迷你解析器,但这将是一个繁琐的任务.有谁知道一个库或代码片段可以将我转换为Python字典?

如果您认为我应该解析它,欢迎任何提示.

ruby python parsing dictionary hashmap

5
推荐指数
2
解决办法
2486
查看次数

Python请求从POST中删除Content-Length标头

我正在使用python请求模块对站点进行一些测试.

请求模块允许您通过传入键设置为无的字典来删除某些标头.例如

headers = {u'User-Agent': None}
Run Code Online (Sandbox Code Playgroud)

将确保没有用户代理与请求一起发送.

但是,当我发布数据时,请求将为我计算正确的Content-Length,即使我指定None或不正确的值.例如.

headers = {u'Content-Length': u'999'}
headers = {u'Content-Length': None}
Run Code Online (Sandbox Code Playgroud)

我检查请求中使用的头文件的响应(response.request.headers),我可以看到Content-Length已经重新添加了正确的值.到目前为止,我看不到任何方法来禁用此行为

CaseInsensitiveDict({'Content-Length': '39', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept-Encoding': 'gzip, deflate, compress', 'Accept': '*/*', 'User-Agent': 'python-requests/2.2.1 CPython/2.7.6 Linux/3.13.0-36-generic'})
Run Code Online (Sandbox Code Playgroud)

我真的很想继续使用请求模块来做这件事.这可能吗?

python http http-content-length python-requests

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

有没有办法将相对库路径添加到可执行文件,以避免设置LD_LIBRARY_PATH

我正在构建一个链接一些共享库的程序.它们包含在相对于我的项目的lib /目录中.

我遇到的问题是,我希望可执行文件知道在相对../lib目录中搜索库.这可能吗?

我真的不想更改ld_library_path或将文件移动到根拥有的标准路径之一.

当.so文件位于strace/ldd所示的标准路径之一时,我能够编译可执行文件并运行它

c++ linker makefile shared-libraries ldd

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

使用not equal和just equal时是否有任何性能差异

我希望编译器能为你带来魔力,但是,以下两个代码块之间是否存在任何性能差异?

        if (! something.isTrue) {
            pathFalseFunc();
        } else {
            pathTrueFunc();
        }
Run Code Online (Sandbox Code Playgroud)

        if (something.isTrue) {
            pathTrueFunc();
        } else {
            pathFalseFunc();
        }
Run Code Online (Sandbox Code Playgroud)

c++ performance

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