OpenCL现在都ios11支持的设备哪些并行设备

安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&只需一步,快速开始
查看: 3993|回复: 2
《OpenCL异构并行计算:原理、机制与优化实践》在线答疑开版
推荐《OpenCL异构并行计算:原理、机制与优化实践》
购书链接:
本版块特别邀请陈轶在线答疑。会员们在学习本书的过程中有什么疑问,可以在本版块内发帖。陈轶将在线与各位交流
  工业界和学术界联合鼎力推荐,国内专家和实践者倾囊相授,所有案例均经过真机环境验证。
  本书基于OpenCL 2.0标准,清晰地阐述了OpenCL的API,编程模型,交互与通信机制以及平台支持,对OpenCL 2.0新引入的SVM机制、管道和原子操作等进行了深入讲解,辅以大量示例说明,并给出卷积、矩阵乘法等优化实践案例。
  第1章主要介绍并行计算的发展历程以及OpenCL在其中所扮演的角色;第2章和第3章介绍了OpenCL的大体概念以及在主机端上API的功能与说明,让大家对OpenCL有一个整体认识,并熟悉开发的一般流程;第4章和第5章主要描述OpenCL C语言的概念以及相关语法点,让读者学会利用OpenCL C编写内核,深刻理解OpenCL的存储器模型。第6章对OpenCL整个同步机制做了总结性的深入介绍,从主机端的事件同步到内核程序的原子操作,每一种同步方式都做了非常详细的介绍;第7章详细描述了OpenCL与OpenGL之间的交互,以充分发挥GPU的计算能力,弥补OpenGL力有不逮的应用场景;第8章介绍了当前OpenCL实现厂商对各自OpenCL的硬件实现,以及各种不同硬件平台上如何有针对性地对OpenCL程序做进一步优化。第9章到第10章通过二维卷积和计算矩阵介绍了OpenCL的优化实践以及在实际工程项目中的使用技巧。
陈轶,网名zenny_chen,安沃传媒移动客户端及HTML5技术研发总监、首席科学家。多年高性能计算、嵌入式系统与移动互联网实践经验,深谙实时操作系统内核、设备驱动研发,对多媒体高性能计算编程、移动端开发以及各种处理器架构如数家珍,同时精通计算机底层基础技术与各种编程语言,现任OpenGPU社区“并行计算讨论区”以及“高级计算机体系结构讨论区”两大版块的版主,以及CocoaChina社区的Swift编程语言讨论区以及代码例子区的版主。曾任理光上海图像技术有限公司的高级体系结构工程师。
& && & 刘文志(花名风辰),毕业于中国科学院研究生院,闻名于并行计算江湖,尤善异构并行计算(X86、ARM、GPU、APU及PHI)和大规模集群计算,有7年相关经验,涉及图像处理、计算机视觉、数据挖掘和石油勘探。曾任英伟达并行计算工程师(协助建立英伟达北京CUDA团队)、百度在线高级研发工程师(协助建立百度深度学习实验室异构计算团队)。著有《并行算法设计与性能优化》《并行编程方法与优化实践》《科学计算与企业级应用的并行优化》三本并行计算领域的专著。微信公众号为:风辰的异构并行计算。
  吴长江,多年GPU异构并行计算经验,涉及视频图像处理、石油勘探、密码破解和有限元分析等。GPU编程布道者,讲解OpenACC,CUDA相关内容。译有CUDA Fortran有关书籍及OpenACC编程标准。精通CUDA C/Fortran、OpenCL、OpenACC,近期关注移动端GPU在GPGPU方面的应用。
  ★本书的作者是长期战斗在异构编程第一线的架构师和开发者,具有非常丰富的OpenCL使用和编程经验。本书正是他们多年OpenCL编程经验的总结,不仅详细描述了OpenCL的各种概念和特性,而且通过由浅到深的一系列实际应用案例,帮助读者掌握这个令人激动的新编程模型。
  ——张云泉 中国科学院计算技术研究所计算机体系结构国家重点实验室研究员
  ★本书的几位作者均来自社区,也是活跃在各大GPU厂家的资深技术人员和实际项目的开发工程师。他们从自己使用经验的角度来阐述如何构建一个合理优化的OpenCL程序。根据本书一步一步讲解的OpenCL编程知识,无论你是一个CPU编程人员,或者是一个CUDA编程人员,都可以很快地转到OpenCL编程。
  ——楚含进 AMD(中国)异构计算技术总监
