标签: parallel-processing

在cuda建造kd树

例如,我有(x,y)点的数组,我想在kd-tree中组织它们

构建kd-tree包括排序和计算边界框.这些算法在CUDA上运行良好,但有没有办法利用尽可能多的线程构建kd-tree?

我认为应该有一些技巧:

通常,kd-tree是通过递归实现的,但据我所知,CUDA处理器没有硬件堆栈,因此应该避免递归.

如何有效地在Cuda建造kd-tree?

parallel-processing cuda data-structures

6
推荐指数
1
解决办法
1347
查看次数

并行任务的日志是无序的

我并行运行几个任务,但他们的日志是并行打印的.
这很难理解.

groovy dsl:

parallel (
  "stream1": { 
    node { ... }
  },
  "stream2": { 
    node("remote") { ... }
  }
)
Run Code Online (Sandbox Code Playgroud)

日志:

[stream1] [workspace] Running shell script 1
[stream2] [workspace] Running shell script 2
[stream2] [workspace] Running shell script 3
[stream1] [workspace] Running shell script 4
Run Code Online (Sandbox Code Playgroud)

我想让这些日志可读.有什么想法如何分开它们?

parallel-processing groovy jenkins jenkins-pipeline

6
推荐指数
1
解决办法
2083
查看次数

使用OpenMP和Block方法加速矩阵乘法:我能做得更好吗?

这是我写的代码:

#include <omp.h>
void matrix_multi(int c[][TSIZE], int a[][TSIZE], int b[][TSIZE])
{
   int B=8;

  int i, j, k,i1,j1,k1;
#pragma omp parallel for private(i,j,k,i1,j1,k1) schedule(auto) collapse(3)
  for (i=0; i<TSIZE; i+=B)
    for (j=0; j<TSIZE; j+=B)
      for (k=0; k<TSIZE; k+=B)
        for (i1=i;i1<i+B;i1++)
          for (j1=j;j1<j+B;j1++)
            {
              int sum=0;
              for (k1=k;k1<k+B;k1++)
                {
                  sum+=a[i1][k1]*b[k1][j1];
                }
              c[i1][j1]+=sum;
            }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以通过对三个内循环的进一步操作来获得更好的性能吗?

c parallel-processing openmp matrix-multiplication

6
推荐指数
1
解决办法
799
查看次数

在使用repa时使用Identity monad与mmultP有什么问题?

我不明白为什么这个程序使用repa:

import Data.Array.Repa
import Data.Array.Repa.Algorithms.Matrix
import Data.Functor.Identity

go = runIdentity $ do
  let mat = fromListUnboxed (ix2 2 2) [1..4]
  let ins = fromListUnboxed (ix2 2 1) [1, 1]
  mmultP mat ins
Run Code Online (Sandbox Code Playgroud)

给我以下警告:

Data.Array.Repa: Performing nested parallel computation sequentially.
  You've probably called the 'compute' or 'copy' function while another
  instance was already running. This can happen if the second version
  was suspended due to lazy evaluation. Use 'deepSeqArray' to ensure
  that each array is fully evaluated before you …
Run Code Online (Sandbox Code Playgroud)

parallel-processing haskell repa

6
推荐指数
1
解决办法
128
查看次数

Haskell中的无限列表并行过滤器

我想在Haskell中找到无限列表中的第一个匹配元素.

这段代码有效:

findPassword passwordHash = (head . filter (checkPassword passwordHash)) allStrings
Run Code Online (Sandbox Code Playgroud)

checkPassword真的很长(因为它是一个SHA1哈希)

checkPassword hash string = (sha1 string) == hash
Run Code Online (Sandbox Code Playgroud)

allStrings只是所有可能字符串的列表:

allStrings = [ c : s | s <- "" : allStrings, c <- ['a'..'z'] ++ ['0'..'9'] ]
Run Code Online (Sandbox Code Playgroud)

我希望这些代码并行运行,但如果我用parFilter替换过滤器:

import qualified Control.Parallel.Strategies as S
parFilter p = S.withStrategy (S.evalBuffer 1000 S.rseq) . filter p
Run Code Online (Sandbox Code Playgroud)

它不起作用......你有什么想法吗?这段代码也使用了大量内存,但这是另一个问题.这里有完整的脚本https://github.com/ThibaudDauce/habreaker

parallel-processing haskell infinite

6
推荐指数
1
解决办法
371
查看次数

Julia:在多个GPU上进行并行CUSPARSE计算

我有n单独的GPU,每个都存储自己的数据.我想让他们每个人同时进行一组计算.这里的CUDArt文档描述了使用流来异步调用自定义C内核以实现并行化(另请参见此处的其他示例).使用自定义内核,可以通过stream在CUDArt的launch()函数实现中使用参数来实现.但据我所知,CUSPARSE(或CUBLAS)函数没有类似的流规范选项.

这可能与CUSPARSE一起使用,或者如果我想使用多个GPU,我是否只需要深入到C?

修订后的赏金更新

好的,所以,我现在有一个相对不错的解决方案,最后.但是,我确信它可以通过百万种方式得到改善 - 现在它非常黑客.特别是,我喜欢根据我在这个 SO问题中尝试和写过的解决方案的建议(我从来没有正常工作).因此,我很高兴将赏金奖励给任何有进一步想法的人.

parallel-processing asynchronous julia julia-gpu

6
推荐指数
1
解决办法
488
查看次数

GNU Parallel:将文件拆分为子文件

目标

使用GNU Parallel将大的.gz文件拆分为子文件.由于服务器有16个CPU,因此创建16个子节点.每个孩子最多应包含N行.这里,N = 104,214,420行.儿童应该是.gz格式.

输入文件

  • name:file1.fastq.gz
  • 大小:39 GB
  • 行数:1,667,430,708(未压缩)

硬件

  • 36 GB内存
  • 16个CPU
  • HPCC环境(我不是管理员)

版本1

zcat "${input_file}" | parallel --pipe -N 104214420 --joblog split_log.txt --resume-failed "gzip > ${input_file}_child_{#}.gz"
Run Code Online (Sandbox Code Playgroud)

三天后,工作还没完成.split_log.txt为空.输出目录中没有可见的子项.日志文件表明Parallel --block-size已从1 MB(默认值)增加到2 GB以上.这激发了我将代码更改为版本2.

版本2

# --block-size 3000000000 means a single record could be 3 GB long. Parallel will increase this value if needed.

zcat "${input_file}" | "${parallel}" --pipe -N 104214420 --block-size 3000000000 --joblog split_log.txt --resume-failed "gzip > ${input_file}_child_{#}.gz"
Run Code Online (Sandbox Code Playgroud)

这项工作已经运行了大约2个小时.split_log.txt为空.尚未在输出目录中看到子项.到目前为止,日志文件显示以下警告:

parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1. …
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash gnu-parallel

6
推荐指数
1
解决办法
874
查看次数

张量流中模型并行的实现

我是张量流的初学者.我目前正在研究一个拥有2个GPU的系统,每个12GB.我想在两个GPU上实现模型并行性来训练大型模型.我一直在浏览整个互联网,SO,tensorflow文档等,我能够找到模型并行性及其结果的解释,但我没有找到一个小教程或小代码片段如何使用tensorflow实现它.我的意思是我们必须在每一层之后交换激活权利吗?那我们该怎么做呢?在tensorflow中是否有一种特定的或更简洁的方法来实现模型并行性?如果你可以建议我学习实现它的地方,或者使用'MODEL PARALLELISM'在多GPU上进行mnist训练这样的简单代码,将会非常有用.

注意:我已经完成了像CIFAR10中的数据并行 - 多gpu教程,但我没有找到任何模型并行的实现.

parallel-processing distributed tensorflow

6
推荐指数
1
解决办法
5840
查看次数

在Python中使用多处理和请求的并行发布请求

我有一个小代码片段如下:

import requests
import multiprocessing

header = {
'X-Location': 'UNKNOWN',
'X-AppVersion': '2.20.0',
'X-UniqueId': '2397123',
'X-User-Locale': 'en',
'X-Platform': 'Android',
'X-AppId': 'com.my_app',
'Accept-Language': 'en-ID',
'X-PushTokenType': 'GCM',
'X-DeviceToken': 'some_device_token'
}


BASE_URI = 'https://my_server.com/v2/customers/login'

def internet_resource_getter(post_data):
    stuff_got = []

    response = requests.post(BASE_URI, headers=header, json=post_data)
    stuff_got.append(response.json())

    return stuff_got

tokens = [{"my_token":'EAAOZAe8Q2rKYBAu0XETMiCZC0EYAddz4Muk6Luh300PGwGAMh26Bpw3AA6srcxbPWSTATpTLmvhzkUHuercNlZC1vDfL9Kmw3pyoQfpyP2t7NzPAOMCbmCAH6ftXe4bDc4dXgjizqnudfM0D346rrEQot5H0esW3RHGf8ZBRVfTtX8yR0NppfU5LfzNPqlAem9M5ZC8lbFlzKpZAZBOxsaz'},{"my_token":'EAAOZAe8Q2rKYBAKQetLqFwoTM2maZBOMUZA2w5mLmYQi1GpKFGZAxZCaRjv09IfAxxK1amZBE3ab25KzL4Bo9xvubiTkRriGhuivinYBkZAwQpnMZC99CR2FOqbNMmZBvLjZBW7xv6BwSTu3sledpLSGQvPIZBKmTv3930dBH8lazZCs3q0Q5i9CZC8mf8kYeamV9DED1nsg5PQZDZD'}]

pool = multiprocessing.Pool(processes=3)
pool_outputs = pool.map(internet_resource_getter, tokens)
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)

