parallel-processing 相关问题

与并发处理形成鲜明对比的是,并行处理保证以并行方式执行所有线程级和/或指令级任务,并保证同时执行的代码路径的完成。

在Python中使用并行处理进行数据迁移

我在本地环境中有一个python脚本,它从sql server中提取数据,将其加载到pandas数据帧中,然后使用大查询客户端将数据帧写入bigquery。 问题是...

回答 1 投票 0

Python 可能并行运行 io 任务,这不可避免地需要 for 循环?

让我用要点来澄清我的问题。 在 PyTorch(或任何原因)中,我正在制作一个 Dataset 类 我需要获取文件夹中图像的所有路径 但图像的结构是严重的...

回答 1 投票 0

高效退出多线程应用程序(具体)

我已经阅读了一些有关将消息从一个线程冒泡到所有其他线程以优雅退出的正确方法的资料(每个线程都执行自己的退出例程)。其中,我喜欢...

回答 2 投票 0

OpenMP for 循环比串行代码花费更多时间

我尝试使用 OpenMP 并行化代码片段,结果发现使用 OpenMP 需要 25 倍的时间才能完成程序。有什么不对的吗?我该如何优化它? #包括 我尝试使用 OpenMP 并行化代码片段,结果发现使用 OpenMP 需要 25X 时间才能完成程序。有什么不对的吗?我该如何优化它? #include <iostream> #include <cmath> #include <random> #include <chrono> #include <cstdlib> #include <omp.h> using namespace std; int main() { unsigned long long black_square = 1, digit_square = 13; //auto n = ((black_square)<<11) * static_cast<unsigned long long>(pow(digit_square,10)); auto n = static_cast<unsigned long long>(1e9); srand(0); int tmp = 0; std::random_device rd; // Will be used to obtain a seed for the random number engine std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd() std::uniform_int_distribution<> distrib(1, 6); auto tStart = std::chrono::high_resolution_clock::now(); //#pragma omp parallel for schedule(static) reduction(+:tmp) #pragma omp parallel for schedule(static) reduction(+:tmp) num_threads(8) for (unsigned long long i=0; i<n; i++) tmp = (tmp+(5==rand()%6))%static_cast<int>(1e9); //for (unsigned long long i=0; i<n; i++) tmp = (tmp+(5==distrib(gen)))%static_cast<int>(1e9); tmp%=static_cast<int>(1e9); auto tEnd = std::chrono::high_resolution_clock::now(); cout << tmp << " obtained after " << n << " iterations in " << (tEnd-tStart).count()/1e9 << "s." << endl; return 0; } 代码由g++ -o a.out -O3 -std=c++11 -fopenmp tmp.cpp编译,其中g++的版本为8.5.0 20210514。操作系统是RHEL8.9,有20个Intel Xeon CPUs at 2.593GHz。 串行代码平均运行时间为7.4s,而并行代码平均运行时间为180s。选项 -O3、-O2、-O1 具有相似的结果。随机生成器mt19937可以显着缩小性能差距,但并行代码仍然比串行版本慢得多。增加或减少 n 也会导致类似的结果。 rand()函数不需要是线程安全的。因此,像您所做的那样同时从多个线程调用它是不安全的 glibc 的 rand() 版本是线程安全的,但它是通过将整个函数包装在互斥体中来实现的。因此一次只有一个线程可以调用 rand()。由于在 rand 调用之外,您的代码执行的操作非常少,几乎所有执行时间都将在 rand() 内。 所以并行版本并不是真正的并行。每次调用 rand() 时,每个线程轮流一次执行一个。所以它比单线程没有优势。但实际上更糟糕的是,因为线程必须争夺谁获得互斥锁,在每次调用后唤醒和睡眠,并在每个 CPU 核心的缓存之间移动 PRNG 状态。所以比单线程差很多。 您应该做的是创建多个 PRNG 实例。有一个 gen 对象数组,每个线程一个。每个线程应该使用自己的 PRNG。确保每个对象在内存中相距足够远,不会共享缓存行,因此 PRNG 状态不需要在 CPU 缓存之间移动。

回答 1 投票 0

在 nvcuda.dll 中找不到 cudaDeviceSynchronize()

