【问题标题】:dispatch_apply GCD for 'for loop'dispatch_apply GCD for 'for loop'
【发布时间】:2014-03-21 08:42:51
【问题描述】:

有人可以通过将以下类型的 for 循环格式化为 GCD dispatch_apply 查询来帮助我吗?

for (y = a; y + b < h - c; y += d)
{
    // body independent of y
    *m++ = *n++ - *p++; 
}

其中*m*n*p 是浮点指针

dispatch_apply API 有如下描述:

dispatch_apply(<#size_t iterations#>, <#dispatch_queue_t queue#>, <#^(size_t)block#>)

这可能更像是一个数学难题,但任何帮助都会很棒!

谢谢。

编辑:我的工作如下:

dispatch_apply((h-c-b-a)/d + 1, someQueue, ^(size_t blkId){
    m[blkId] = n[blkId] - p[blkId];
});

【问题讨论】:

  • 如果a + b == h - c,您的变体块将被调用一次。正确地它不应该被调用,因为for 中的y + b &lt; h - c 永远不会是真的。

标签: c++ ios for-loop parallel-processing grand-central-dispatch


【解决方案1】:
dispatch_apply((h - c - b - a + d - 1)/d, dispatch_main(), ^(blkId) {
    m[blkId] = n[blkId] - p[blkId]
});

更新:以下应该有相同的结果

dispatch_apply(ceil((double)(h - c - b - a) / d ), dispatch_main(), ^(blkId) {
    m[blkId] = n[blkId] - p[blkId]
});

在第一个变体中,我使用了 (int)ceil( x / y ) == (int)( x + y - 1 / y )

【讨论】:

  • 为什么你有一个'-1'?
  • (int)((h - c - b - a + d - 1)/d)ceil((double)(h - c - b - a) / d ) 相同
  • 好吧有道理。谢谢。
  • 不客气!如果答案有用,请点赞或接受:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
相关资源
最近更新 更多