2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) OpenCL init OK!
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) GPU time = 141 ms
2012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 12802012.05.3122:05:11 ParallelTester_00-01 x (EURUSD,D1) Result on Gpu МахResult==1.28051 at 1213 pass
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) CPU time = 43259 ms
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 12802012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) Result on Cpu МахResult==1.28051 at 1213 pass
2012.05.3122:05:54 ParallelTester_00-01 x (EURUSD,D1) CpuTime/GpuTime = 306.8014184397163
2012.06.0101:05:53 ParallelTester_00-01 x (EURUSD,D1) OpenCL init OK!
2012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) GPU time = 999 ms
2012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:05:54 ParallelTester_00-01 x (EURUSD,D1) Result on Gpu МахResult==1.49697 at 10010 pass
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) CPU time = 434167 ms
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) Соunt inticators = 16; Count history bars = 144000; Count pass = 128002012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) Result on Cpu МахResult==1.49697 at 10010 pass
2012.06.0101:13:08 ParallelTester_00-01 x (EURUSD,D1) CpuTime/GpuTime = 434.6016016016016
#define BIG 10000000#define SMALL 1000voidOnStart( )
{
Print( "Script started..." );
double k;
int times[ SMALL ];
MathSrand( TimeCurrent( ) );
for( int ii = 0; ii < SMALL; ii ++ )
{
Comment( ii );
int st = GetTickCount( );
for( int i = 0; i < BIG; i ++ ) k = sin( i );
int timeTotal = GetTickCount( ) - st;
times[ ii ] = timeTotal;
}
int h = FileOpen( "gtc_times.txt", FILE_WRITE, "\r\n" );
for( int ii = 0; ii < SMALL; ii ++ )
FileWrite( h, times[ ii ] );
FileClose( h );
Print("Script unloaded");
}
//+------------------------------------------------------------------+
http://www.ixbt.com/video3/rad2.shtml- 最好使用针对大数据的优化库 ,而不是 "创造性 "地在OpenCL中编写程序(我并不排除这种可能性)。你可以使用一个混合系统,即使用OpenCL处理小量,使用优化库处理大量。你可能需要将该库转换为特定的编程语言,并为该库的加入创造条件。如果这一点能够实现,它将带来令人印象深刻的结果,并因此而使行动加快许多倍。请注意:.....
P.S 这可能是论坛中的一个新主题
对于开发人员来说,为一个极其特殊的、尽管是独特的产品专门调整编译器是没有技术含量的。
到目前为止,我没有看到任何交易员的任务需要这么大的乘法矩阵。
关于MetaTrader 5更新的公告
MetaTrader 5平台的更新将在未来几天公布。一旦更新发布,将有一个额外的新闻发布,包含最终的变化清单和构建号。 计划进行以下改革。
MetaTrader 5客户终端build 648
MetaTester:增加了对测试代理中使用OpenCL程序的支持。
了解OpenCL,准备一个Cloud+OpenCL的任务测试。非常有趣的数学观点。
这更适合MetaDriver。.......................
最近更新了视频驱动(NVIDIA301.42)。
我为了兴趣做了一个旧的测试(ParallelTester_00-01x),无法相信自己的眼睛。
在24页,我正在做测试,有29个,然后我把内存设置为2通道模式,它变成了39。
现在是~306。
令人惊叹。看来,NVIDIA对驱动进行了人性化的调整。fyords,你是如何使早期的事件在日志中显示得更高?
总的来说,这很好,我理解你。当我廉价买下我的HD4870,看到它的威力时,我也一样高兴。
一个小建议:选择参数,使GPU的执行时间与1秒相当。那么时间比例也会更准确。GteTickCount()函数的平均误差不低于几十毫秒。因此,你可以很容易地在GPU上得到120毫秒或170毫秒。而加速的价值在很大程度上取决于此。
我对这个脚本进行了一些微调,使其在所有可用的设备上运行(从底部往上看:1)英特尔平台的CPU,然后是2)AMD平台的HD 4870,以及3)AMD平台的CPU)。
脚本的结果是自下而上的!
在后一个参数下,也就是少了10倍,我的卡还不如你的快。可能没有时间适当超频 :)fyords,你是如何让早期的事件在日志中显示得更高?
在报告中,右键 "查看",新窗口 "查询 "按钮,日志按时间正确建立,阅读起来更方便(对我来说)。
至于脚本,谢谢你,我明天会试一下,它的完成需要等待很长时间,特别是在 Count pass = 12800 的情况下。
现在,这里有一个旧的脚本,其计数通道=12800
收益变得更大了。误差其实并不小。是的,接近它,但有一些离平均数的异常值,聚集在32、48甚至更多。他们是罕见的,我不争论,他们可以被忽视。
但是,当一个人运行一个脚本时,他或她不一定在计算机上做任何事情。而且系统还可以运行自己的任务,这可能会减慢执行速度。
从技术上讲,标准偏差 确实很小,大约为6-7,而且弱于执行时间本身。但它很难反映真实的变化。下面是进行同样计算时记录的时间柱状图。
相邻小节之间的距离是16ms。更小的柱子是很有可能的,它们之间的差异小到32ms。如果中间一列("真正的执行时间")是140毫秒,那么左边的是124毫秒,右边的是156毫秒。
因此,当除以低的GPU执行时间时,真正的变化可能相当大。
20秒/124毫秒 ~ 161
20秒/156毫秒~128。
执行时间的 "真实比率 "大致与最大的条形图相对应。
20秒/140ms~143。
如果我们在GPU上采取更长的执行时间,这个错误的影响就会小很多。至少让它是500ms。
模拟的脚本。