标签: parallel-processing

切换到并行编码

我们都为单处理器编写代码。我想知道我们什么时候都能够在多处理器上编写代码?

我们需要什么(软件工具、逻辑、算法)来进行这种切换?

编辑:在我看来,由于我们并行执行许多任务,因此我们需要以同样的方式将那些现实生活中的解决方案(算法)转换为计算机语言。就像 OOP 编码对过程编码所做的那样。OOP 是一种更真实的编码风格,而不是过程式的。所以我希望有这种解决方案。

math parallel-processing multithreading high-speed-computing

4
推荐指数
1
解决办法
432
查看次数

每台机器启动多个erlang节点更好,还是每台机器只启动一个?

前言:当我在下面说“机器”时,我指的是物理专用服务器,或虚拟专用服务器。当我说“节点”时,我的意思是 erlang 虚拟机的一个实例,其中可以有多个作为单独进程在单个 unix 内核下运行。

我有一个涉及多个 erlang/OTP 应用程序的项目。这些应用程序将一起运行并在同一台机器上相互通信。它们都将访问磁盘,使用内存并生成 erlang 进程。他们还将使用网络资源,因为他们将与集群中运行相同应用程序集的类似机器进行通信。

几乎所有这些通信都是通过 HTTP 进行的。因此,我可以将每个 erlang OTP 应用程序分离到同一台机器上的 erlang VM 的单独实例中,并且它们仍然可以相互通信。

我的问题是:让它们全部运行在一个 erlang VM 下是否更好,以便这个 erlang VM 进程可以在它们之间分配对资源的访问,并安排各种 erlang 进程的执行。

还是在给定的服务器上有单独的 erlang 节点更好?

如果一个比另一个好,为什么?

我假设在单个 erlang vm 中运行所有这些应用程序,本质上,服务器的完整运行将导致更好的性能。操作系统只是在低级别管理磁盘和内存,并且只有一个重要的进程(erlang VM)可以切换……而当 erlang VM 具有所有的整体视图时,它在分配资源方面可能更聪明二郎进程。

这可能是我需要测试的东西,但我无法在短期内有效地这样做。

parallel-processing erlang scheduling

4
推荐指数
1
解决办法
1722
查看次数

我在哪里可以获得 OpenMP 的 .h 文件?

我正在寻找omp.h在 eclipse 中使用它的文件。我在 openmp.org 中找不到它。

我在哪里找到omp.h

谢谢。

c eclipse parallel-processing openmp

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

OpenMP 开销计算

给定 n 个线程,有没有一种方法可以计算在 OpenMP 中实现特定指令所需的开销(例如循环数)。

例如,给定下面的代码

 #pragma omp parallel
 {
    #pragma omp for
    for( int i=0 ; i < m ; i++ )
       a[i] = b[i] + c[i];
 }
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式计算创建这些线程需要多少开销吗?

c++ parallel-processing openmp

4
推荐指数
2
解决办法
6638
查看次数

矢量化和令人尴尬的并行之间有什么关系?

问题说明了一切。在我看来,矢量化与令人尴尬的并行问题密切相关。换句话说,所有可矢量化的程序都必须是令人尴尬的并行程序。这样对吗?

parallel-processing

4
推荐指数
2
解决办法
3702
查看次数

在 bash 中并行设置变量

这是一个示例程序:

#!/bin/bash

for x in {1..5}
do
  output[$x]=$(echo $x) &
done

wait

for x in {1..5}
do
  echo ${output[$x]}
done
Run Code Online (Sandbox Code Playgroud)

我希望它运行并打印出分配给output数组每个成员的值,但它什么也不打印。删除&正确分配变量。我必须使用不同的语法来并行实现吗?

parallel-processing bash

4
推荐指数
1
解决办法
1809
查看次数

使用 IsCancellationRequested 属性?

什么是使用CancellationTokenIsCancellationRequested财产?考虑下面的代码

static void Main(string[] args)
{
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    var token = tokenSource.Token;
    Console.WriteLine("Press Enter to Start.\nAgain Press enter to finish.");
    Console.ReadLine();
    Task t = new Task(() =>
    {
        int i = 0;
        while (true)
        {
            if (token.IsCancellationRequested)
            {
                Console.WriteLine("Task Cancel requested");
                break;
            }
            Console.WriteLine(i++);
        }
    }, token);

    t.Start();

    // wait for input before exiting
    Console.ReadLine();
    tokenSource.Cancel();
    if(t.Status==TaskStatus.Canceled)
        Console.WriteLine("Task was cancelled");
    else
        Console.WriteLine("Task completed");
}
Run Code Online (Sandbox Code Playgroud)

