Torch 多线程

我有一个表H_next,我做了一些计算(调用add()函数)并将值存储在H_next中,这是跨所有线程共享的。

local function add(a,b)
    return (a+b)
end

function indexer:cal()
    local H_next={}
    local temp_H_next={}
    local count = 1
    for i = 1,100 do
        local val =10
        self.pool:addjob(function()
        H_next[i] = add(i,val+1)
        --print (H_next[i])
        return H_next
       end
      ,
      function(val)
          for i=1,#val do
          temp_H_next[count] = val[i]
          count  = count + 1
         end
        --temp_H_next[count] = val
        --[[H_next[count] = val
        count = count + 1--]]
        end)
    end

   self.pool:synchronize()
   self.pool:terminate()

  for i,v in pairs(temp_H_next) do
      print (i,v)
  end
end

这只打印了2个值

只有在我按以下方式修改函数时才能获得所有值

local H_next={}
local temp_H_next={}
local count = 1
for i = 1,100 do
    local val =10
    self.pool:addjob(function()
    H_next[i] = add(i,val+1)
    --print (H_next[i])
    return H_next[i]   -- 当我一个一个返回时
    end
  ,
  function(val)
    --[[for i=1,#val do
      temp_H_next[count] = val[i]
      count  = count + 1
    end--]]

    temp_H_next[count] = val
    count = count + 1
  end)
end

第二种方法的问题在于在子线程和主线程之间通信需要很长时间,我想填充该特定线程的H_next表,然后在使用endcallback将这些值传输或复制到temp_H_next中的主线程中。 有没有更好的方法可以做到这一点,而不必一次发送一个值?

点赞