OpenCL 2.0 异构计算 [第三版] (中文)
  • Introduction
  • 序言
  • 第1章 简介异构计算
    • 1.1 关于异构计算
    • 1.2 本书目的
    • 1.3 并行思想
    • 1.4 并发和并行编程模型
    • 1.5 线程和共享内存
    • 1.6 消息通讯机制
    • 1.7 并行性的粒度
    • 1.8 使用OpenCL进行异构计算
    • 1.9 本书结构
  • 第2章 设备架构
    • 2.1 介绍
    • 2.2 硬件的权衡
    • 2.3 架构设计空间
    • 2.4 本章总结
  • 第3章 介绍OpenCL
    • 3.1 简介OpenCL
    • 3.2 OpenCL平台模型
    • 3.3 OpenCL执行模型
    • 3.4 内核和OpenCL编程模型
    • 3.5 OpenCL内存模型
    • 3.6 OpenCL运行时(例子)
    • 3.7 OpenCL C++ Wapper向量加法
    • 3.8 CUDA编程者使用OpenCL的注意事项
  • 第4章 OpenCL案例
    • 4.1 OpenCL实例
    • 4.2 直方图
    • 4.3 图像旋转
    • 4.4 图像卷积
    • 4.5 生产者-消费者
    • 4.6 基本功能函数
    • 4.7 本章总结
  • 第5章 OpenCL运行时和并发模型
    • 5.1 命令和排队模型
    • 5.2 多命令队列
    • 5.3 内核执行域:工作项、工作组和NDRange
    • 5.4 原生和内置内核
    • 5.5 设备端排队
    • 5.6 本章总结
  • 第6章 OpenCL主机端内存模型
    • 6.1 内存对象
    • 6.2 内存管理
    • 6.3 共享虚拟内存
    • 6.4 本章总结
  • 第7章 OpenCL设备端内存模型
    • 7.1 同步和交互
    • 7.2 全局内存
    • 7.3 常量内存
    • 7.4 局部内存
    • 7.5 私有内存
    • 7.6 统一地址空间
    • 7.7 内存序
    • 7.8 本章总结
  • 第8章 异构系统下解析OpenCL
    • 8.1 AMD FX-8350 CPU
    • 8.2 AMD RADEON R9 290X CPU
    • 8.3 OpenCL内存性能的考量
    • 8.4 本章总结
  • 第9章 案例分析:图像聚类
    • 9.1 图像聚类简介
    • 9.2 直方图的特性——CPU实现
    • 9.3 OpenCL实现
    • 9.4 性能分析
    • 9.5 本章总结
  • 第10章 OpenCL的分析和调试
    • 10.1 设置本章的原因
    • 10.2 使用事件分析OpenCL代码
    • 10.3 AMD CodeXL
    • 10.4 如何使用AMD CodeXL
    • 10.5 使用CodeXL分析内核
    • 10.6 使用CodeXL调试OpenCL内核
    • 10.7 使用printf调试
    • 10.8 本章总结
  • 第11章 高级语言映射到OpenCL2.0 —— 从编译器作者的角度
    • 11.1 简要介绍现状
    • 11.2 简单介绍C++ AMP
    • 11.3 编译器的目标 —— OpenCL 2.0
    • 11.4 C++ AMP与OpenCL对比
    • 11.5 C++ AMP的编译流
    • 11.6 编译之后的C++ AMP代码
    • 11.7 OpenCL 2.0提出共享虚拟内存的原因
    • 11.8 编译器怎样支持C++ AMP的线程块划分
    • 11.9 地址空间的推断
    • 11.10 优化数据搬运
    • 11.11 完整例子:二项式
    • 11.12 初步结果
    • 11.13 本章总结
  • 第12章 WebCL:使用OpenCL加速Web应用
    • 12.1 介绍WebCL
    • 12.2 如何使用WebCL编程
    • 12.3 同步机制
    • 12.4 WebCL的交互性
    • 12.5 应用实例
    • 12.6 增强安全性
    • 12.7 服务器端使用WebCL
    • 12.8 WebCL的状态和特性
  • 第13章 其他高级语言中OpenCL的使用
    • 13.1 本章简介
    • 13.2 越过C和C++
    • 13.3 Haskell中使用OpenCL
    • 13.4 本章总结
Powered by GitBook
On this page

Was this helpful?

  1. 第12章 WebCL:使用OpenCL加速Web应用

12.7 服务器端使用WebCL

Previous12.6 增强安全性Next12.8 WebCL的状态和特性

Last updated 6 years ago

