OpenCL:MQL5中的内部实现测试 - 页 33

 
Mathemat:

安德鲁,比如说,英特尔+Radeon到底是不是一件坏事?

还不错,只是价格不合理(因为有处理器)。:)

顺便说一下,我是nVidia卡的长期粉丝。我甚至在某个地方有一个盒子,里面有传说中的GeForce 3。而如果我想玩游戏,我会毫不犹豫地坚持使用 "绿色 "图形芯片制造商。

 
在这里的私人信息中抓住帖子。我不想把它带到这里。
 
MetaDriver:
严肃地说,我很想知道你能从它身上榨出什么样的汁液,特别是如果你有2 Giga DDR5的话。 事实证明,板载的GPU内存可以成为OpenCL计算的一个非常严重的资源。

从我得到的所有信息中,我得出结论,主要的资源是GPU核心的数量。 如果没有足够的核心,问题就会变成用新的线程连续运行核心,但在购买卡时很难节省这个资源,因为核心越多,价格越高。

第二个最重要的是GPU内存的运行速度(因为内存的访问相当频繁)。GPU任务在大多数情况下是相当原始的,在访问内存显示结果之前使用1-2-3的操作。任何复杂的逻辑操作都是GPU的禁忌,因此程序员会努力减少这些操作,这在逻辑上会导致更频繁的内存访问。这里有一些变体,如果程序员对任务的描述是尽可能地减少对内存的访问,那么这个资源就不是那么重要。

而第三种资源,我称之为GPU内存的数量。因为崩溃测试表明,无论并发语境的数量如何,语境中的所有分布式内存都被分配在一个内存域中,不会重叠。让我举例说明:如果你有N个上下文,每个上下文中的缓冲区被分配在设备内存的1/4处,那么你可以同时有4个这样的上下文。第五个上下文,即使你创建了它,也不会被分配内存,因为它已经被以前的上下文分配了。但是在前面的任何一个中释放内存(简单地删除缓冲区)会给一些空间,第五个上下文就可以正常工作了。

雷纳特

现在还为时过早--我们需要确保OpenCL程序不会因为GPU的故障和OpenCL程序本身而挂起整个网络。

事实上,OpenCL程序只有在本地代理上测试运行后才能放到网上,以确保程序的功能和不会杀死计算机。

分布式并行计算 网络的任务。这个名字本身可能会使未经训练的读者感到困惑。如果你在多核机器上组织分布式网络时有问题,现在将有一个正方形。所有的核心都可以被认为是独立的网络单元,因为它们执行独立的任务。但以前它们的执行速度最多相差2-3倍(为此你为慢速核心引入了速度限制),内存的数量在大多数情况下并没有起到作用,因为数组最大有10^7个元素(对于现代机器是几分钱)。

但有了GPU,问题就发生了很大的变化。首先只有~12个长度为10^7的双数组就已经是1Gb了,这对很多卡来说是个极限。在CPU计算中,具有更多缓冲区的任务是很常见的(当然,GPU程序员可以使用主机内存注册,但它类似于虚拟RAM,简而言之,它是一个坏的)。

其次,执行速度的差异与GPU的核心数量成线性比例。两张卡之间的差异是10-1000倍。

一般来说,联网的任务归结为对要执行的程序进行分类。请注意CUDA分析器。其统计数据可作为任务分类的基础。如果任务被设计成大部分时间花在内存访问上,就需要一个具有大内存规模的机器集群,但如果大部分时间花在算术上,我们需要一个具有大量内核的集群。集群可以是灵活的,也可以是可包含的(这是一个执行的问题)。

虽然这个任务因为时间本身所应用的统一性而被简化了一些。一张有12个核心的卡可能有256MB,一张有96个核心的卡有512MB。一般来说,制造商不允许有大的不平衡(与CPU相反,用户可以把他的旧石头与内存粘在一起,直到无赖,或者在新石头上放最低的内存,只是为了购买时省钱)。

