Iphone 目标C:从多个线程调用和复制同一块
我在这里讨论的是神经网络,但可以忽略这一点,因为真正的问题是处理objective-c中的块。这是我的问题。我找到了一种方法,将神经网络转换成一个大的块,可以一次执行。然而,相对于激活网络,它的速度非常非常慢。这似乎有点违反直觉 如果我给你一组嵌套函数,比如Iphone 目标C:从多个线程调用和复制同一块,iphone,objective-c,neural-network,objective-c-blocks,objective-c-runtime,Iphone,Objective C,Neural Network,Objective C Blocks,Objective C Runtime,我在这里讨论的是神经网络,但可以忽略这一点,因为真正的问题是处理objective-c中的块。这是我的问题。我找到了一种方法,将神经网络转换成一个大的块,可以一次执行。然而,相对于激活网络,它的速度非常非常慢。这似乎有点违反直觉 如果我给你一组嵌套函数,比如 CGFloat answer = sin(cos(gaussian(1.5*x + 2.5*y)) + (.3*d + bias)) //or in block notation ^(CGFloat x, CGFloat y, CGFloa
CGFloat answer = sin(cos(gaussian(1.5*x + 2.5*y)) + (.3*d + bias))
//or in block notation
^(CGFloat x, CGFloat y, CGFloat d, CGFloat bias) {
return sin(cos(gaussian(1.5*x + 2.5*y)) + (.3*d + bias));
};
从理论上讲,多次运行该函数应该比在一堆连接中循环、设置节点为活动/非活动等更容易/更快,所有这些最终基本上都会计算相同的函数
但是,当我创建一个块(请参阅thread:)并运行此代码时,对于任何中等规模的网络来说,速度都非常慢
现在,我不太明白的是:
otool-TtVv binary/or/.o/file
),因为它可以非常有助于确定块拷贝的实际成本
如果您正在采样,并且在块本身中看到了大量的时间,那么这只是您的计算消耗了大量的CPU时间。如果块在复制期间消耗CPU,您将在复制助手中看到消耗 尝试创建一个包含大量不同类型块的源文件;带参数、不带、带捕获状态、不带、带捕获块、带/不带捕获状态等。。以及一个函数,该函数对每个对象调用Block_copy()
将其分解,您将深入了解复制块时会发生什么。就我个人而言,我发现x86_64汇编比ARM更易于阅读。(这听起来像是很好的博客素材——我应该写出来)。复制不是我担心的,因为我每个神经网络只做几次,这是块的运行。当我查看cpu时间的细分时,它有一些特定的块名,占用了很多时间。所以就像“乙状结肠”阻塞占用了10%的时间。我想我不知道当你复制一个引用另一个块的块时会发生什么?