我正在编写CUDA代码,在VS2022中使用nvcc编译它,生成PTX文件,并从Embarcadero Delphi运行CUDA代码。为了从 Delphi 运行 CUDA 内核,我编写了一个 API

回答 1 投票 0

分布式包的问题

我在使用分布式包时遇到了麻烦。我有一个返回 100 x 4 数组的函数。该数组是通过对构建的 SharedArray 的某些维度进行平均而生成的...

回答 1 投票 0

使用 R 中的列表和数据帧进行并行处理

我正在尝试在 R 中并行化以下过程: df <- data.frame(col1 = c("A","B","C"), col2 = c("D","E","F")) mylist <- lis...

回答 1 投票 0

剧作家同时并行和顺序运行测试

我有两种测试:在此处输入图像描述 我想仅使用一个工作人员来运行 SerialTests 文件夹中的测试(首先是串行1Tests,然后是串行2Tests)。另一个

回答 1 投票 0

什么是 OpenMP?

OpenMP 的高级描述是什么? 维基百科文章指出“OpenMP(开放式多处理)是一个支持多平台共享内存的应用程序编程接口(API)

回答 2 投票 0

Apple 芯片上的 SIMD、并行和 GPU 计算

考虑一个 n x m 浮点数矩阵,比如 A={a_{ij}},其中 n 和 m 非常大。我想计算一个 n x n 对称矩阵,比如 B={b_{ij}},其通用条目 b_{ij}=\sum_{k=1}^{m} a_{ik}*a_{jk}/m,夫...

回答 1 投票 0

在 Python/Sage 中使用 Dask 进行并行编程,以便在良好的树分解上进行动态编程?

我正在尝试在 Sage/Python 中实现一种算法,用于计算从图 G 到图 H 的图同态,并在良好的树分解上进行动态编程。 我已经完成了这个算法...

回答 1 投票 0

如何在 Perl 测试套件中并行运行一些但不是全部测试?

我有一个基于 Perl 的测试套件,其中包含 10,000 多个测试,我希望它们运行得更快。我已经使用 -j 标志进行了测试来证明,并且我发现大多数(但不是全部)测试都已准备好运行......

回答 5 投票 0

openmp 的并行化变得更糟

我正在尝试将模糊无监督 c 均值算法与 openmp 并行化,我已经做到了,问题是当我使用 16/32 线程时,它应该比 8/4 线程提供更好的结果,但是

回答 1 投票 0

MPI单方面沟通

要求更多的人来监督学校项目的实施。这个特定的函数未通过正确性测试(其他一切都通过)。我认为开始的逻辑...

回答 1 投票 0

Oracle - 使用过滤器选择排序行并导出到 csv:如何并行执行作业? start_id/end_id 是页偏移量,而不是列

我想过滤、排序并将数据从大表转储到 csv。甲骨文 12c。 unload 会过滤但不会排序,但我想要稳定的排序,因为我需要将数据与其他文件进行比较......

回答 1 投票 0

OpenCL - 内核未创建,返回 -45 代码

我在 OpenCL 中创建了内核,并使用 OpenCL 库在 C++ 中创建了主机。不幸的是,尽管花了很长时间来解决这个问题,我还是收到以下错误:OpenCL 错误:clCreateKernel (-45)。为什么?我

回答 1 投票 0

MPI 代码的哪些部分被复制,哪些部分被共享?

考虑以下代码: #包括 // 第 1 节 int main() { // 第 2 节 MPI_Init(NULL, NULL); int world_size = -1; MPI_Comm_size(

回答 1 投票 0

如何使用unittest并行执行Selenium Python测试

例如我有两个测试: 测试类(unittest.TestCase): def 设置(自身): self.driver = webdriver.Firefox() self.driver.get("http://google.com") def 拆解(自我): 自驾...

回答 2 投票 0

为什么我的并行快速排序方法比顺序方法慢?

我是并行编程的新手,我不确定为什么 QuickSortParallel 方法比我的顺序版本(没有 Parallel.Invoke)慢。我有一个由一百个组成的锯齿状数组

回答 3 投票 0

Spring 应用程序中安排的 Cron 作业用于向所有实例分发数据

我有一个设计问题 使用 @scheduled 在 Spring 应用程序中安排 Cron 作业,我有 4 个实例,我希望该作业通过分发数据在所有实例中运行。假设我需要处理 1000 个数据,...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.