我有一个产生库的项目:
project (myCoolLibrary)
ADD_LIBRARY(my_cool_library SHARED ${mysources_SRC})
Run Code Online (Sandbox Code Playgroud)
另一个应该使用这个库的项目:
find_package (myCoolLibrary REQUIRED)
INCLUDE_DIRECTORIES("${myCoolLibrary_INCLUDE_DIRS}" )
add_executable(myCoolExe ${my_sources_SRC} )
TARGET_LINK_LIBRARIES(myCoolExe ${myCoolLibrary_LIBRARIES} )
Run Code Online (Sandbox Code Playgroud)
有没有办法可以更改第一个文件,以便第二个文件自动运行?通过在第一个文件上运行CMake然后在输出上运行make,然后在第二个文件上运行CMake,CMake能够找到包吗?
我只是将第一个项目的构建地址提供给第二个包的答案也是可以接受的.
我有一个5000x500矩阵,我想用cuda分别对每行进行排序.我可以使用arrayfire,但这只是关于thrust :: sort的for循环,这应该不高效.
https://github.com/arrayfire/arrayfire/blob/devel/src/backend/cuda/kernel/sort.hpp
for(dim_type w = 0; w < val.dims[3]; w++) {
dim_type valW = w * val.strides[3];
for(dim_type z = 0; z < val.dims[2]; z++) {
dim_type valWZ = valW + z * val.strides[2];
for(dim_type y = 0; y < val.dims[1]; y++) {
dim_type valOffset = valWZ + y * val.strides[1];
if(isAscending) {
thrust::sort(val_ptr + valOffset, val_ptr + valOffset + val.dims[0]);
} else {
thrust::sort(val_ptr + valOffset, val_ptr + valOffset + val.dims[0],
thrust::greater<T>());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法融合推力操作,以便排序并行?实际上,我正在寻找的是融合循环迭代的通用方法.
尝试std::move在从另一种类型派生的模板化类型上使用语义时,我遇到了问题.那是我在下面的例子中得到一个错误.
#include <memory>
template <typename T>
class A{
};
template <typename T>
class B:A<T>{
};
int main()
{
std::unique_ptr<B<int> > bar(new B<int>());
std::unique_ptr<A<int> > foo (std::move(bar));
}
Run Code Online (Sandbox Code Playgroud)
错误在定义foo的行上,它是:
In function 'int main()':
17:47: error: no matching function for call to 'std::unique_ptr<A<int> >::unique_ptr(std::remove_reference<std::unique_ptr<B<int> >&>::type)'
Run Code Online (Sandbox Code Playgroud)
显然,非模板化的等效工作正常.