小编Foo*_*ant的帖子

vector_base继承与组合

简短问题:

是否有为什么C ++ STL实现使用一个原因vector_base结构/类(到手柄资源和分配器),为基类std::vector,而不是使用组合物

较长版本:

在提高我对C ++的了解的“任务”中,我一直在尝试重新实现一个Vector大多数是std::合规的类。我想我已经足够了解为什么使用分配器明智,为什么您实际上希望将所有内存处理放在单独的类/结构(RAII等)中,但我看不到为什么我们std::vector要从中继承类,而不是将其作为私人成员。 例如,LLVMgcc都使用继承。另一方面,我发现构造函数和赋值运算符(尤其是move-types)使用合成更容易处理。

我只是公开我对语言的肤浅知识吗?

举例来说,我搜索了一本教科书,发现Stroustroup的书与他的2013年的“ C ++编程语言,第四版”对标准的“模拟重新实现”有不同的版本(只是让我更加困惑!)。使用构图及其2014年的“编程:原理与实践,第二版”。使用继承!

任何人都可以帮助我阐明一些想法吗?

c++ stl

6
推荐指数
1
解决办法
92
查看次数

犰狳+ NVBLAS进入RcppArmadillo + NVBLAS

TLDR; 对于那些想要避免阅读整个故事的人:有没有办法将RcppArmadillo与NVBLAS连接起来使用GPU,更像是使用纯粹的c ++代码而不是R来将Armadillo与NVBLAS接口?

我正在尝试利用NVBLAS库(http://docs.nvidia.com/cuda/nvblas/)来加速我的项目中的线性代数部分(主要是计算统计,MCMC,粒子滤波器和所有那些好东西) )通过将一些计算转移到GPU.

我主要使用C++代码,特别是用于矩阵计算的Armadillo库,通过他们的常见问题我知道我可以通过正确的方式链接犰狳来使用NVBLAS(http://arma.sourceforge.net/faq.html).

所以我设置了我的库安装并编写了以下虚拟编程:

#include <armadillo>
int main(){

arma::mat A = arma::randn<arma::mat>(3000,2000);
arma::mat B = cov(A);
arma::vec V = arma::randn(2000);
arma::mat C; arma::mat D;

for(int i = 0; i<20; ++i){ C = solve(V,B); D = inv(B);  }

return 0;
}
Run Code Online (Sandbox Code Playgroud)

用它编译它

g++ arma_try.cpp -o arma_try.so -larmadillo
Run Code Online (Sandbox Code Playgroud)

和配置文件

nvprof ./arma_try.so
Run Code Online (Sandbox Code Playgroud)

分析器输出显示:

==11798== Profiling application: ./arma_try.so
==11798== Profiling result:
Time(%)      Time     Calls       Avg       Min       Max  Name
 72.15%  4.41253s       580  7.6078ms  1.0360ms  14.673ms  void magma_lds128_dgemm_kernel<bool=0, bool=0, …
Run Code Online (Sandbox Code Playgroud)

c++ cuda armadillo rcpp

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

标签 统计

c++ ×2

armadillo ×1

cuda ×1

rcpp ×1

stl ×1