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)
非常感谢你.
有人知道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并生成一个哈希值?
我注意到int和double的大小与使用函数MPI_Type_size(MPI_INT,&MPI_INT_SIZE)计算的大小不同; 这是否意味着sizeof(MPI_INT)返回错误的值8 ?? 它通常应该是4谢谢你的回复
所以我有一个具有不同参数类型的可变参数函数;我想将每个参数传递给另一个函数,它是一个 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 循环中使用它。
在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) 我试图从C调用fortran子例程,我可以在C中分配并安全地将指针传递给Fortran吗?子程序中的数组是自动数组(x(nmax)).
(我正在分配x然后将其传递给fortran)
有没有办法通过std::unique_ptr,并std::shared_ptr通过MPI发送/接受她?有什么方法可以在 MPI 中发送一个类的对象,我知道可以传递结构,但是对象呢?