社区
OpenCL和异构编程
帖子详情
opencl可以实现选择CPU的几个核来运行吗
a286277256
2015-08-09 03:58:02
刚学opencl,在CPU上并行,我的CUP是双核/四线程的,在任务管理器下可以看到四个线程的窗口,四个线程都在运行,使用率到100%,能不能只要其中1个或者2个线程运行程序呢?
...全文
2401
2
打赏
收藏
opencl可以实现选择CPU的几个核来运行吗
刚学opencl,在CPU上并行,我的CUP是双核/四线程的,在任务管理器下可以看到四个线程的窗口,四个线程都在运行,使用率到100%,能不能只要其中1个或者2个线程运行程序呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
PiPiDad
2016-04-16
打赏
举报
回复
opencl和CPU线程没关系的
fronteer
2015-08-17
打赏
举报
回复
这个可以,在 OpenCL API 层不支持这个控制,但可以通过操作系统的 taskset 命令来达到目的
Delphi XE2的
OpenCL
控件(可以象TQuery一样使用
OpenCL
)
这是一个基于Delphi XE2的
OpenCL
控件。其中使用到了Khronos Group Inc.的CL.pas单元。
OpenCL
的设计思路和OpenGL类似,对于大部分Delphi的设计者来说,非常不习惯,而且使用起来并不十分方便 设计这个T
OpenCL
控件的目的不是替代
OpenCL
的原生使用方式,而是为了开发者能够快速对
OpenCL
进行应用并且可以 用来测试性能和功能。 使用T
OpenCL
控件,可以象使用数据库控件那样方便的去调用
OpenCL
程序,不需要太多代码就可以
运行
一个
OpenCL
的Kernel。这对于学习和深入研究
OpenCL
的性能有一个很好的铺垫。 使用
OpenCL
做并行计算的一个主要因素就是提高大数据量计算的速度,这和通常的业务处理类程序大不相同,因 此提升
OpenCL
的
运行
效率是至关重要的,本控件附带的Demo程序中,是对两个长度分别为8192和32的float数组,进行 一维卷积计算的。在
选择
不同的数据传递方式(如使用显存还是Host内存、使用只读方式还是可读写或者只写方式), 或者不同的Device(如在多核
CPU
上和GPU上
运行
Kernel程序)上
运行
,其效率相差是非常大的。 Demo程序中缺省的使用不显示获取结果的方式
运行
,缺省的数据传输是使用显存(
CPU
作为Device的时候,其实还 是系统内存)并Copy数据的方式,因此显示结果始终是0。当输出的参数传递方式改为直接使用系统内存指针的方式时, 不使用显示获取计算结果则是可以得到运算结果的。这些参数之间的差异,读者自行测试并仔细体会,通过调整,相信 可以得到最佳的
运行
方式。 Demo中包含了四个Kernel函数,分别是Convolution_Kernel_With_Barrier。这是一个带有同步函数Barrier的卷积 过程,并在卷积完成后,等待所有单元计算完毕,然后对结果进行微分(差商)处理,实际情况表明Barrier函数对GPU 的影响甚微,但如果使用
CPU
作为Device计算,则效率影响非常大,其耗时几乎和单核计算不相上下,估计是同步函数 在等候的过程中,引起了
CPU
对Catch竞争访问的结果吧。对这种情况,反倒不如拆分成两个Kernel进行单独计算,其累 积的计算时间基本上为两个独立Kernel耗时只和。 Differ_Kernel是单独进行微分计算的,是为了验证上面计算耗时结果的。 Convolution_Kernel是只进行卷积计算的,可以认为和Differ_Kernel前后执行,其结果应该和Convolution_Kerne- l_With_Barrier单独执行是一样的。 Convolution则是一个简单的计算过程,用来测试启动Kernel、等候数据等操作会占用的时间情况的。
OpenCL
其实并不是想象中那么美妙,也不是想象中的那么复杂,但要使用好
OpenCL
,就必须认真的对待每个细节, 甚至到每一个函数调用或者if控制等,大家可以参考“http://hi.baidu.com/fsword73”,上面涉及到的很多方面,都是 可以提升Kernel
运行
效率的。 目前这个T
OpenCL
控件只是作者为了测试
OpenCL
运行
效率编写的一个小的工具,作为一个测试工具或者技术积累阶段 的工具足矣,但在实际工程中,希望还是能够尽可能使用原生的调用方式,控件模式势必会带来一定的性能损失的,这是 无法克服的是一个实际情况,对于某些流式数据处理的计算而言,多次重复使用同一个Kernel对流式数据进行处理的,则 使用本控件应该不会造成太大的性能影响。 目前T
OpenCL
不支持多个Device同时工作,可以
选择
CPU
、GPU或者APU作为首选设备, X86下
运行
正常,X64下
运行
仍有 问题,疑和cl.pas中对context等处理的方式不支持X64或者其他原因。 目前支持的
OpenCL
版本为1.2。控件没有考虑
OpenCL
和OpenGL协同工作的情况,需要做这方面应用或者测试的读者,请 自行处理。 一下是控件
几个
主要类的引用关系图。供参考。 由于时间的关系,不可能提供详细的使用说明,往谅解,有问题可邮件与作者联系或者QQ联系。 Mail:18909181984@189.cn QQ:57440981 T
OpenCL
--| | |--TclKernels --| |--- TclKernel --| | |-- TclK
matlab矩阵乘法生成代码-scientific_benchmarks:科学基准
matlab矩阵乘法生成代码科学基准 基本信息 此存储库包含
几个
可以衡量
CPU
和GPU性能的基准。
CPU
代码使用Intel MKL lib(针对Intel x86
CPU
进行了优化,但也可以在x86 AMD
CPU
上
运行
)或OpenBLAS(可以在所有体系结构上
运行
)。 GPU代码使用CUDA库(仅适用于Nvidia GPU)或
OpenCL
可用基准列表: CovarianceMatrixEstimation:使用矩阵矩阵乘法(gemm)计算大小为N的N个向量的协方差矩阵 设置 首先,您必须使用位于数据文件夹中的data_generation MATLAB脚本来生成基准测试所需的数据(Python版本将在以后发布)。 要
运行
基准,请阅读每个文档中包含的自述文件。
如何在FPGA上
实现
复数浮点的计算
高性能浮点处理一直与高性能
CPU
相关联。在过去几年中,GPU也成为功能强大的浮点处理平台,超越了图形,称为GPGPU(通用图形处理单元)。新创新是在苛刻的应用中
实现
基于FPGA的浮点处理。本文的重点是FPGA及其浮点性能和设计流程,以及
OpenCL
的使用,这是高性能浮点计算前沿的编程语言。各种处理平台的GFLOP指标在不断提高,现在,TFLOP/s这一术语已经使用的非常广泛了。但是,在某些平台上,峰值GFLOP/s,即,TFLOP/s表示的器件性能信息有限。它只表示了每秒能够完成的理论浮点加法或者乘法总数。分析表明,FPGA单精度浮点处理能够超过1TFLOP/s。一种不太复杂的常用算法是FFT。使用单精度浮点
实现
了4096点FFT。它能够在每个时钟周期输入输出四个复数采样。每一个FFT内核
运行
速度超过80GFLOP/s,大容量FPGA的资源支持
实现
7个这类的内核。但是,如图1所示,这一FPGA的FFT算法GFLOP/s接近400GFLOP/s。这是“按键式”
OpenCL
编译结果,不需要FPGA专业知识。使用逻辑锁定和DSE进行优化,7内核设计接近单内核设计的Fmax,将其GFLOP/s提升至500,超过了10GFLOP/s每瓦。这一每瓦GFLOP/s要比
CPU
或者GPU功效高很多。对比一下GPU,GPU在这些FFT长度上效率并不高,因此,没有进行基准测试。当FFT长度达到几十万个点时,GPU效率才比较高,能够为
CPU
提供有效的加速功能。
aparapi:新官方阿帕拉皮
在GPU上执行本机Java代码的框架。 根据Apache软件许可v2许可 Aparapi允许开发人员通过在
运行
时动态将Java字节代码转换为
OpenCL
内核,从而编写能够直接在图形卡GPU上执行的本地Java代码。 由于它由
OpenCL
支持,因此Aparapi与所有与
OpenCL
兼容的图形卡兼容。 GPU具有独特的体系结构,这使它们的行为不同于
CPU
。 最明显的差异之一是,尽管典型的
CPU
的内核少于十二个,而高端GPU却可能具有数百个内核。 这使得它们特别适合于数据并行计算,与普通
CPU
相比,其加速比提高了数百倍。 这可能意味着需要一个整个数据中心来容纳您的应用程序与仅使用一台或两台计算机之间的区别,从而可能节省数百万美元的服务器成本。 Aparapi最初是由AMD公司构思和开发的项目。 后来被AMD遗弃,并且闲置了好几年。 尽管如此,社区仍为使该项目继续进行而进行了一些失败的努力,
OpenCL
学习笔记6 在
CPU
/GPU平台上的
实现
CPU
在多核上
运行
一个单独的work-group会导致cache共享问题。 为缓解这些问题,
OpenCL
线程轮流
运行
同一个work-group内的每一个work-item, 当这个work-group内所有work-item都
运行
完成后, 在
运行
同一个工作队列中的下一个work-group。 因此,同一个work-group内的线程是没有并行性的, 如果可能的话,多个操作系统线程将允许多个wo
OpenCL和异构编程
602
社区成员
575
社区内容
发帖
与我相关
我的任务
OpenCL和异构编程
异构开发技术
复制链接
扫一扫
分享
社区描述
异构开发技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章