根据我以前在基准测试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) 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) 我想创建一个通用的 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 的数据类型枚举,但它需要将类型作为输入参数传递。
任何的想法 ?
谢谢
我在链接我的目标文件时收到错误:
#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.
我正在创建一个模板类,它具有两种不同大小的特殊行为,以及一般类中的一般行为,如下所示::
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的编译错误无法解决.这里有什么问题 ?!!谢谢
对于我创建的以下类,我的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是否会做同样的事情?因此,删除数据锁定.
#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
?!调用函数。为什么??
我想把它写到一个文件中:
-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" ""
我有一个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)
我明白了
非法使用删除的方法
错误.我的理解是这是一个复制结构,但我不知道为什么编译器在分配之前调用默认构造函数.