..

给platform重载一个operator<<

platform定义

  • The platform class provides an interface to an OpenCL platform.

如果你的机器上安装了2个OpenCL的实现,即OpenCLSDK,则会有 2 个platform。 OpenCL 提供的 cl_platform_id 来表示 platform。

获取platform

再次提醒一下,OpenCL这个系列以 boost.compute 的 API为主,基本不使用 OpenCL 的原生API。
<boost/compute/system.hpp> 中,提供获取platform的方法。

  static std::vector< platform > platforms();
  static size_t platform_count();

for(const auto &platform : boost::compute::system::platforms()){
    std::cout << platform.name() << std::endl;
}

重载 operator « 方法

如果每次想查看 platform 的基本信息,这样输出太繁杂。 算了, 不管杂不杂吧, 我就想给他重载一个operator。

// 给 namespace boost::compute 添加 打印 platform 信息的方法
namespace boost {
    namespace compute {
        // 重载 operator << , 方便打印。
        std::ostream& operator << (std::ostream& os, const platform& pf) {
	        static size_t pre_blank = 25;
	        static size_t end_blank = 35;

            // platform ID
            os.width(pre_blank);
            os << "platform id      : ";
            os.width(end_blank);
            os << pf.id() << "\n";

            // platform name
            os.width(pre_blank);
            os << "platform name    : ";
            os.width(end_blank);
            os << pf.name() << "\n";

            // platform vendor
            os.width(pre_blank);
            os << "platform vendor  : ";
            os.width(end_blank);
            os << pf.vendor() << "\n";

            // platform profile
            os.width(pre_blank);
            os << "platform profile : ";
            os.width(end_blank);
            os << pf.profile() << "\n";

            // platform version
            os.width(pre_blank);
            os << "platform version : ";
            os.width(end_blank);
            os << pf.version() << "\n";

            // platform extensions
            os.width(pre_blank);
            os << "platform extensions : ";
            os.width(end_blank);
            for(auto& e : pf.extensions()) {
                os.width(0);
                os << e << " ";
            }
            os << "\n";

            // platform device count
            os.width(pre_blank);
            os << "platform device count : ";
            os.width(end_blank);
            os<< pf.device_count() << "\n";

            return os;
        }
    }
}

下次在想看看 platform 信息的时候, 这样:

std::cout << platform_obj << std::endl;

好了,platform 就了解到这里。
更多方法去这里找。 1