当前位置: 首页 > wzjs >正文

门户网站地方生活门户有哪些上海关键词seo

门户网站地方生活门户有哪些,上海关键词seo,手机网站页面尺寸大小,wordpress4.7下载AMGCL库的Backends及使用示例 AMGCL是一个用于解决大型稀疏线性方程组的C库,它提供了多种后端(backends)实现,允许用户根据不同的硬件和性能需求选择合适的计算后端。 AMGCL支持的主要Backends 内置Backends: builtin - 默认的纯C实现block - 支持块状…

AMGCL库的Backends及使用示例

AMGCL是一个用于解决大型稀疏线性方程组的C++库,它提供了多种后端(backends)实现,允许用户根据不同的硬件和性能需求选择合适的计算后端。

AMGCL支持的主要Backends

  1. 内置Backends:

    • builtin - 默认的纯C++实现
    • block - 支持块状矩阵
  2. 并行计算Backends:

    • openmp - 基于OpenMP的并行实现
    • cuda - NVIDIA CUDA后端
    • vexcl - 基于VexCL的异构计算后端(支持OpenCL和CUDA)
  3. 外部库集成Backends:

    • eigen - Eigen库后端
    • ublas - Boost.uBLAS后端

使用示例

1. 使用内置后端(builtin)

#include <amgcl/backend/builtin.hpp>
#include <amgcl/make_solver.hpp>
#include <amgcl/amg.hpp>
#include <amgcl/coarsening/smoothed_aggregation.hpp>
#include <amgcl/relaxation/spai0.hpp>
#include <amgcl/solver/bicgstab.hpp>int main() {// 矩阵大小const int n = 100;// 使用内置后端创建矩阵typedef amgcl::backend::builtin<double> Backend;// 设置矩阵(这里用对角线矩阵作为示例)std::vector<int> ptr = {0, 1, 2, 3, ..., n};std::vector<int> col = {0, 1, 2, 3, ..., n-1};std::vector<double> val(n, 2.0); // 对角线值为2// 创建AMG层次结构typedef amgcl::make_solver<amgcl::amg<Backend,amgcl::coarsening::smoothed_aggregation,amgcl::relaxation::spai0>,amgcl::solver::bicgstab<Backend>> Solver;// 设置求解器参数Solver::params prm;prm.solver.max_iter = 100;// 初始化求解器Solver solve(std::tie(n, ptr, col, val), prm);// 创建右侧向量和初始解std::vector<double> rhs(n, 1.0), x(n, 0.0);// 求解int iters;double error;std::tie(iters, error) = solve(rhs, x);std::cout << "Iterations: " << iters << std::endl;std::cout << "Error: " << error << std::endl;return 0;
}

2. 使用OpenMP后端

#include <amgcl/backend/builtin.hpp>
#include <amgcl/value_type/static_matrix.hpp>
#include <amgcl/adapter/block_matrix.hpp>
#include <amgcl/make_solver.hpp>
#include <amgcl/amg.hpp>
#include <amgcl/coarsening/smoothed_aggregation.hpp>
#include <amgcl/relaxation/ilu0.hpp>
#include <amgcl/solver/cg.hpp>
#include <amgcl/profiler.hpp>int main() {// 启用OpenMP后端typedef amgcl::backend::builtin<double> Backend;// 设置OpenMP线程数omp_set_num_threads(4);// 创建矩阵(这里用随机矩阵作为示例)const int n = 1000;std::vector<int> ptr(n+1), col;std::vector<double> val;// 填充矩阵(5对角矩阵)for(int i = 0; i < n; ++i) {ptr[i] = col.size();for(int j = std::max(0, i-2); j < std::min(n, i+3); ++j) {col.push_back(j);val.push_back(i == j ? 10.0 : -1.0);}}ptr[n] = col.size();// 创建AMG求解器typedef amgcl::make_solver<amgcl::amg<Backend,amgcl::coarsening::smoothed_aggregation,amgcl::relaxation::ilu0>,amgcl::solver::cg<Backend>> Solver;// 设置参数Solver::params prm;prm.solver.tol = 1e-6;// 初始化求解器Solver solve(std::tie(n, ptr, col, val), prm);// 创建右侧向量和初始解std::vector<double> rhs(n, 1.0), x(n, 0.0);// 求解int iters;double error;std::tie(iters, error) = solve(rhs, x);std::cout << "Iterations: " << iters << std::endl;std::cout << "Error: " << error << std::endl;return 0;
}

3. 使用CUDA后端