Was this helpful?

WebCL为计算而生,其可以使用在浏览器中,也可以使用与单独的JavaScript应用和服务中。Node.js是一款基于Chrome编译出的JavaScript运行时,其有运行速度快和网络应用可扩展能力强的特性。Node.js使用事件驱动,无阻塞输入/输出模型,让其集高性能和轻量化于一身。其实现的数据敏感、实时性的应用,在分布设备上的表现十分出色[1]。Node.js具有很好的模块化,其已经有超过80000个模块存在,其中一个就是node-webcl[2]。node-webcl也具有扩展特性,使用了一些Node.js标准中的特性(例如,使用Node.js内存时,和数组的方式一致),其他特性在未来可能会考虑放在WebCL的标准中发布。

安装node-webcl要比安装浏览器麻烦许多。其作为开发工具,需要依赖一些第三方库,并且需要重新编译。

  • 首先,确认OpenCL的SDK能够使用你的CPU和GPU:

    • 对于Intel GPU,从下载SDK

    • 对于AMD GPU,从下载SDK

    • 对于NVIDIA GPU,从下载SDK

  • 从安装Node.js

  • 安装node-gyp:npm install -g node-gyp

  • 安装node-image:

    • 在下载FreeImage库和头文件

    • npm install node-image

如果你想使用WebGL的互操作扩展开发应用,你还需要安装node-webgl和node-glfw:

  • 安装GLEW

  • 安装GLFW 3.x

  • 安装AntTweakBar库和头文件

  • npm install node-glfw node-webgl

建议将上面GLEW,AntTwekBar,FreeImage和GLFW包中的库文件和头文件,放置在你的头文件和库文件目录下面,这样在编译各个Node.js模块时,便于编译器进行查找;否则,你就需要修改binding.gyp文件。以上四个库在所有桌面平台(Mac,Windows和Linux)是可用的,并且在Linux和Mac下可以使用安装包管理器进行安装,比如apt-get和Homebrew[3]。

为了在代码中使用node-webcl,先打开编辑器,你需要将WebCL的API添加入全局命名空间中。下面webcl对象,就和浏览器中的window.webcl对象一样。

// add WebCL API
var webcl = require('node-webcl');

// rest of the code is identical to that in browser

将代码中的"require('node-webcl')"换成webcl=window.webcl就能让这段代码在支持WebCL的浏览器中生效。通过node-webcl,我们就能使用操作系统中的访问方式,并且能使用所有Node.js中的模块。

在Node.js中使用node-webcl,无论是对服务器上的计算进行加速,还是对浏览器的Web接口的交互进行加速[4],对于网络访问都是十分有意义的事情[5]。

同样,不同的应用使用的编程框架也不同,比如:Python, R和MATLAB等。脚本语言提供一些特性,也可以用于JavaScript。虽然框架不同,但是很多运行时库也存在有JavaScript版本(甚至有工具能直接将其他脚本语言的代码,直接转换成JavaScript)。目前通过使用Node.js,JavaScript在现有的脚本语言框架中的性能是相对好的。

因为node-webcl的限制要比浏览器少,所以相关应用的开发进程通常会更快,并且性能还不错。由于Node.js的原因,也有很多动态和多线程应用也会使用JavaScript开发,不过这些应用可能不会在浏览器端使用。这些应用就是典型的服务器端应用,其需要在当前平台上的所有支持OpenCL的设备上,对复杂的负载进行调度。

随着Node.js和node-webcl的使用,基于JavaScript的应用可以快速的部署在服务器端和客户端。当前,一些数据敏感的实时应用,已经可以使用JavaScript完成。

目前,一个新的Node.js模块出现,其名为node-opencl[6]。其与node-webcl为同一个开发者,node-opencl是对node-webcl的重写。node-opencl要比node-webcl更加底层,其可以让JavaScript直接使用OpenCL的特性。WebCL只支持OpenCL 1.1,不过node-opencl支持所有版本的OpenCL。其他人可以使用JavaScript在node-opencl的基础上开发出自己的WebCL。不过,所有WebCL实现都会随着时间的推移,对特性进行增强,对Bug进行修复。所以,目前node-opencl和node-webcl都被Node.js所支持。

[1]

[2]

[3]

[4]

[5]

[6]

这里
这里
这里
这里
这里
地址
地址
地址
https://www.nodejs.orh
https://github.com/Motorola-Mobility/node-webcl
http://brew.sh
http://dev.w3.org/html5/websockets
http://superconductor.github.io/superconductor
https://github.com/mikeserven/node-opencl