小编Has*_*ein的帖子

从CMake设置'make'到默认使用'-j'选项

make -j N每当我make从终端打电话时,我都想建立我的CMake项目.我不想-j每次都手动设置选项.

为此,我将CMAKE_MAKE_PROGRAM变量设置为特定的命令行.我使用该ProcessorCount()函数,它提供了并行执行构建的处理器数量.

当我这样做时make,我看不到任何加速.但是,如果我这样做make -j N,那么它的构建肯定会更快.

你能帮我解决这个问题吗?(我在Linux上开发这个.)

以下是我使用的代码片段CMakeList.txt:

include(ProcessorCount)
ProcessorCount(N)
message("number of processors: "  ${N})
if(NOT N EQUAL 0)
  set(CTEST_BUILD_FLAGS -j${N})
  set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N})
  set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} -j ${N}")      
endif()
message("cmake make program" ${CMAKE_MAKE_PROGRAM})
Run Code Online (Sandbox Code Playgroud)

非常感谢你.

cmake parallel-builds

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

std :: bitset哈希函数算法

有人知道bitset使用的哈希函数是什么算法,

这是来自网站:http://en.cppreference.com/w/cpp/utility/bitset/hash

#include <iostream>
#include <bitset>
#include <functional>

int main()
{
    std::bitset<4> b1(1);
    std::bitset<4> b2(2);
    std::bitset<4> b3(b2);
    std::bitset<4> b4(8);
    std::cout<<b4<<'\n';
    std::hash<std::bitset<4>> hash_fn;

    size_t h1 = hash_fn(b1);
    size_t h2 = hash_fn(b2);
    size_t h3 = hash_fn(b4);

    std::cout << h1 << '\n';
    std::cout << h2 << '\n';
    std::cout << h3 << '\n';
}
Run Code Online (Sandbox Code Playgroud)

而输出是

1000
4334672815104069193
16667047557902998627
2258353126044249582
Run Code Online (Sandbox Code Playgroud)

http://en.cppreference.com/w/cpp/utility/bitset/hash

另外为什么不将这些位转换为unsigend long并生成一个哈希值?

c++ bitset

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

sizeof(MPI_INT)与sizeof(int)不同

我注意到int和double的大小与使用函数MPI_Type_size(MPI_INT,&MPI_INT_SIZE)计算的大小不同; 这是否意味着sizeof(MPI_INT)返回错误的值8 ?? 它通常应该是4谢谢你的回复

size parallel-processing types mpi

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

C++ 元编程来拆分函数参数并将它们一个一个地传递给另一个函数

所以我有一个具有不同参数类型的可变参数函数;我想将每个参数传递给另一个函数,它是一个 C 函数。举个例子; 对于有两个参数的情况;

void function(int *a, double *b) needs to call
{
  bindToFunc(0, a);
  bindToFunc(1, b);
}

void function(int *a, double *b, float *c) needs to call
{
  bindToFunc(0, a);
  bindToFunc(1, b);
  bindToFunc(2, c);
}

template<typename... T>
void function(T ...)
{
  // has to have
  // 
  // bindToFunc(0, T0) ....
  // bindToFunc(n-1, Tn-1);
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用,

template <int I, class... Ts> 
decltype(auto) get(Ts &&... ts) 
{
  return std::get<I>(std::forward_as_tuple(ts...));
}
Run Code Online (Sandbox Code Playgroud)

但由于 I 是模板参数,它是一个编译时变量,因此我们不能在 for 循环中使用它。

c++ c++17

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

MPI_Iprobe与MPI_Probe

在MPI_Iprobe中,需要多次检查标志以确定是否有任何消息,一种方法是将它放在while循环中,我想知道这种方法是否等同于MPI_Probe,因为它基本上阻止了以不同的方式探测,这是使用Iprobe的错误方法吗?

int flag=0
while(flag==0)
{
MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag,&status);
cout<<myrank<<" "<<flag<<endl;
}
if(flag)
{
 MPI_Get_count(&status, MPI_INT, &count);

 MPI_Irecv(&rcvbuff,count, MPI_INT,destination.at(0),0, MPI_COMM_WORLD, &request);

}
Run Code Online (Sandbox Code Playgroud)

mpi

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

将指针从C传递给fortran子程序

我试图从C调用fortran子例程,我可以在C中分配并安全地将指针传递给Fortran吗?子程序中的数组是自动数组(x(nmax)).

(我正在分配x然后将其传递给fortran)

c fortran fortran-iso-c-binding

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

如何在 MPI 中传递 std::unique_ptr ?

有没有办法通过std::unique_ptr,并std::shared_ptr通过MPI发送/接受她?有什么方法可以在 MPI 中发送一个类的对象,我知道可以传递结构,但是对象呢?

c++ mpi shared-ptr unique-ptr

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