// Это твой код (оригинал)" { \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";// есть ещё вариант, надёжнее - распечатай результаты и сравни. ;-)))
看起来是这样的。
不确定,因为我尽量不使用棘手的结构(很难用眼睛察觉),但可能不应该,因为这可以加快代码速度。
你的代码可能会更慢,因为b变量在每次循环迭代时都会被重新声明。
不,那是不公平的。你处理安德烈的 代码并加快它的速度。
我做了什么?
对优化器的要求是什么?减少开销,同时保持同等的结果!所以看看吧,这一切加起来就是一文钱。
:)
// 顺便说一下!!!。这段代码即使在#define BUF_SIZE 1024*1024*4的情况下,也不会让我的驱动程序掉线!!。
// 这是个突破!
;))))
我做了什么?
对优化器的要求是什么?减少开销,同时保持同等的结果!所以看看吧,这一切加起来就是一文钱。
:)
合适吗? 你是怎么检查的?:O
如何,如何!在计算器上!我并联了八个,并进行了检查。
你的计算器在撒谎。:)
循环增加0+1+2+3+...+99999999。而每隔10000步后,数值为0。
你做了什么?- 你分配了一个飞行号码,仅此而已。我的结果怎么会和你的一样呢?
我一直在做一些研究,怀疑这
问题是,get_global_id()很可能不是一个函数,而是一个超快的寄存器操作。
如果有人需要和想要,请将结果报告给工作室。它将会很方便。对优化器的要求是什么?减少开销,同时保持同等的结果!所以看看吧,这一切加起来就是一分钱。
// 顺便说一下!!!。这段代码即使在#define BUF_SIZE 1024*1024*4的情况下,也不会让我的驱动程序掉线!!。
我抽的时间长了点,就不高兴了。 另一方面--如果司机不放弃,结果中的等价物已经不完整了。
糟糕......。真让人无语。
不,你没有抽好烟。
1^3 + 2^3 + 3^3 + ...+ 1000000000^3 = 1000000000^2 * (1000000000 + 1)^2 / 4
左和右是一回事,完全对等。
只有用左边的表达方式,你才会对石头加热相当长的时间,而用右边的表达方式,它几乎是瞬间完成的,处理器不会注意到,会保持低温。
P.S. 我升级到了OpenCL 1.2(它是测试版)。请注意在版本号后面加了一个小字--sse2。
不是说它有显著的改善,但它在一些测试中加速了。说,在Tast_Mand_(好吧,你是个变态,Andrewha)--5%到10%。只是一点点,但很好。
你的计算器在撒谎。:)
循环添加0+1+2+3+...+99999999。而每隔10000步后,数值为0。
你做了什么?- 你分配了一个飞行号码,仅此而已。那么我的结果怎么会和你的一样呢?
我给了你差不多24小时的时间让你恢复 理智,你还坚持?:)
让我们来看看。