accelerator(加速器)

来源:互联网 发布:女程序员转行做什么 编辑:程序博客网 时间:2024/04/29 08:09
概述
一个加速器代表一个“目标”c++ AMP代码可以执行和数据可以驻留的地方。通常加速器是一个GPU设备。accelerator在c++ AMP作为加速器的对象类。
通常情况下,你不需要获取加速器对象,因为运行时会默认系统中最好的加速器作为默认设备。当然,如果你需要根据需求选择你的加速器,或需要在程序中使用多个加速器时,你就需要操作加速器对象啦。
构造函数与操作运算的使用
  你可以在运行时启动后,查询和获取系统中所有加速区的向量(std:vector)
除了列举所有加速器之外,你还可以直接通过设备路径直接创建一个加速器,前提是你知道该设备的路径。如
accelerator acc(L"PCI\\VEN_1002&DEV_6898&SUBSYS_0B001002etc");
下面有一些预定义的字符串(预定义的加速器常量),你可以直接将其传递给加速器构造函数创建加速器对象。如:
accelerator::default_accelerator  默认加速器 
accelerator::direct3d_ref  在CPU上模拟direct3d设备加速器 accelerator acc(accelerator::direct3d_ref);
accelerator::direct3d_warp  在CPU上利用多核及SSE的仿真加速器 accelerator acc(accelerator::direct3d_warp);
accelerator::cpu_accelerator CPU加速器 accelerator acc(accelerator::cpu_accelerator);
你还可以创建一个加速器,并通过复制-(构造函数)或运算符重载=对另一个加速器对象赋值。说到重载,你还可以通过比较两者是否相等, 来判断两个加速器对象是否来一个底层设备。
查询加速器特征
当给定一个加速器对象时,你可以访问其描述,版本,设备路径,以KB为大小表示的内存大小,是否是模拟器等,是否支持双精度等。
示例如下:
  vector<accelerator> accs = accelerator::get_all(); 
  std::for_each(accs.begin(), accs.end(), [] (accelerator acc) 
  { 
    std::wcout << "New accelerator: " << acc.description << std::endl; 
    std::wcout << "device_path = " << acc.device_path << std::endl; 
    std::wcout << "version = " << (acc.version >> 16) << '.' << (acc.version & 0xFFFF) << std::endl; 
    std::wcout << "dedicated_memory = " << acc.dedicated_memory << " KB" << std::endl; 
    std::wcout << "doubles = " << ((acc.supports_double_precision) ? "true" : "false") << std::endl; 
    std::wcout << "limited_doubles = " << ((acc.supports_limited_double_precision) ? "true" : "false") << std::endl; 
    std::wcout << "has_display = " << ((acc.has_display) ? "true" : "false") << std::endl;
    std::wcout << "is_emulated = " << ((acc.is_emulated) ? "true" : "false") << std::endl; 
    std::wcout << "is_debug = " << ((acc.is_debug) ? "true" : "false") << std::endl; 
    std::cout << std::endl; 
  });
accelerator_view
在下一篇博客中,我们将讲述另一个相关的类:accelerator_view.。这里只说以下内容就够了:
每一个加速区可以具有1-n个相关的加速器对象。你可以通过default_view获取加速器的默认视图。
或者通过creat_view 创建一个新的加速器视图。creat_view接收queuing_mode (队列模式)的enum类型的数值(包括queuing_mode_automatic or queuing_mode_immediate)作为参数。
0 0