小编apr*_*amc的帖子

布尔数组上的Raw Loop比transform或for_each快5倍

根据我以前在基准测试transform和for_each上的经验,它们的执行速度通常比原始循环要快一些,并且它们当然更安全,因此我尝试将所有原始循环替换为transform,generate和for_each。今天,我比较了可以使用for_each,transform和raw循环翻转布尔值的速度,并且得到了非常令人惊讶的结果。raw_loop的执行速度是其他两个循环的5倍。我真的没有找到找到如此巨大差异的充分理由吗?

#include <array>
#include <algorithm>


static void ForEach(benchmark::State& state) {
  std::array<bool, sizeof(short) * 8> a;
  std::fill(a.begin(), a.end(), true);

  for (auto _ : state) {
    std::for_each(a.begin(), a.end(), [](auto & arg) { arg = !arg; });
    benchmark::DoNotOptimize(a);
  }
}
BENCHMARK(ForEach);

static void Transform(benchmark::State& state) {
  std::array<bool, sizeof(short) * 8> a;
  std::fill(a.begin(), a.end(), true);

  for (auto _ : state) {
    std::transform(a.begin(), a.end(), a.begin(), [](auto arg) { return !arg; });
    benchmark::DoNotOptimize(a);
  }
}
BENCHMARK(Transform);


static void RawLoop(benchmark::State& state) {
  std::array<bool, sizeof(short) * 8> a; …
Run Code Online (Sandbox Code Playgroud)

c++ performance clang++ c++17

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

makefile 给出意外的文件结尾错误

HOMEDIR = $(shell pwd)
DEFAULT = 4.0.3
YESDIR = $(shell echo $(@:install-%=%) | tr A-Z a-z)
NODIR = $(shell echo $(@:clean-%=%) | tr A-Z a-z)
install:
@$(MAKE) install-$(DEFAULT)   
install-%:
@cd $(HOMEDIR);\
if [ ! -e $(YESDIR) ]; then \
  echo "Library $(@:install-%=%) Version=$(YESDIR) does not exist"; \
elif [ -e $(YESDIR)/Install.sh ]; then \
    echo "Installing $(PKGNAM) version=$(YESDIR)" ; \
    cd $(YESDIR) ;\
    $(SHELL) Install.sh $(HOMEDIR) 1 ;\   
elif [ -e $(YESDIR)/Makefile ]; then \
    cd $(YESDIR); \
    $(MAKE); \ …
Run Code Online (Sandbox Code Playgroud)

bash shell makefile gnu-make

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

通用 MPI 代码

我想创建一个通用的 MPI 方法,让我们说一个特定对象的 bcast。但我需要将原始类型转换为 MPI_Data 类型?知道我该怎么做吗?

template <typename T>
void bcast_data(std::vector<T> vec) 
{
...
}
Run Code Online (Sandbox Code Playgroud)

我需要将 MPI_INT 用于 int , MPI_DOUBLE 用于 double ,...所以我需要一种类型转换方法,我想创建一个可以为我提供 MPI_datatypes 的数据类型枚举,但它需要将类型作为输入参数传递。

任何的想法 ?

谢谢

c++ generics mpi

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

用于连接constexpr std :: array的体系结构x86_64的未定义符号

我在链接我的目标文件时收到错误:

#include <cstdint>
#include <array>

enum SystemType : uint8_t { AC, DC, HCP, EFF };

template<SystemType TYPE> struct System;

template<> 
struct System<AC> { 
public:     
static constexpr size_t number_of_sockets = 2;  
static constexpr std::array<size_t, number_of_sockets> object_per_socket { { 12, 6 } }; 
};
Run Code Online (Sandbox Code Playgroud)

我正在使用它如下所示将数据分配到向量中.

terminal->no_obj_per_system.assign(
            Sytem<AC>::object_per_socket.begin(),
            Sytem<AC>::object_per_socket.end());
Run Code Online (Sandbox Code Playgroud)

我在mac Os上使用clang.

c++ constexpr c++14

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

模板编程中的数据成员访问

我正在创建一个模板类,它具有两种不同大小的特殊行为,以及一般类中的一般行为,如下所示::

template<typename T, size_t DIM>
class Dataset
{
public:
    // all the constructors are defaulted
    // all the general behavior implementation

    std::vector<T> _data;
};
Run Code Online (Sandbox Code Playgroud)

鉴于下面课程的数据流量,我希望能够访问_data向量,对吗?

template<typename T>
class Dataset<T, 1>
{
public:
    T & operator()(const size_t & index)
    {
        return _data[index];
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,我得到_data的编译错误无法解决.这里有什么问题 ?!!谢谢

c++ template-meta-programming c++11

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

python是否优化了未使用的变量?

对于我创建的以下类,我的linter经常给我发出未使用的变量警告:

class LockGuard(object):
    def __init__(self, mutex):
        self.mutex = mutex
        self.mutex.acquire()

    def __del__(self):
        self.mutex.release()
Run Code Online (Sandbox Code Playgroud)

在代码中,每次我使用它时都会收到警告

def do_something(self)
    locker = LockGuard(self.mutex)
    // do something on the data
    return outcome
Run Code Online (Sandbox Code Playgroud)

我知道c ++编译器优化了未使用的变量,我想知道python是否会做同样的事情?因此,删除数据锁定.

python

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

给定const char *作为模板化参数的类型时,为什么编译器会在bool_view上选择bool?

#include <iostream>

struct A
{
    void update(bool const & v)
    {
        std::cout << std::boolalpha << v << std::endl;
    }

    void update(std::string_view v)
    {
        std::cout << v << std::endl;
    }
};


template <typename T>
void update(T const & item)
{
    A a;
    a.update(item);
}


int main()
{
    const char * i = "string";
    update(i);
}
Run Code Online (Sandbox Code Playgroud)

当我用a调用update时const char *,编译器使用bool参数而不是string_view?!调用函数。为什么??

c++ overload-resolution template-meta-programming c++17

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

防止makefile中的变量扩展

我想把它写到一个文件中:

-MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
Run Code Online (Sandbox Code Playgroud)

但是当我将其回显到文件中时,使用"", 或'',变量将扩展,如何防止扩展并按原样写入?

PSecho '-MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"'在生成文件中调用。

在我的makefile中,我假设我有:

all:
    echo '-MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"' > $file
Run Code Online (Sandbox Code Playgroud)

我在文件中看到的是

-MF"all" -MT"all" -o "all" ""

shell makefile

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

非法使用已删除的功能

我有一个A班

struct A
{
    A() = delete;
    A(const A&) = default;
    A& operator=(const A&) = default;
    A(A&&) = default;
    A& operator=(A&&) = default;

    explicit A(int i) ....
    // a few explicit constructors
}
Run Code Online (Sandbox Code Playgroud)

当我试图获得存储在unordered_map中的strcut A时,如下所示:

auto a = my_map[key_];
Run Code Online (Sandbox Code Playgroud)

我明白了

非法使用删除的方法

错误.我的理解是这是一个复制结构,但我不知道为什么编译器在分配之前调用默认构造函数.

c++ deleted-functions c++11 c++14

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