尽管在我看来,更正确的方法是为OpenCL创建一个调试器,并在其基础上为字节码中的设备优化辩护。否则,当程序员不得不猜测程序将在什么卡上运行以及程序在可能的环境中的平均特征时,我们就会来到汇编程序。

 
MetaDriver:

告诉我,如果你不介意的话,你是如何进行测试的?在哪里,要改变什么?复制,选择,结果。

Win7 x64 build 607

 
WChas:

这个例子不需要在测试器中 "运行"。要运行该脚本,请将其从 "导航器 "中拖放到图表中。结果将显示在" 工具" 面板的" 专家" 选项卡中。

 

w7 32位 4GB ( 3.5GB可用)

英特尔Core 2 Quad Q9505 Yorkfield (2833MHz, LGA775, L2 6144Kb, 1333MHz) VS Radeon HD 5770

 
Snaf:

w7 32位 4GB ( 3.5GB可用)

英特尔Core 2 Quad Q9505 Yorkfield (2833MHz, LGA775, L2 6144Kb, 1333MHz) VS Radeon HD 5770

酷,现在你知道去哪里找了...:)
 
MetaDriver:
酷,现在你知道去哪里挖了...:)

处理器已经落后2-3代

和视频5770 - 6770 - 7770

:)

 
Urain:

根据现有的信息,我得出一个结论,主要的资源是GPU核心的数量,在缺乏这些核心的情况下,问题会通过连续运行新线程的核心来解决,但在购买卡时很难节省这一资源,因为核心越多,价格越高。

第二个最重要的是GPU内存的运行速度(因为内存的访问相当频繁)。GPU任务在大多数情况下是相当原始的,在访问内存显示结果之前使用1-2-3的操作。任何复杂的逻辑 操作都是GPU的禁忌,因此程序员会努力减少这些操作,这在逻辑上会导致更频繁的内存访问。这里有一些变体,如果程序员对任务的描述是尽可能地减少对内存的访问,那么这个资源就不是那么重要。

而第三种资源,我称之为GPU内存的数量。因为崩溃测试表明,无论并发语境的数量如何,语境中的所有分布式内存都被分配在一个内存域中,不会重叠。让我举例说明:如果你有N个上下文,每个上下文中的缓冲区被分配在设备内存的1/4处,那么你可以同时有4个这样的上下文。第五个上下文,即使你创建了它,也不会被分配内存,因为它已经被以前的上下文分配了。虽然通过释放前面一些的内存(简单地删除缓冲区),会出现一些空间,第五个上下文可以正常工作。

尼古拉,我同意你关于个人价值层次的观点。 但是关于云......问题出在内存上。 如果云端机器上的前两种资源不够用,客户程序就会变慢。如果缺乏GPU内存,它可能会直接崩溃。也就是说,如果驱动程序不能分配缓冲区,那就是一半的麻烦。如果 实际上 有足够的内存,但没有足够的内存留给其他的GPU上下文(包括系统上下文),这就是一种不幸。然后,司机就会简单地爆掉(正如实践所证明的那样)。也许,这只是驱动软件的一个缺陷,但只要它存在,最好不要让OpenCL程序进入云端。远程代理可以,但云不应该。
 

在升级到Build 607之后,我突然发现opencltest可以在我的笔记本上工作了,https://www.mql5.com/ru/code/825,它之前没有工作(大约两周前),我想它说 "没有找到OpenCL"

"我闻到了诡计的味道",还没有搞过曼德尔布罗特分形)))))))))))))。,但它仍然很好,不是一个新的笔记本电脑可以在完整的MT5测试中派上用场。

OpenCL Test
OpenCL Test
  • 投票: 10
  • 2012.02.07
  • MetaQuotes Software
  • www.mql5.com
Небольшой рабочий пример расчета фрактала Мандельброта в OpenCL, который кардинально ускоряет расчеты по сравнению с софтверной реализацией примерно в 100 раз.