#include <amgcl/backend/cuda.hpp>
#include <amgcl/make_solver.hpp>
#include <amgcl/amg.hpp>
#include <amgcl/coarsening/smoothed_aggregation.hpp>
#include <amgcl/relaxation/ilu0.hpp>
#include <amgcl/solver/bicgstab.hpp>
#include <thrust/device_vector.h>int main() {// 使用CUDA后端typedef amgcl::backend::cuda<double> Backend;// 矩阵大小const int n = 1000;// 在主机上创建矩阵(CSR格式)std::vector<int> ptr_host(n+1), col_host;std::vector<double> val_host;// 填充矩阵(5对角矩阵)for(int i = 0; i < n; ++i) {ptr_host[i] = col_host.size();for(int j = std::max(0, i-2); j < std::min(n, i+3); ++j) {col_host.push_back(j);val_host.push_back(i == j ? 10.0 : -1.0);}}ptr_host[n] = col_host.size();// 将矩阵拷贝到设备thrust::device_vector<int> ptr = ptr_host;thrust::device_vector<int> col = col_host;thrust::device_vector<double> val = val_host;// 创建AMG求解器typedef amgcl::make_solver<amgcl::amg<Backend,amgcl::coarsening::smoothed_aggregation,amgcl::relaxation::ilu0>,amgcl::solver::bicgstab<Backend>> Solver;// 设置参数Solver::params prm;prm.solver.tol = 1e-6;// 初始化求解器Solver solve(amgcl::adapter::csr(thrust::raw_pointer_cast(ptr.data()),thrust::raw_pointer_cast(col.data()),thrust::raw_pointer_cast(val.data()),n, n),prm);// 创建右侧向量和初始解(在设备上)thrust::device_vector<double> rhs(n, 1.0), x(n, 0.0);// 求解int iters;double error;std::tie(iters, error) = solve(thrust::raw_pointer_cast(rhs.data()),thrust::raw_pointer_cast(x.data()));std::cout << "Iterations: " << iters << std::endl;std::cout << "Error: " << error << std::endl;return 0;
}

选择Backend的考虑因素

  1. 问题规模:

    • 小规模问题: 内置后端或Eigen后端
    • 大规模问题: OpenMP或CUDA后端
  2. 硬件环境:

    • 多核CPU: OpenMP后端
    • NVIDIA GPU: CUDA后端
    • 异构系统: VexCL后端
  3. 矩阵特性:

    • 标量问题: 基本后端
    • 块状矩阵: 块状后端

AMGCL的设计允许你通过简单地更改模板参数来切换后端,而无需重写大部分代码,这为性能调优提供了极大的灵活性。

http://www.dtcms.com/wzjs/172019.html

相关文章:

  • 免费视频素材网站都有哪些泉州百度开户
  • 手机欧美视频网站模板下载 迅雷下载 迅雷下载地址萧山区seo关键词排名
  • 信誉好的o2o网站建设江苏网站seo
  • 建设银行电商网站网络营销渠道有哪几种
  • 做网站用到什么开发语言百度指数查询网
  • 伪网站建站哪个搜索引擎最好
  • 免费做外贸的网站要做网络推广
  • 黑龙江省建设局网站首页今天新闻头条新闻
  • 台湾网友做的二次元炒股网站今日头条新闻最新消息
  • 做网站的网址宁波网站推广方式
  • 成都网站建设成都网站制作如何推广自己成为网红
  • 不用wordpress建站公司官网怎么做
  • 北京品牌高端网站建设公司广东seo点击排名软件哪里好
  • 哪个网站可以做条形码代发百度关键词排名
  • 百度销售岗位怎么样游戏优化大师官网
  • 给自己的网站做镜像网站seo优化顾问服务阿亮
  • 购物网站制作费用西安百度推广排名
  • 做 直销网站 公司吗怎么申请域名建网站
  • web前端只做网站么长春网站建设方案优化
  • 杭州家具网站建设方案whois域名查询
  • bootstrap导航网站百度推广是什么
  • 四合一网站搜索排行榜
  • 搜狗推广做网站要钱吗seo诊断书
  • 做网站必须要dreamever百度联盟是什么
  • 烤肉自助餐网站建设推广资讯
  • 自己如何建设外贸网站建站快速排名新
  • 网络公司管理系统廊坊seo外包公司费用
  • 泰州哪里做网站百度游戏排行榜风云榜
  • 哈尔滨建站哪个好seo技术介绍
  • 第二季企业网站开发产品经理培训哪个机构好