【发布时间】:2012-03-16 14:59:58
【问题描述】:
我正在对 500x500 像素的图像进行基本的逐像素处理。不管我输入什么等式,如果它没有耗尽内存,它会在很长一段时间内完成。
比较这个脚本:
define('STARTED_AT',microtime(true));
set_time_limit(0);
function calculatesomething(){ return abs(100-round(pow(15/150,2)))+pow(2,4) - calculatesomething2(); }
function calculatesomething2(){ return abs(100-round(pow(15/150,2)))+pow(2,4) - calculatesomething3(); }
function calculatesomething3(){ return abs(100-round(pow(15/150,2)))+pow(2,4); }
$r = array();
foreach(range(1,pow(10,5)) as $x){
foreach(range(1,4) as $y)
$r[] = calculatesomething();
}
$o = (microtime(true)-STARTED_AT);
echo 'took '.$o.'ms to finish';
耗时 38.847129106522 秒完成
还有这个:
define('STARTED_AT',microtime(true));
set_time_limit(0);
function calculatesomething(){ return abs(100-round(pow(15/150,2)))+pow(2,4) - calculatesomething2(); }
function calculatesomething2(){ return abs(100-round(pow(15/150,2)))+pow(2,4) - calculatesomething3(); }
function calculatesomething3(){ return abs(100-round(pow(15/150,2)))+pow(2,4); }
$r = array();
foreach(range(1,pow(10,5)) as $x){
$r[] = abs(100-round(pow(15/150,2)))+pow(2,4) - ( abs(100-round(pow(15/150,2)))+pow(2,4) - ( abs(100-round(pow(15/150,2)))+pow(2,4) ));
$r[] = abs(100-round(pow(15/150,2)))+pow(2,4) - ( abs(100-round(pow(15/150,2)))+pow(2,4) - ( abs(100-round(pow(15/150,2)))+pow(2,4) ));
$r[] = abs(100-round(pow(15/150,2)))+pow(2,4) - ( abs(100-round(pow(15/150,2)))+pow(2,4) - ( abs(100-round(pow(15/150,2)))+pow(2,4) ));
$r[] = abs(100-round(pow(15/150,2)))+pow(2,4) - ( abs(100-round(pow(15/150,2)))+pow(2,4) - ( abs(100-round(pow(15/150,2)))+pow(2,4) ));
}
$o = (microtime(true)-STARTED_AT);
echo 'took '.$o.'ms to finish';
花了29.651962041855s 完成
仅对嵌套迭代和额外的函数调用进行硬编码并获得9 ms。我有一个 2.4GHz 双核和 4GB 内存;事情不应该有所不同吗?如何提高 PHP 的计算能力?
【问题讨论】:
-
您不应该将 PHP 用于此类事情。 PHP 并不是用来处理大型计算的。
-
为什么要使用 PHP ? PHP 不是用来编程的。使用 MATLAB 或 Python 或 C++。
-
38.84 和 29.65 毫秒?那不是很长的时间!此外,PHP 使用系统调用来做数学运算,所以我不相信你可以做任何事情来“增加”PHP 计算的能力。您可能需要增加 PHP 的内存限额,请参阅 php.ini memory_limit。
-
您可以在 C 中为 php 编写一个模块 =) 此外,即使在 C 中展开短循环也可以将速度提高 10-20%。
-
@BenAshton 这是秒而不是毫秒,我的错。
标签: php performance image math processor