标签: parallel-processing

CUDA重用事件以确定多个部分的执行时间

我希望计算我的cuda代码的两个不同部分的执行时间。为了做到这一点,我试图用CudaEvent_t启动,停止。 我的问题是,是否可以在其他部分中使用相同的两个事件“开始”和“停止”来计算执行时间?

例如:

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);

// SECTION 1
cudaEventRecord(start, 0);
cudaMemcpy(..., ..., ..., cudaMemcpyHostToDevice);
cudaEventRecord(stop, 0);

cudaEventSynchronize(stop);
cudaEventElapsedTime(&executionTime, start, stop);
printf("SECTION 1 executionTime: %f", executionTime);
// SECTION 1

// SECTION 2
cudaEventRecord(start, 0);    // Reusing start event
cudaMemcpy(..., ..., ..., cudaMemcpyDeviceToHost);
cudaEventRecord(stop, 0);     // Reusing stop event

cudaEventSynchronize(stop);
cudaEventElapsedTime(&executionTime, start, stop);
printf("SECTION 2 executionTime: %f", executionTime);
// SECTION 2
Run Code Online (Sandbox Code Playgroud)

由于我正在尝试重新启动cudaEvent_t start,也为第2部分停止,因此这段代码会为第1部分和第2部分的执行时间给出准确的估计吗?还是我需要为第二部分创建两个附加事件start1和stop1?

c parallel-processing cuda gpu gpgpu

0
推荐指数
1
解决办法
1230
查看次数

GPU实现中的顺序操作

我必须在GPU中实现以下算法

for(int I = 0; I < 1000; I++){
    VAR1[I+1] = VAR1[I] + VAR2[2*K+(I-1)];//K is a constant
}
Run Code Online (Sandbox Code Playgroud)

每次迭代都依赖于先前的,因此并行化很困难.我不确定原子操作在这里是否有效.我能做什么?

编辑:

VAR1VAR2都是一维数组.

VAR1[0] = 1
Run Code Online (Sandbox Code Playgroud)

parallel-processing cuda gpu

0
推荐指数
1
解决办法
200
查看次数

Parallel.ForEach返回不一致的结果

我有一个方法,它读取一个文本文件,每行包含一个int值,为了使读取速度更快,我使用Parallel.ForEach,但我所看到的行为是意外的,我在文件中有800行但是当我运行这个方法时,每个时间它返回不同的HashSet计数,我在搜索后读取的是Parallel.ForEach生成多个线程并且当所有线程完成其工作时返回结果,但是我的代码执行矛盾,或者我在这里遗漏了一些重要的东西?

这是我的方法:

private HashSet<int> GetKeyItemsProcessed()
{
   HashSet<int> keyItems = new HashSet<int>();

   if (!File.Exists(TrackingFilePath))
     return keyItems;

     // normal foreach works fine

     //foreach(var keyItem in File.ReadAllLines(TrackingFilePath))
     //{
     //    keyItems.Add(int.Parse(keyItem));
     //}


     // this does not return right number of hashset rows
     Parallel.ForEach(File.ReadAllLines(TrackingFilePath).AsParallel(), keyItem =>
     {
         keyItems.Add(int.Parse(keyItem));
     });


    return keyItems;

}
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing parallel.foreach

0
推荐指数
1
解决办法
610
查看次数

如何在Parallel :: ForkManager中获取子进程id?

  use LWP::Simple;
  use Parallel::ForkManager;


  @links=( 
    ["http://prdownloads.sourceforge.net/sweethome3d/SweetHome3D-2.1-windows.exe","SweetHome3D-2.1-windows.exe"], 
    ["http://prdownloads.sourceforge.net/sweethome3d/SweetHome3D-2.1-macosx.dmg","SweetHome3D-2.1-macosx.dmg"],
    ["http://prdownloads.sourceforge.net/sweethome3d/SweetHome3DViewer-2.1.zip","SweetHome3DViewer-2.1.zip"],

  );

  # Max 30 processes for parallel download
  my $pm = new Parallel::ForkManager(30); 

  foreach my $linkarray (@links) {
    my $pid = $pm->start and next; # do the fork

    my ($link,$fn) = @$linkarray;
    warn "Cannot get $fn from $link"
      if getstore($link,$fn) != RC_OK;

    print "$pid = $link is done ";

    $pm->finish; # do the exit in the child process
  }
  $pm->wait_all_children;
Run Code Online (Sandbox Code Playgroud)

执行完毕后,我要去pid是零

