PHP7 内核之 FAST_ZPP 详解

本文详细介绍了PHP7中的FAST_ZPP技术,这是一种优化参数处理的方式,旨在减少函数调用时的性能开销。通过对比传统zend_parse_parameters函数,解释了FAST_ZPP如何利用编译期常量优化,实现更高效的参数解析。同时,文章指出FAST_ZPP适用于调用频繁且逻辑简单的函数,以降低二进制大小和缓存缺失带来的影响。最后,提供了FAST_ZPP的新API与旧参数描述的对应关系,并鼓励开发者根据实际情况选择是否使用FAST_ZPP。
摘要由CSDN通过智能技术生成

从PHP7开始,大家可能会发现,不少函数不再使用传统的参数处理方式,而是改用了我们称之为Fast zend parameters parsing(FAST_ZPP)的新型方式, 比如在PHP7之前,count函数是这样的:

 
 

PHP_FUNCTION(count) { zval *array; long mode = COUNT_NORMAL; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE) { return; } .... }

在PHP7以后,变成了:

 
 

PHP_FUNCTION(count) { zval *array; zend_long mode = COUNT_NORMAL; ZEND_PARSE_PARAMETERS_START(1, 2) Z_PARAM_ZVAL(array) Z_PARAM_OPTIONAL Z_PARAM_LONG(mode) ZEND_PARSE_PARAMETERS_END(); ... }

很多PHP扩展开发的同学可能在初次接触的时候,会觉得很陌生,不要焦虑,让我慢慢道来 :)

当时在做PHPNG(PHP7的开发项目代号)的开发的时候,我们主要的发现性能提升点的一个方式就是bench各种大型实际项目,来发现占用资源比较大的部分,而最常用benchmark对象之一是wordpress,因为它够复杂,够慢,(它也是我们开发JIT的时候对主要bench目标:)) 代表了非OO型代码类的典型应用, 在实际的benchmark的过程中我们发现,将近有6%的耗时被zend_parse_parameters给占用了。

事实上zend_parameters_parsing确实是一个很庞大的函数:

ZEND_API int zend_parse_parameters(int num_args, const char *type_spec, ...)

它根据type_spec字符串中指定的标识符,来处理输入参数,而这个参数符有很多种(具体含义可以参看: README.PARAMETER_PARSING_API):

 
 

a A b C d f h H l L o O p P r s S z * + | / !

根据不同的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C:\Users\TXN>CD C:// C:\>Python "C:\Program Files (x86)\Intel\openvino_2021.4.752\deployment_tools\open_model_zoo\demos\human_pose_estimation_demo\python\human_pose_estimation_demo.py" -at openpose -d CPU -i 0 -m D:\model\fall_detection_zpp\intel\human-pose-estimation-0001\FP16\human-pose-estimation-0001.xml [ INFO ] Initializing Inference Engine... [ INFO ] Loading network... [ INFO ] Reading network from IR... Traceback (most recent call last): File "C:\Program Files (x86)\Intel\openvino_2021.4.752\deployment_tools\open_model_zoo\demos\human_pose_estimation_demo\python\human_pose_estimation_demo.py", line 283, in <module> sys.exit(main() or 0) File "C:\Program Files (x86)\Intel\openvino_2021.4.752\deployment_tools\open_model_zoo\demos\human_pose_estimation_demo\python\human_pose_estimation_demo.py", line 184, in main model = get_model(ie, args, frame.shape[1] / frame.shape[0]) File "C:\Program Files (x86)\Intel\openvino_2021.4.752\deployment_tools\open_model_zoo\demos\human_pose_estimation_demo\python\human_pose_estimation_demo.py", line 111, in get_model prob_threshold=args.prob_threshold) File "C:\Program Files (x86)\Intel\openvino_2021.4.752\deployment_tools\open_model_zoo\demos\common\python\models\open_pose.py", line 62, in __init__ strides=(1, 1), name=self.pooled_heatmaps_blob_name) File "C:\Users\TXN\AppData\Local\Programs\Python\Python37\lib\site-packages\ngraph\utils\decorators.py", line 22, in wrapper node = node_factory_function(*args, **kwargs) TypeError: max_pool() missing 1 required positional argument: 'dilations'
最新发布
05-30

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值