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

 
joo:

看起来是这样的。

不确定,因为我尽量不使用棘手的结构(很难用眼睛察觉),但可能不应该,因为这可以加快代码速度。

你的代码可能会更慢,因为b变量在每次循环迭代时都会被重新声明。

反正我的代码更短更快。 你可以同时检查速度和等效性
"__kernel void MFractal(                                    \r\n"
"                       __global int *out                   \r\n"
"                      )                                    \r\n"
"  {                                                        \r\n"
"   int i = get_global_id(0);                               \r\n"
"   out[i]= i;                                              \r\n"
"  }                                                        \r\n"; //;-))
;-)
 
MetaDriver: 反正我的代码更短更快。 你可以同时检查速度和等价物;-)
不,这不公平。你应该处理安德烈的 代码并加快它的速度。
 
Mathemat:
不,那是不公平的。你处理安德烈的 代码并加快它的速度。

我做了什么?

对优化器的要求是什么?减少开销,同时保持同等的结果!所以看看吧,这一切加起来就是一文钱。

:)

// 顺便说一下!!!。这段代码即使在#define BUF_SIZE 1024*1024*4的情况下,也不会让我的驱动程序掉线!!。

// 这是个突破!

;))))

 
MetaDriver:

我做了什么?

对优化器的要求是什么?减少开销,同时保持同等的结果!所以看看吧,这一切加起来就是一文钱。

:)

加起来了吗? 你是怎么检查的?:O
 
joo:
合适吗? 你是怎么检查的?:O
如何,如何!用计算器!我并联了八个,并进行了检查。
 
MetaDriver:
如何,如何!在计算器上!我并联了八个,并进行了检查。

你的计算器在撒谎。:)

循环增加0+1+2+3+...+99999999。而每隔10000步后,数值为0。

你做了什么?- 你分配了一个飞行号码,仅此而已。我的结果怎么会和你的一样呢?

 

我一直在做一些研究,怀疑这

"__kernel void MFractal(                                    \r\n"
"                       __global int *out                   \r\n"
"                      )                                    \r\n"
"  {                                                        \r\n"
"   out[get_global_id(0)]= get_global_id(0);                \r\n"
"  }                                                        \r\n";

问题是,get_global_id()很可能不是一个函数,而是一个超快的寄存器操作。

如果有人需要和想要,请将结果报告给工作室。它将会很方便。
 
MetaDriver:

对优化器的要求是什么?减少开销,同时保持同等的结果!所以看看吧,这一切加起来就是一分钱。

// 顺便说一下!!!。这段代码即使在#define BUF_SIZE 1024*1024*4的情况下,也不会让我的驱动程序掉线!!。

我抽的时间长了点,就不高兴了。 另一方面--如果司机不放弃,结果中的等价物已经不完整了

糟糕......。真让人无语。

 
MetaDriver: 你抽的时间长了,就不高兴了。 另一方面,由于司机没有掉,结果中的等价物已经不完整了

不,你没有抽好烟。

1^3 + 2^3 + 3^3 + ...+ 1000000000^3 = 1000000000^2 * (1000000000 + 1)^2 / 4

左和右是一回事,完全对等。

只有用左边的表达方式,你才会对石头加热相当长的时间,而用右边的表达方式,它几乎是瞬间完成的,处理器不会注意到,会保持低温。

P.S. 我升级到了OpenCL 1.2(它是测试版)。请注意在版本号后面加了一个小字--sse2。

2012.03.22 07:43:28     Terminal        CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 (2 units, 2793 MHz, 7912 Mb, version 2.0 (sse2))

不是说它有显著的改善,但它在一些测试中加速了。说,在Tast_Mand_(好吧,你是个变态,Andrewha)--5%到10%。只是一点点,但很好。

 
joo:

你的计算器在撒谎。:)

循环添加0+1+2+3+...+99999999。而每隔10000步后,数值为0。

你做了什么?- 你分配了一个飞行号码,仅此而已。那么我的结果怎么会和你的一样呢?

我给了你差不多24小时的时间让你恢复 理智,你还坚持?:)

让我们来看看。

// Это твой код (оригинал)
"  {                                \r\n"
"   int i = get_global_id(0);       \r\n"
"   for(int u=0;u<100000000;u++)   \r\n"
"   {                           \r\n"
"    out[i]+=u;              \r\n"  
"    if(out[i]>10000)     \r\n"
"      out[i]=0;         \r\n" // после десятитысячного шага итерации этот оператор начнёт выполняться в каждом цикле.
"   }                    \r\n" // т.е. на выходе из цикла по любому будем иметь out[i] = 0;
"   out[i]+= i;          \r\n" // ecли к нулю прибавить номер мухи то получится... сам посчитай..... на калькуляторе... :)
"  }                     \r\n";// есть ещё вариант, надёжнее - распечатай результаты и сравни.  ;-)))