0 = http://prdownloads.sourceforge.net/sweethome3d/SweetHome3DViewer-2.1.zip is done 

0 = http://prdownloads.sourceforge.net/sweethome3d/SweetHome3D-2.1-macosx.dmg is done 

0 …

parallel-processing perl fork

-1
推荐指数
2
解决办法
2579
查看次数

教堂编程语言.使用数据库

你能不能请你帮我解决一下问题:我如何使用Chapel程序中的数据库?

谢谢

database parallel-processing chapel

-1
推荐指数
1
解决办法
222
查看次数

matlabpool的替代品

我正在尝试使用其他人的代码,其中包含以下行:

if (m<100) || (matlabpool('size')==0)
Run Code Online (Sandbox Code Playgroud)

我正在使用MATLAB R2016a,因此此命令失败。matlabpool('size')在新版本中相当于什么?

我知道matlabpool被取代parpool。但是matlabpool('size')具体做什么呢?它实际上并没有创建并行工作器。

parallel-processing matlab

-1
推荐指数
1
解决办法
960
查看次数

如何始终从golang频道获取最新价值?

我开始使用Go,我现在正在编写一个简单的程序,它从传感器中读取数据并将其放入一个通道中进行一些计算.我现在的工作如下:

package main

import (
    "fmt"
    "time"
    "strconv"
)

func get_sensor_data(c chan float64) {
    time.Sleep(1 * time.Second)  // wait a second before sensor data starts pooring in
    c <- 2.1  // Sensor data starts being generated
    c <- 2.2
    c <- 2.3
    c <- 2.4
    c <- 2.5
}

func main() {

    s := 1.1

    c := make(chan float64)
    go get_sensor_data(c)

    for {
        select {
        case s = <-c:
            fmt.Println("the next value of s from the channel: " + strconv.FormatFloat(s, …
Run Code Online (Sandbox Code Playgroud)

parallel-processing concurrency channel multiprocessing go

-1
推荐指数
2
解决办法
1052
查看次数

同时在所有 GPU 核心上为每个 GPU 核心运行一个程序实例

我们有数百万个小文件要由某些程序处理。

精确的计划并不重要,变化与精确的任务。然而,这些是较小的 C++ 程序,我们有源代码,但它们本质上是不可并行的。

使用单个平均 CPU 内核(Intel i7 系列)时,处理一个小文件大约需要 15 秒。并且在程序运行时它需要大约 200 MB 的 RAM。

我们希望在 GPU 上并行化,并在每个 GPU 核心(例如 Cuda 核心)上运行一个程序实例。因此,如果 GPU 有 3000 个 CUDA 核心,那么我们希望并行运行 3000 个实例。如果可能,我们希望使用像 OpenCL 这样的通用框架(而不是 Cuda,但如果在这种情况下需要 Cuda,那将是可以接受的)。

现在我们正在尝试评估这是否可行(我们在 GPGPU 编程方面还没有太多经验)。我们想象的主要问题是记忆。如果我们并行运行 3000 个实例,每个实例需要 200 MB VRAM,那么我们需要 600 GB 内存。

我们主要考虑的显卡是高端 Geforce 卡,通常具有 8 GB 到 11 GB 的内存。我们有每个机箱/主板有 4 个卡的 GPU 工作站,我们一开始想用它(但后来也可能在其他 GPU 系统上,因此我们更喜欢像 OpenCL 这样的通用框架)。

有哪些方法可以解决这个问题?

parallel-processing cuda gpgpu opencl

-1
推荐指数
1
解决办法
358
查看次数

如何在OpenMP中将此for循环并行?

我试图通过添加"#pragma omp parallel for"来并行运行循环,但这对我如何并行这个循环没有任何建议?

#pragma omp parallel for
   for (p = split; *p != 0; p++) if (*p == ' ') *p = '0';
Run Code Online (Sandbox Code Playgroud)

c parallel-processing openmp

-2
推荐指数
1
解决办法
104
查看次数

如何使用Java 8 Streams同时或并行运行3种方法

1)敏锐地知道如何使用Java 8并行运行Method1、2、3

2)这是使用流8满足我的要求的正确方法吗?

public void RunParallel()
{
    String method1 = method1();
    String method2 = method2();
    String method3 = method3(String Value);
}
Run Code Online (Sandbox Code Playgroud)

Stream.<Runnable>of(() -> method1(),() -> method2(),() -> method3()).parallel().forEach(Runnable::run);

java parallel-processing java-8

-2
推荐指数
1
解决办法
1463
查看次数