我所要做的就是将并行POST请求发送到终点,而每个POST都有一个不同的令牌,因为它的帖子正文.

  1. 我能用上面的东西实现我想要的吗?我得到了输出,但我不确定我的请求是否是并行发送的.
  2. 我知道问候.我想实现真正的并行请求(就像在我的系统上使用多个处理器一样),因此我选择了多处理而不是grequests(据我所知,使用gevents,它们同样不是并行的,而是多线程的).我的理解在这里是否正确?

parallel-processing multiprocessing python-2.7 python-requests grequests

6
推荐指数
2
解决办法
7119
查看次数

使用多线程并行化Java中的for循环

我是java的新手,我想使用执行器服务或使用java中的任何其他方法并行化嵌套for循环.我想创建一些固定数量的线程,以便线程不会完全获取CPU.

    for(SellerNames sellerNames : sellerDataList) {
        for(String selleName : sellerNames) {
        //getSellerAddress(sellerName)
        //parallize this task
        }
    }
Run Code Online (Sandbox Code Playgroud)

sellerDataList = 1000的大小和sellerNames = 5000的大小.

现在我想创建10个线程并将相同的任务块分配给每个线程.这是为了我的sellerDataList,第一个线程应该获得500个名称的地址,第二个线程应该获得下一个500个名称的地址,依此类推.
做这份工作的最佳方法是什么?

java parallel-processing multithreading threadpool

6
推荐指数
1
解决办法
1万
查看次数