第1章 异构并行计算的过去、现状和未来 1
1.1 单核标量处理器的困境 3
1.1.1 单核标量处理器如何提高性能 4
1.1.2 为什么单核标量处理器性能到达瓶颈 6
1.2 多核并行计算与向量化的出现 7
1.2.1 为什么会有多核 7
1.2.2 为什么会有向量化 7
1.2.3 如何利用多核和向量化的能力 8
1.2.4 多核和向量化的难点 8
1.3 异构并行计算的崛起 9
1.3.1 GPGPU的理念 9
1.3.2 CUDA的崛起 10
1.3.3 OpenCL横空出世 10
1.4 异构并行计算的未来(百花齐放) 11
1.5 本章小结 13
第2章 OpenCL的基本介绍 14
2.1 什么是OpenCL 14
2.2 OpenCL 平台模型 15
2.3 OpenCL 执行模型 15
2.3.1 上下文 16
2.3.2 命令队列 17
2.3.3 内核在OpenCL设备上执行 18
2.4 OpenCL存储器模型 19
2.4.1 存储器区域 19
2.4.2 存储器对象 21
2.4.3 共享虚拟存储器 21
2.5 OpenCL与OpenGL 22
2.6 OpenCL与CUDA 23
2.7 本章小结 23
第3章 进入OpenCL的世界(矢量加法) 25
3.1 构建示例 25
3.1.1 Windows平台 26
3.1.2 Linux平台 28
3.1.3 OS X平台 28
3.1.4 矢量加示例 29
3.2 获得OpenCL平台和设备及其属性 36
3.2.1 OpenCL平台 36
3.2.2 OpenCL设备 40
3.3 创建上下文和命令队列 51
3.3.1 创建OpenCL上下文 51
3.3.2 创建命令队列 56
3.4 创建程序对象和内核对象 58
3.5 程序对象 59
3.5.1 创建程序对象 59
3.5.2 构建程序对象 61
3.5.3 查询和管理程序对象 66
3.6 内核对象 69
3.6.1 创建内核对象 69
3.6.2 设置内核参数 70
3.6.3 查询和管理内核对象 73
3.7 执行内核 75
3.8 编写内核代码 76
3.9 OpenCL错误处理 78
3.10 本章小结 81
第4章 OpenCL C语言 82
4.1 修饰符 82
4.1.1 地址空间修饰符 82
4.1.2 函数修饰符 86
4.1.3 对象访问修饰符 88
4.2 标量数据类型 88
4.3 矢量数据类型 91
4.3.1 为什么要有矢量数据类型 92
4.3.2 矢量数据的使用 93
4.4 运算符 96
4.5 工作项布局函数 99
4.5.1 维度和工作项 100
4.5.2 工作组 101
4.6 数据拷贝操作 102
4.6.1 矢量数据拷贝 102
4.6.2 异步拷贝和预取 104
4.7 浮点函数 105
4.7.1 数学函数 106
4.7.2 公共函数 109
4.7.3 几何函数 110
4.8 整数函数 110
4.9 关系函数 112
4.10 杂项矢量函数 115
4.11 同步函数 117
4.12 原子函数 119
4.13 图像读/写函数 122
4.13.1 内建图像读函数 122
4.13.2 内建无采样器图像读 函数 126
4.13.3 内建图像写函数 129
4.13.4 内建图像查询函数 131
4.14 工作组函数 132
4.15 管道函数 134
4.15.1 内建管道读/写函数 135
4.15.2 内建工作组管道读/写函数 139
4.15.3 内建管道查询函数 140
4.16 设备队列 140
4.16.1 Blocks语法 142
4.16.2 设备队列相关函数 143
4.16.3 子内核存储器可见性 147
4.16.4 设备队列的使用示例 148
4.17 本章小结 153
第5章 OpenCL存储器对象 154
5.1 缓冲区 154
5.1.1 分配缓冲区对象 154
5.1.2 创建子缓冲区对象 157
5.2 图像对象和采样器对象 160
5.2.1 图像对象 160
5.2.2 采样器对象 166
5.2.3 图像旋转示例 171
5.3 管道 175
5.3.1 创建管道对象 175
5.3.2 管道对象查询 175
5.4 存储器对象数据传输 176
5.4.1 主机与设备间数据传输 176
5.4.2 存储器对象数据填充 181
5.4.3 存储器对象间数据传输 184
5.4.4 存储器对象映射 187
5.5 共享虚拟存储器 192
5.5.1 SVM缓冲操作 192
5.5.2 SVM类型和特性 197
5.5.3 相关示例 204
5.6 存储器一致性模型 208
5.6.1 存储器次序规则 214
5.6.2 原子操作的存储器次序规则 217
5.6.3 栅栏操作的存储器次序规则 219
5.6.4 工作组函数的存储器次序规则 220
5.6.5 主机端与设备端命令的存储器次序规则 221
5.6.6 关于存储器次序在实际OpenCL计算设备中的实现 223
5.7 本章小结 230
第6章 OpenCL同步及事件机制 231
6.1 主机端的OpenCL同步 232
6.2 OpenCL 事件机制 235
6.2.1 对OpenCL事件的标记和栅栏 244
6.2.2 内核程序中的同步 244
6.2.3 工作组内同步 245
6.3 原子操作 249
6.3.1 OpenCL 1.2中的原子操作 249
6.3.2 OpenCL 2.0中的原子操作 256
6.4 局部存储器与全局存储器间的异步拷贝 268
6.5 工作组间同步 272
6.6 本章小结 280
第7章 OpenCL与OpenGL互操作 281
7.1 从一个OpenGL上下文来创建OpenCL上下文 282
7.2 OpenCL使用OpenGL共享的缓存对象 283
7.3 OpenCL使用OpenGL纹理数据 295
7.4 OpenCL共享OpenGL渲染缓存 308
7.5 从一个OpenCL存储器对象查询OpenGL对象信息 314
7.6 访问共享对象的OpenCL与OpenGL之间的同步 315
7.7 本章小结 320
第8章 OpenCL到主流GPU处理器的映射 321
8.1 AMD家族GPU 321
8.1.1 AMD Cayman架构GPU 321
8.1.2 AMD GCN架构的GPU 326
8.2 NVIDIA CUDA兼容的GPU 333
8.2.1 NVIDIA GPU架构的执行模型 334
8.2.2 NVIDIA GPU的全局存储器 335
8.2.3 NVIDIA GPU的局部存储器 336
8.3 ARM Mali GPU架构 336
8.3.1 硬件架构 337
8.3.2 存储器层次 337
8.3.3 OpenCL映射 337
8.4 本章小结 338
第9章 OpenCL计算二维卷积 339
9.1 测试平台信息 340
9.2 AMD X86 CPU串行实现 341
9.2.1 简单实现 341
9.2.2 循环展开优化实现 342
9.2.3 AVX指令集优化 344
9.2.4 OpenMP 345
9.3 简单OpenCL实现 347
9.4 使用常量存储器优化 349
9.5 使用局部存储器优化 351
9.6 一个工作项同时计算多个输出 353
9.7 本章小结 355
第10章 OpenCL计算矩阵乘法 356
10.1 串行实现 357
10.1.1 初次实现 357
10.1.2 缓存友好的实现 357
10.1.3 使用AVX指令集实现 358
10.2 简单OpenCL实现 359
10.3 使用局部存储器优化 361
10.4 使用向量加载指令 363
10.5 一个工作项同时计算多个输出 365
10.6 优化流水线性能 368
10.7 本章小结 371
附录A OpenCL Query实例 372
附录B 其他主流异构并行计算编程环境简介 376
请问如何在n卡上使用opencl2.0
大概看了下目录 优化部分 只有40页 api的介绍部分太多 不抱太多期望
站长推荐 /1
为了更好地为各位会员提供技术支持服务,本论坛采用注册审核制度。您注册会员后,我们的管理人员会在8小时内在后台进行审核,审核通过会发邮件通知。只要是真实的开发者或学习者,我们都会审核通过。敬请谅解!如果您着急的话,可以发邮件至: 提醒我们第一时间审核通过。1.8 创建命令队列以及对OpenCL内核排队
本文所属图书&>&
第1章通过介绍使用OpenCL的目的和动机来为后续内容做好铺垫。第2章讨论OpenCL中的缓冲区对象以及划分数据的策略。第3章解释OpenCL提供的两种常规数据类型,即标量和向量数据类型,介绍如何使用这些数据类型解决不&&
本节将介绍如何对设备上的OpenCL内核对象排队。在开始操作之前回顾一下,我们可以在不指定OpenCL设备的情况下创建内核,并且可以通过命令队列在设备上执行这些内核。
此时,我们或许应该花费一些时间讨论按顺序执行以及如何将其与不按顺序执行进行比较,但是此主题既复杂又有趣。将要执行程序时,处理器可以选择按顺序或不按顺序处理程序中的指令;这两种方案之间的关键区别是,按顺序处理会导致静态的执行顺序;而不按顺序处理允许动态调度指令。不按顺序执行通常涉及重新排序指令,从而可以根据尽量减少计算停顿的目标,利用和驱动处理器中的所有计算单元。
然而,内核不是唯一可以在命令队列上排队的对象。内核需要数据才可执行其操作,而数据需要传送给设备以使用,这些数据可以是OpenCL缓冲区/子缓冲区或图像对象。封装数据的内存对象需要传输到设备中,你必须向命令队列发出内存命令才可实现该操作;在许多用例中,通常需要在开始计算之前将设备与数据结合在一起。
图1-4突出显示了此用例,其中调度内核以按顺序执行,并且假设内核需要对数据进行显式复制或内存映射;在执行完计算之后,将数据从设备内存复制到主机内存。
此外,可以创建多个命令队列并使用命令对它们进行排队,存在多个命令队列的原因是你希望解决的问题涉及主机中的一些(如果不是所有的话)异构设备。并且,这些命令队列可能表示彼此不共享数据的独立计算流,也可能表示相关的计算流,其中每个随后的任务取决于前一个任务(通常共享数据)。注意,这些命令队列将在设备上不同步执行,前提是没有共享任何数据。如果共享数据,则程序员需要通过OpenCL规范提供的同步命令确保数据同步。
作为独立计算流的示例,图1-5假设标识了3个独立的任务,这些任务需要在一个设备上执行。可以组建3个分别在其中将任务排队的命令队列(仅按顺序执行)和一个管道,从而设备可以在实施I/O的同时执行内核代码,这样就使设备不会在等待数据时保持空闲,实现了更好的利用率。
注意:需要知道的是,即使命令队列中排队的命令默认按顺序执行,也可以通过在创建命令队列时传递CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE标志来启用不按顺序执行。
图1-6显示了一个不按顺序执行的示例,其中假设将问题分解为3个相互依赖的内核,每个内核将使用和处理数据,然后将数据传递给下一个阶段。进一步假设内核的执行是不按顺序的。接下来出现的情况是不可预知的,这就是此选项永远不可能成为默认选项的原因。
然而,读者应该了解AMD和Intel中CPU的相关信息。
开始操作内核时,你可能发现某些内核看起来比其他内核具有更好的性能。可以在进行微调时简要描述该内核,方法是在创建命令队列时传递CL_QUEUE_PROFILING_ENABLE标志。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。
文章下载读书博客分类:
OpenCL与GPU计算入门
Erik Smistad
Getting started with OpenCL and GPU Computing
安装和设置OpenCL
在Ubuntu Linux上安装AMD显卡上的OpenCL
在Ubuntu Linux上安装nVidia显卡上的OpenCL
第一个OpenCL程序,向量加法
编译OpenCL程序
OpenCL(Open Computing Language,开放计算语言)是一个在并行多计算平台上写程序的框架,由多个制造商提供多种计算设备,如AMD、Intel、ATI、nVidia等。这个框架定义了一种语言来编写内核(kernel)。这些内核是一些运行在不同计算设备上的函数。本文解释如何开始OpenCL,以及两个列表并行求和的例子。
安装和设置OpenCL
最初需要下载最新的显卡驱动,这因为如果OpenCL在你的显卡驱动不支持OpenCL时无法工作。
要安装OpenCL,你需要下载一个OpenCL实现。主要的显卡制造商nVidia和AMD/ATI都有提供基于GPU的OpenCL实现。这些实现都提供了SDK和有用的工具,如性能优化器。下一步是下载和安装GPU SDK。注意不是所有的显卡都支持,支持的显卡参见制造商网站。
对AMD/ATI,下载
对nVidia,下载
安装步骤依赖于SDK和OS。遵循如下步骤。推荐使用Ubuntu Linux和AMD 7970显卡。
在Ubuntu Linux上安装AMD显卡上的OpenCL
要安装最新的AMD驱动到Ubuntu-12.04,需要安装和激活"ATI/AMD proprietary FGLRX显卡驱动"。
再这一步完成后,下载和解压
AMD APP SDK 2.8包含了安装器,运行:
sudo sh Install-AMD-APP.sh
下一步,安装OpenCL头文件:
sudo apt-get install opencl-headers
这就行了,注意AMD APP SDK,及其例子在 /opt/AMDAPP 。
在Ubuntu Linux上安装nVidia显卡上的OpenCL
下载CUDA SDK
。打开终端运行安装文件:
sudo sh cudatoolkit_3.1_linux_64_ubuntu9.10.run
下载开发者驱动,安装前关闭X,运行文件然后开启X。其中关闭X用:
sudo /etc/init.d/gdm stop
然后打开终端通过Ctrl+Alt+F5,登录并导航到下载驱动的目录:
sudo sh devdriver_3.1_linux_64_256.40.run
之后重启X:
在开始编译OpenCL应用前,需要添加库的路径:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
第一个OpenCL程序,向量加法
展示OpenCL的简单例子。假设有2个列表的数字,A和B,相同长度。向量加法就是将A和B对应的每个像素相加,并将结果放入新的列表C。
通过循环方式的如下:
for (int i=0; i&LIST_SIZE; i++) {
C[i]=A[i]+B[i];
这个算法简单,但是是线性时间复杂度的,O(n)是列表大小。因为每次迭代都是独立的,因此操作是数据并行的,意味着每次迭代可以同时计算。所以我们有n个核心的处理器用以在常量时间内完成计算O(1)。
要编写OpenCL内核来并行计算。内核是一个函数,运行在计算设备上。
内核以OpenCL语言编写,是C的子集,以及包含了很多数学和向量函数。内核做向量加法如下:
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C) {
//获得当前要处理元素的索引
int i=get_global_id(0);
C[i]=A[i]+B[i];
主机程序控制了内核的执行。主机程序以C语言编写,但可以绑定到其他语言如C++和Python。OpenCL API定义于 cl.h (Apple为 opencl.h )。如下代码为主机程序执行了如上的内核。不会讲解细节,具体参见介绍性的 "The OpenCL Programming Book" 。主机程序的主要步骤:
获取平台和设备的信息
选择设备用以执行
创建OpenCL上下文
创建命令队列
创建内存缓冲对象
传输数据到设备的内存缓冲
创建程序对象
载入内核源码,并编译,或载入预编译的二进制OpenCL程序
创建内核对象
设置内核参数
读取内存对象,此时从计算设备读取C列表
#include &stdio.h&
#include &stdlib.h&
#ifdef __APPLE__
#include &OpenCL/opencl.h&
#include &CL/cl.h&
#define MAX_SOURCE_SIZE (0x100000)
int main(void) {
//创建2个输入向量
cosnt int LIST_SIZE=1024;
int *A=(int*)malloc(sizeof(int)*LIST_SIZE);
int *B=(int*)malloc(sizeof(int)*LIST_SIZE);
for (i=0; i&LIST_SIZE; i++) {
B[i]=LIST_SIZE-i;
//载入内核源码到source_str
char *source_
size_t source_
fp=fopen("vector_add_kernel.cl","r");
if (!fp) {
fprintf(stderr, "Failed to load kernel\n");
source_str=(char*)malloc(MAX_SOURCE_SIZE);
source_size=fread(source_str,1,MAX_SOURCE_SIZE,fp);
fclose(fp);
//获得平台和设备信息
cl_platform_id platform_id=NULL;
cl_device_id device_id=NULL;
cl_uint ret_num_
cl_uint ret_num_
cl_int ret=clGetPlatformIDs(1, &platform_id, &ret_num_platform);
ret=clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_DEFAULT, 1, &deivce_id, &ret_num_devices);
//创建OpenCL上下文
cl_context context=clCreateContext(NULL,1,&device_id,NULL,NULL,&ret);
//创建命令队列
cl_command_queue command_queue=clCreateCommandQueue(context,device_id,0,&ret);
//创建内存缓冲对象,在设备上为每个向量
cl_mem a_mem_obj=clCreateBuffer(context,CL_MEM_READ_ONLY,
LIST_SIZE*sizeof(int),NULL,&ret);
cl_mem b_mem_obj=clCreateBuffer(context,CL_MEM_READ_ONLY,
LIST_SIZE*sizeof(int),NULL,&ret);
cl_mem c_mem_obj=clCreateBuffer(context,CL_MEM_WRITE_ONLY,
LIST_SIZE*sizeof(int),NULL,&ret);
//拷贝数据A和B到对应的内存缓冲
ret=clEnqueueWriteBuffer(command_queue,a_mem_obj,CL_TRUE,0,
LIST_SIZE*sizeof(int),A,0,NULL,NULL);
ret=clEnqueueWriteBuffer(command_queue,a_mem_obj,CL_TRUE,0,
LIST_SIZE*sizeof(int),B,0,NULL,NULL);
//创建程序
cl_program program=clCreateProgramWithSource(context,1,
(const char**)&source_str,(const size_t*)&source_size, &ret);
//构建程序
ret=clBuildProgram(program,1,&device_id,NULL,NULL,NULL);
//创建OpenCL内核
cl_kernel kernel=clCreateKernel(program,"vector_add",&ret);
//设置内核参数
ret=clSetKernelArg(kernel,0,sizeof(cl_meme),(void*)&a_mem_obj);
ret=clSetKernelArg(kernel,1,sizeof(cl_meme),(void*)&b_mem_obj);
ret=clSetKernelArg(kernel,2,sizeof(cl_meme),(void*)&c_mem_obj);
//执行内核
size_t global_item_size=LIST_SIZE;
//处理整个列表
size_t local_item_size=64;
//分割为64个组
ret=clEnqueueNDRangeKernel(command_queue,kernel,1,NULL,
&global_item_size,&local_item_size,0,NULL,NULL);
//读取内存缓冲C到本地变量C
int *C=(int*)malloc(sizeof(int)*LIST_SIZE);
ret=clEnqueueReadBuffer(command_queue,c_mem_obj,CL_TRUE,0,
LIST_SIZE*sizeof(int),C,0,NULL,NULL);
//显示结果
for (i=0; i&LIST_SIZE; i++) {
printf("%d + %d = %d\n", A[i], B[i], C[i]);
//清理资源
ret=clFlush(command_queue);
ret=clFinish(command_queue);
ret=clReleaseKernel(kernel);
ret=clReleaseProgram(program);
ret=clReleaseMemObj(a_mem_obj);
ret=clReleaseMemObj(b_mem_obj);
ret=clReleaseMemObj(c_mem_obj);
ret=clReleaseCommandQueue(command_queue);
ret=clReleaseContext(context);
想要OpenCL运行在GPU上,你需要修改常量 CL_DEVICE_TYPE_DEFAULT 到 CL_DEVICE_TYPE_GPU 。要运行在CPU上修改为 CL_DEVICE_TYPE_CPU 。所以修改很简单。
编译OpenCL程序
如果OpenCL头文件和库放在了正确的位置,如下命令编译向量加法程序:
gcc main.o -o vectorAddition -l OpenCL
要学习更多关于OpenCL,建议从 "The OpenCL programming book" 开始。如下是其他的OpenCL信息:
nVidia's page on OpenCL:
AMD/ATI's page on OpenCL:
Official website of OpenCL:
浏览: 733476 次
来自: 北京
我的情况恰巧与博主相反,做了不少电子开发,总是无法把电子硬件与 ...
学习了 谢谢
我也很想把底层的电路原理搞懂啊
团队建设是为了建设团队,感觉不能光吃,吃的过程中增加些互动游戏 ...当前位置 & &
& 并行加速计算新标准:OpenCL 1.2正式发布
并行加速计算新标准:OpenCL 1.2正式发布
09:16:35&&作者:
编辑:上方文Q &&)
让小伙伴们也看看:
阅读更多:
好文共享:
文章观点支持
当前平均分:0(0 次打分)
[04-02][04-01][03-31][03-28][03-27][03-25][03-24][03-19][03-17][03-14]
登录驱动之家
没有帐号?
用合作网站帐户直接登录}

我要回帖

更多关于 并行接口可连接设备数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信