错误、漏洞、问题 - 页 655 1...648649650651652653654655656657658659660661662...3184 新评论 Vladimir Gomonov 2012.02.27 14:28 #6541 Urain:谢谢你的链接,但只是一个后续问题:这个代码可以用来测试显卡性能吗? 没有。首先,你必须在每页添加几百万个对象。然后循环(10000){ChartRedraw(); }:) Mykola Demko 2012.02.27 14:47 #6542 MetaDriver:Nah.首先,你将不得不在每页添加几百万个对象。然后循环(10000){ ChartRedraw(); } :)几百万是太多了,但10万对于一个测试来说已经足够了。#property script_show_inputs input uint Count=1000; input uint CountObj=100000; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { long ChId=ChartID(); for(int i=0;i<CountObj;i++) { ObjHLine(ChId,i,1.+(i/(double)CountObj)); } uint st=GetTickCount(); for(uint i=0; i<Count; i++)ChartRedraw(); Alert("Count ChartRedraw()=",Count," time=",GetTickCount()-st," mk.c."); ObjectsDeleteAll(ChId,0,OBJ_HLINE); } //+------------------------------------------------------------------+ void ObjHLine(ulong chart_id,string name,double price) { ENUM_OBJECT type=OBJ_HLINE; // тип объекта int nwin=0; // индекс окна //--- if(ObjectFind(chart_id,name)<0) ObjectCreate(chart_id,name,type,nwin,0,0,0,0); ObjectSetInteger(chart_id,name,OBJPROP_COLOR,clrGreen); ObjectSetDouble(chart_id,name,OBJPROP_PRICE,price); } //+------------------------------------------------------------------+是否可以称之为 "客观测试显卡对MT5的适用性"?或者说,对象也应该改变它们的价值? Vladimir Gomonov 2012.02.27 15:08 #6543 Urain:几百万是太多了,但10万对于一个测试来说已经足够了。是否可以称其为 "mt5的客观显卡测试"?它说的是什么?:) 我有2012.02.27 19:04:09 CardTest(Urain) (EURUSD,H1) CountChartRedraw()=1000 at time=26224 ms Mykola Demko 2012.02.27 15:10 #6544 MetaDriver:它说什么? 我的。2012.02.27 19:04:09 CardTest(Urain) (EURUSD,H1) Count ChartRedraw()=1000 at time=26224 ms让我们尝试重新绘制部分对象,并指定CPU和显卡。 如果开发人员不拒绝,那么我们可以创建一个分支,每个人都会发布他们的数据。下面是重绘部分对象的代码。#property script_show_inputs input uint Count=1000; input uint CountObj=100000; input uint CountObjRedrawt=1000; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { long ChId=ChartID(); uint sto,eno,reso; for(int i=0;i<CountObj;i++) { ObjHLine(ChId,i,1.+(i/(double)CountObj)); } sto=GetTickCount(); for(int i=0;i<CountObjRedrawt;i++) ObjectSetDouble(ChId,rand()%CountObj,OBJPROP_PRICE,1.+((i+1)/(double)CountObj)); eno=GetTickCount(); reso=eno-sto; uint st=GetTickCount(); for(uint i=0; i<Count; i++) { if(i%2==0) { for(int j=0;j<CountObjRedrawt;j++) ObjectSetDouble(ChId,rand()%CountObj,OBJPROP_PRICE,1.+((i+2)/(double)CountObj)); } else { for(int j=0;j<CountObjRedrawt;j++) ObjectSetDouble(ChId,rand()%CountObj,OBJPROP_PRICE,1.+((i+1)/(double)CountObj)); } ChartRedraw(); } Alert("ChartRedraw() Count=",Count," CountObj=",CountObj," CountObjRedrawt=",CountObjRedrawt," time=",GetTickCount()-st-(reso*Count)," mk.c."); ObjectsDeleteAll(ChId,0,OBJ_HLINE); } //+------------------------------------------------------------------+ void ObjHLine(ulong chart_id,string name,double price) { ENUM_OBJECT type=OBJ_HLINE; // тип объекта int nwin=0; // индекс окна //--- if(ObjectFind(chart_id,name)<0) ObjectCreate(chart_id,name,type,nwin,0,0,0,0); ObjectSetInteger(chart_id,name,OBJPROP_COLOR,clrGreen); ObjectSetDouble(chart_id,name,OBJPROP_PRICE,price); } //+------------------------------------------------------------------+这里重写了更多的印刷品,在什么设置下是可见的。哎呀,内部计数器需要改成j。 Mykola Demko 2012.02.27 15:17 #6545 写道。Test VideoCart (EURUSD,M15) ChartRedraw() Count=1000 CountObj=100000 CountObjRedrawt=1000 time=24859 mk.c. Проц P4 3 Гц, RAM 3 Гб Видяха NVIDIA Corporation GeForce GT 430 with OpenCL 1.1 (2 units, 1400 MHz, 1023 Mb, version 295.73) Renat Fatkhullin 2012.02.27 15:33 #6546 Urain:让我们尝试重新绘制部分对象,并指定CPU和显卡。 如果开发人员不拒绝,我们可以创建一个分支,所有愿意的人都会发布他们的数据。下面是重绘部分对象的代码。 这个测试更多的是测试与对象的异步通信队列的速度(ObjectSetXXXX函数),但不是视频系统。 Mykola Demko 2012.02.27 15:38 #6547 Renat: 这个测试更多的是测试与对象(ObjectSetXXXX函数)的异步通信队列的速度,而不是视频系统。我不是在宣称,但也许你没有注意到,在测试开始前,测量了改变物体的循环时间,随后从总数中减去了时间的倍数。 sto=GetTickCount(); for(int i=0;i<CountObjRedrawt;i++) ObjectSetDouble(ChId,rand()%CountObj,OBJPROP_PRICE,1.+((i+1)/(double)CountObj)); eno=GetTickCount(); reso=eno-sto; ... " time=",GetTickCount()-st-(reso*Count)如果我说错了,请纠正我。SZY 独一无二的是,我不考虑if(i%2==0),但我不认为这个测试会大大改变数字,我们需要不同视频上的相对数字。HH顺便说一下,在没有重绘的情况下,也得到了类似的测量结果,甚至更多一点,这可能说明,当频繁使用ObjectSetXXXXX函数时,它的工作在某种程度上被加速了,时间的推导被稍微高估了。 Vladimir Gomonov 2012.02.27 15:55 #6548 Urain:写道。现在是这样的。2012.02.27 19:37:44 gpu_Test (Urain) (EURUSD,M30) ChartRedraw() Count=1000 CountObj=100000 CountObjRedrawt=1000 time=22792 mk.c. CPU: AuthenticAMD AMD Phenom(tm) II X6 1100T Processor with OpenCL 1.1 (6 units, 3840 MHz, 16345 Mb, version 2.0) GPU: Advanced Micro Devices, Inc. Cayman with OpenCL 1.1 (20 units, 750 MHz, 1024 Mb, version CAL 1.4.1664 (VM))但这是在一个空白屏幕上。当它像这样(顶部显示512行,底部显示相同)。那么它是这样的。2012.02.27 19:47:53 gpu_Test (Urain) (EURUSD,M1) ChartRedraw() Count=1000 CountObj=100000 CountObjRedrawt=1000 time=123022 mk.c. 而指标本身在这个时候并不加载GPU(在CPU上的零条计算),它只加载所有这些混乱的终端渲染。 Errors, bugs, questions OpenCL:MQL5中的内部实现测试 OpenCL: internal implementation tests Renat Fatkhullin 2012.02.27 16:02 #6549 Urain:我不是在宣称,但也许你没有注意到,在测试开始前,测量了改变物体的循环时间,随后从总数中减去了时间的倍数。是的,我没有马上注意到有一个校正操作。但我的纠正仍然是完全正确的。异步队列(其实就是一个队列)的速度直接取决于队列的运行模式。首先,你测量了在没有外部刺激的情况下每次写入队列的速度,也没有从它那里读取操作。事实上,它是瞬时的(reso=0ms,自己检查)。但后来你开始在测试中不仅使用写操作,还通过ChartRedraw 使用读操作,这就开始阻塞了校对的队列,并使所有操作重叠。事实上,这是对现有的100,000个对象中的1,000个对象的变化的测试。没有办法使用ObjectXXXx函数将其称为视频测试。 Mykola Demko 2012.02.27 16:28 #6550 Renat:是的,我没有马上注意到有一个校正操作。但我的纠正仍然是完全正确的。异步队列(其实就是一个队列)的速度直接取决于处理它的模式。首先,你测量了在没有外部刺激的情况下每次写入队列的速度,也没有从它那里读取操作。事实上,它是瞬时的(reso=0ms,自己检查)。但后来你开始在测试中不仅使用写操作,还通过ChartRedraw使用读操作,这就开始阻塞了校对的队列,并使所有操作重叠。事实上,这是对现有的100,000个对象中的1,000个对象的变化的测试。这不能称为使用ObjectXXXx函数的视频测试。而如果我们首先在没有ChartRedraw 的情况下测量全套重绘,然后在有ChartRedraw 的情况下,做一个减法,会不会正确?顺便说一下,这个话题很有意义,你可以写一个测试,对你来说知道mql的内部结构更容易。#property script_show_inputs input uint Count=1000; input uint CountObj=100000; input uint CountObjRedrawt=1000; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { long ChId=ChartID(); uint sto,eno,reso; for(int i=0;i<CountObj;i++) { ObjHLine(ChId,i,1.+(i/(double)CountObj)); } sto=GetTickCount();// замерим время вычета for(uint i=0; i<Count; i++) { if(i%2==0) { for(int j=0;j<CountObjRedrawt;j++) ObjectSetDouble(ChId,rand()%CountObj,OBJPROP_PRICE,1.2+((i+2)/(double)CountObj)); } else { for(int j=0;j<CountObjRedrawt;j++) ObjectSetDouble(ChId,rand()%CountObj,OBJPROP_PRICE,1.2+((i+1)/(double)CountObj)); } } for(int i=0;i<CountObj;i++)// вернём всё в исходное состояние { ObjectSetDouble(ChId,i,OBJPROP_PRICE,1.+(i/(double)CountObj)); } eno=GetTickCount(); reso=eno-sto; uint st=GetTickCount(); for(uint i=0; i<Count; i++) { if(i%2==0) { for(int j=0;j<CountObjRedrawt;j++) ObjectSetDouble(ChId,rand()%CountObj,OBJPROP_PRICE,1.2+((i+2)/(double)CountObj)); } else { for(int j=0;j<CountObjRedrawt;j++) ObjectSetDouble(ChId,rand()%CountObj,OBJPROP_PRICE,1.2+((i+1)/(double)CountObj)); } ChartRedraw(); } Alert("ChartRedraw() Count=",Count," CountObj=",CountObj," CountObjRedrawt=",CountObjRedrawt," time=",GetTickCount()-st-reso," mk.c."); ObjectsDeleteAll(ChId,0,OBJ_HLINE); } //+------------------------------------------------------------------+ void ObjHLine(ulong chart_id,string name,double price) { ENUM_OBJECT type=OBJ_HLINE; // тип объекта int nwin=0; // индекс окна //--- if(ObjectFind(chart_id,name)<0) ObjectCreate(chart_id,name,type,nwin,0,0,0,0); ObjectSetInteger(chart_id,name,OBJPROP_COLOR,clrGreen); ObjectSetDouble(chart_id,name,OBJPROP_PRICE,price); } //+------------------------------------------------------------------+ 1...648649650651652653654655656657658659660661662...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你的链接,但只是一个后续问题:这个代码可以用来测试显卡性能吗?
没有。首先,你必须在每页添加几百万个对象。然后循环(10000){ChartRedraw(); }
:)
Nah.首先,你将不得不在每页添加几百万个对象。然后循环(10000){ ChartRedraw(); }
:)
几百万是太多了,但10万对于一个测试来说已经足够了。
是否可以称之为 "客观测试显卡对MT5的适用性"?
或者说,对象也应该改变它们的价值?
几百万是太多了,但10万对于一个测试来说已经足够了。
是否可以称其为 "mt5的客观显卡测试"?
它说的是什么?:) 我有
2012.02.27 19:04:09 CardTest(Urain) (EURUSD,H1) CountChartRedraw()=1000 at time=26224 ms
它说什么? 我的。
2012.02.27 19:04:09 CardTest(Urain) (EURUSD,H1) Count ChartRedraw()=1000 at time=26224 ms
让我们尝试重新绘制部分对象,并指定CPU和显卡。 如果开发人员不拒绝,那么我们可以创建一个分支,每个人都会发布他们的数据。下面是重绘部分对象的代码。
这里重写了更多的印刷品,在什么设置下是可见的。
哎呀,内部计数器需要改成j。
写道。
让我们尝试重新绘制部分对象,并指定CPU和显卡。 如果开发人员不拒绝,我们可以创建一个分支,所有愿意的人都会发布他们的数据。下面是重绘部分对象的代码。
这个测试更多的是测试与对象(ObjectSetXXXX函数)的异步通信队列的速度,而不是视频系统。
我不是在宣称,但也许你没有注意到,在测试开始前,测量了改变物体的循环时间,随后从总数中减去了时间的倍数。
如果我说错了,请纠正我。
SZY 独一无二的是,我不考虑if(i%2==0),但我不认为这个测试会大大改变数字,我们需要不同视频上的相对数字。
HH顺便说一下,在没有重绘的情况下,也得到了类似的测量结果,甚至更多一点,这可能说明,当频繁使用ObjectSetXXXXX函数时,它的工作在某种程度上被加速了,时间的推导被稍微高估了。
写道。
现在是这样的。
2012.02.27 19:37:44 gpu_Test (Urain) (EURUSD,M30) ChartRedraw() Count=1000 CountObj=100000 CountObjRedrawt=1000 time=22792 mk.c.
CPU: AuthenticAMD AMD Phenom(tm) II X6 1100T Processor with OpenCL 1.1 (6 units, 3840 MHz, 16345 Mb, version 2.0)GPU: Advanced Micro Devices, Inc. Cayman with OpenCL 1.1 (20 units, 750 MHz, 1024 Mb, version CAL 1.4.1664 (VM))
但这是在一个空白屏幕上。当它像这样(顶部显示512行,底部显示相同)。
那么它是这样的。
2012.02.27 19:47:53 gpu_Test (Urain) (EURUSD,M1) ChartRedraw() Count=1000 CountObj=100000 CountObjRedrawt=1000 time=123022 mk.c.
我不是在宣称,但也许你没有注意到,在测试开始前,测量了改变物体的循环时间,随后从总数中减去了时间的倍数。
是的,我没有马上注意到有一个校正操作。
但我的纠正仍然是完全正确的。异步队列(其实就是一个队列)的速度直接取决于队列的运行模式。
首先,你测量了在没有外部刺激的情况下每次写入队列的速度,也没有从它那里读取操作。事实上,它是瞬时的(reso=0ms,自己检查)。但后来你开始在测试中不仅使用写操作,还通过ChartRedraw 使用读操作,这就开始阻塞了校对的队列,并使所有操作重叠。
事实上,这是对现有的100,000个对象中的1,000个对象的变化的测试。没有办法使用ObjectXXXx函数将其称为视频测试。
是的,我没有马上注意到有一个校正操作。
但我的纠正仍然是完全正确的。异步队列(其实就是一个队列)的速度直接取决于处理它的模式。
首先,你测量了在没有外部刺激的情况下每次写入队列的速度,也没有从它那里读取操作。事实上,它是瞬时的(reso=0ms,自己检查)。但后来你开始在测试中不仅使用写操作,还通过ChartRedraw使用读操作,这就开始阻塞了校对的队列,并使所有操作重叠。
事实上,这是对现有的100,000个对象中的1,000个对象的变化的测试。这不能称为使用ObjectXXXx函数的视频测试。
而如果我们首先在没有ChartRedraw 的情况下测量全套重绘,然后在有ChartRedraw 的情况下,做一个减法,会不会正确?
顺便说一下,这个话题很有意义,你可以写一个测试,对你来说知道mql的内部结构更容易。