我发现在极少数情况下if块内的代码不运行。如果是这样,轮询查看是否请求取消有什么用?

c# parallel-processing task-parallel-library

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

密钥的替代哈希表相等性测试

SBCL分析显示我的一个Common Lisp哈希表函数耗费了大量时间.该函数比较两个哈希表以确定它们是否具有相同的键:

(defun same-keys (ht1 ht2)
  "Returns t if two hash tables have the same keys."
  (declare (hash-table ht1 ht2))
  (when (= (hash-table-count ht1) (hash-table-count ht2))
    (maphash (lambda (ht1-key ht1-value)
               (declare (ignore ht1-value))
               (unless (gethash ht1-key ht2)
                 (return-from same-keys nil)))
             ht1)
    t))
Run Code Online (Sandbox Code Playgroud)

有没有办法加速这个,因为哈希表总是#'eqlfixnum键?我也在加载lparallel库,但在这种情况下以某种方式并行化函数是否有意义?

编辑:哈希表的大小可以是大约10到100个条目.ht键范围从100扩展到999,999,999,999,但在此范围内实际使用的总可能的fixnums是稀疏的.每个ht值都是t或列表.所有哈希表的键值关联都在加载时设置.通过复制现有哈希表并逐步添加或删除条目,在运行时创建新哈希表.常规哈希表的读取,写入和复制似乎不是问题.

mapping parallel-processing hashtable common-lisp

4
推荐指数
1
解决办法
55
查看次数

如何在毫秒级同步Python进程?

我正试图在两个内核上完全同时运行两个Python函数。每个进程都运行一个很长的循环(理论上是无限循环)。重要的是,它们必须同时保持同步,即使是最小的延迟也可能导致长期问题。

我认为我的问题是我像这样连续运行它们

# define the processes and assign them  functions
first_process = multiprocessing.Process(name='p1', target='first_function')
second_process = multiprocessing.Process(name='p2', target='second_function')

# start the processes
first_process.start()
second_process.start()
Run Code Online (Sandbox Code Playgroud)

time.time()在每个功能的开始处打印以测量时间差。输出结果是:

first function time: 1553812298.9244068
second function time: 1553812298.9254067
Run Code Online (Sandbox Code Playgroud)

差别是0.0009999275207519531秒。如前所述,这种差异将对长期产生重大影响。

综上所述,如何在两个不同的内核上完全同时运行两个功能?如果Python无法做到这一点,我还应该检查哪些其他选项?

python parallel-processing multiprocessing python-3.x python-multiprocessing

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

Python中线程/核心/节点上的并行for循环

我打算在Python中并行处理for循环,如下所示,用于处理大型数据数组。线程/核心/节点上的并行化如何适合此代码,以及如何实现它?任何建议表示赞赏。谢谢!

所有输入都是具有以下典型大小的NumPy数组:

vector_data (int64): 1M x 3
matrix (float64): 0.1M x 0.1M x 3
Run Code Online (Sandbox Code Playgroud)

根据帖子的答案进行编辑:

对运行时性能的测试表明,这样做会multiprocessing导致速度显着下降,并且对内存的要求更高。

vector_data (int64): 1M x 3
matrix (float64): 0.1M x 0.1M x 3
Run Code Online (Sandbox Code Playgroud)

以下是样本运行的运行时成本:

vector_size = int(1E2)
matrix_size = int(1E1)

OP: 9.527e-02 sec
f1: 2.402e+00 sec (25.21x)
f2: 2.269e+00 sec (23.82x)
f3: 3.414e-02 sec (0.36x)

OP: 43.0 MiB
f1: 41.9 MiB (0.97x)
f2: 41.9 MiB (0.97x)
Run Code Online (Sandbox Code Playgroud)
vector_size = int(1E3)
matrix_size = int(1E2)

OP: 1.420e+00 sec
f1: 1.448e+01 sec (10.20x)
f2: 2.051e+01 sec (14.44x) …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing for-loop python-3.x mpi4py

4
推荐指数
1
解决办法
356
查看次数