我的生物信息学工作流程使用make的选项'-j'并行处理数据
mutations.tsv : file1.data file2.data file3.data
find-mutations $^ > $@
file1.data: raw1.txt
(....)
(...)
tsv是一个瓶颈,但如果
1) 我可以在file1.data file2.data中找到不同染色体的数目
2) 对每个染色体运行“查找突变”
3) 将所有结果合并到“突变.tsv”
比如
我正在尝试使用MPI形成环形通信,其中我的每个进程将其结果发送到下一个进程,最后一个进程将结果发送到第0个进程。假设我有4个进程,那么我的第0个进程将把结果发送到第1、第1到第2、第2到第3和第3到第0
#include "mpi.h"
#include <stdio.h>
#include<stdlib.h>
#define NELEM 1000
int main (int argc, char *argv[])
{
int numtasks, rank, r
我的要求很简单,但无法找到有效的方法
我有一个名为Code的目录,其中包含大约14lac文件,大约40gb。我只想在同一目录级别创建此代码文件夹的副本。表示代码和代码副本位于同一文件夹中
如果我使用查找并行cp-rpf{}../Code_Copy在Code文件夹中,我得到正确的目录结构,加上Code文件夹中存在的所有文件,递归地也直接复制到Code_Copy
如果我使用tree | parallel cp-rpf{}../Code_Copy,目录结构创建正确,但即使在tree命令的输出行出现“c
我有个问题。我知道线程和进程在理论上的区别。但我仍然不明白什么时候应该使用第一种,什么时候应该使用第二种。例如,我们有一项艰巨的任务,需要并行处理。但以哪种方式?哪一种更快更有效?在什么情况下?我们应该把任务分成几个进程还是几个线程?你能举几个例子吗?我知道我的问题可能看起来很傻,但我对并行计算这个话题还不熟悉。我希望你能理解我的问题。先谢谢你 线程和进程之间没有理论上的区别,可以从中进行推广。有很多很多不同的方法来实现线程,包括几乎镜像进程的方法(例如Linux线程)。然后是轻量级线程,它涉及
我使用在文件的每一行上并发执行一个命令。虽然GNU parallel不会对结果造成任何问题,但它会发出大量以下类型的警告,扰乱输出:
并行:警告:块中未匹配完整记录。增加到--blocksize 1363150
我假设这只是意味着我选择使用的块大小在输入边界处不太匹配,因此并行正在增加块大小,所以它确实如此。正如我所说的,我不认为这会对输出结果造成任何问题,这只是一个警告,我需要反复看到,甚至一次。是否有任何方法可以特别抑制这些警告?我真的不想完全重定向stderr并错过任何重要消息。你的假
如果我使用该功能:
net=feedfowardnet([60 60])
net2=train(net,x,t)
parpool %//starts a local parallel pool connected to 2 workers
net2=train(net,x,t,'useParallel','yes')
训练大约需要20分钟。(我在多台{规格相同}的计算机上做过,平均时间总是在20分钟左右)
如果我使用该功能:
net=feedfowardnet([60 60])
net
我想我可能不了解MPI的一些基本方面,但是使用4个进程,下面是使用time./main:
13.00 real 4.99 user 3.05 sys
13.00 real 4.84 user 2.87 sys
13.00 real 4.91 user 2.84 sys
13.00 real 5.18 user 3.04 sys
因此,似乎每个进程的CPU时间只需要5秒
我的代码当前正在使用parfor机制运行。但是,如果我想通过使用tic/toc来计算每次迭代的运行时间,MATLAB会以未定义的函数错误进行响应。这个问题有什么解决办法吗?谢谢 tic和toc在parfor范式中不存在,因为tic和toc是单线程上的计时。因为您是并行运行的,所以会有线程/上下文切换,因此当激活parfor时生成的每个线程的计时将非常不准确。。。这就是为什么这些命令自然不受支持的原因。但是,您可以将tic和toc命令放在parfor循环的外部,这样您就可以计算整个parfor体执
我正在使用多CPU的OpenCL平台上工作。在LINUX中,如何在单个CPU或任意数量的CPU中运行代码?OpenCL中是否有用于此目的的命令?默认情况下,它们在所有内核(AMD和Intel实现)中运行
如果要限制使用的内核数量,可以使用。只需将一个四核划分为4个子设备,并只使用一个设备,因此您只能在一个核心中运行。您也可以创建其他类型的分区,例如,如果您愿意,只需使用3个内核。如果您希望在同一NUMA节点上的所有cpu内核中运行内核,并利用更好的系统缓存/内存访问,这也很有用。Thanx sh
我目前正在使用gfortran 4.9.2,我想知道编译器是否真的知道如何利用DO并发构造(Fortran 2008)。我知道编译器“支持”它,但不清楚这意味着什么。例如,如果启用了自动并行化(指定了一定数量的线程),编译器是否知道如何并行化do并发循环
编辑:如评论中所述,on-SO与我的非常相似,但它是从2012年开始的,而且只有最新版本的gfortran实现了现代Fortran的最新功能,因此我认为值得询问一下2015年编译器的当前状态。而不是明确启用一些新功能,gfortran中的DO
我目前正在参加一个关于超级计算机和多核处理器高效编程的课程。我们最近的任务是测量MPI_Send命令的延迟(因此是发送零字节消息所花费的时间)。仅此一点并不难,但我们必须按照以下标准进行测量:
同一处理器中进程的通信
相同的节点但不同的处理器
对于不同节点上的进程
我想知道:我如何确定这一点?对于不同节点上的进程,我考虑对MPI_Get_processor_name返回的名称进行散列,该名称返回进程当前运行的节点的标识符,并将其作为标记发送。我还尝试使用sched_cpu()获取核心id,但
我有一个元组向量,我将其分解成块,然后将每个块交给它自己的线程进行处理,并在最后重新组合它们。
我一直在使用下面的代码,它使用了std::thread,它工作得很好,但是需要大量的克隆和重构,我想消除这些
// convert_bng is just an expensive function
let orig: Vec<(&f32, &f32)>
// orig gets populated here
let mut guards: Vec<JoinHandl
这是我的密码
#include <stdio.h>
#include <omp.h>
#include <math.h>
int main(int argc, char const *argv[])
{
int i,s=0,j,c=8;
int a[]={3,1,0,4,2,1,2,3};
int l=ceil(log10(c)/log10(2));
#pragma omp parallel for
for (i =
我的本地机器上有一个四核CPU。如果我像其他人一样运行julia
julia -p 4
在并行计算中运行脚本,我的理解是:
核心1:运行脚本和所有非并行计算+并行工作者1
核心2:并行工作者2
核心3:并行工作者3
核心4:并行工作者4
这是正确的吗
此外,如果我的进程数大于内核数,会发生什么情况?比如说
julia -p 8
是这样的吗
核心1:运行脚本和所有非并行计算+并行工作者1+并行工作者5
核心2:并行工作程序2+并行工作程序6
核心3:并行工作程序3+并行工作程序7
核心4
最初我在代码中使用了blockIdx.x,但我想删除它,而是使用一个全局值,并在我的块中使用它,而不是blockIdx.x。因为我的代码太大了,当我使用大的输入大小运行它时,它会挂起,我认为这会有所帮助。我以原子方式递增计数器,但当我运行代码时,它会挂起。谁能看看我的代码,看看我是否做错了什么
__device__ int counter = 0;
__global__ void kernel(int * ginput, int * goutput)
{
const int tid = t
关于flink的平行性,我有几个问题。这是我的设置:
我有1个主节点和2个从节点。在弗林克,我创建了3个卡夫卡消费者,每个消费者都来自不同的主题。
因为元素的顺序对我很重要,所以每个主题只有一个分区,我有flink设置来使用事件时间
然后,我在每个数据流上运行以下管道(伪代码):
source
.map(deserialize)
.window
.apply
.map(serialize)
.writeTo(sink)
到目前为止,我使用参数-p2启动了我的flink程序,假设这将允许我同时使
我有一个非常大的数据集和一个中等大小的数据集。我想散列合并较小的一个到较大的一个。我只需要从结果合并中保留一小部分行/列,因此我使用的方法是使用SAS/CONNECT启动几个并行会话,并让它们中的每一个都处理来自超大数据集的单独行范围。当每个并行散列合并完成后,我将这些片段附加在一起
这种方法面临的问题是,每个并行会话都需要在内存中保留自己的中等规模数据集副本,因此,当会话数量增加时,可用系统内存量很快就会成为性能瓶颈。有没有一种方法可以让一个SAS会话访问另一个会话的哈希对象,或者其他一些方法
我正在研究一个深度学习问题。我正在用Pytork解决它。我有两个GPU在同一台机器上(16273MiB、12193MiB)。我想使用这两个GPU进行培训(视频数据集)
我得到一个警告:
您的GPU之间存在不平衡。您可能希望排除GPU 1,因为
少于GPU 0的75%的内存或内核。您可以通过设置
将device_id参数设置为DataParallel,或设置CUDA_VISIBLE_DEVICES
环境变量。
warnings.warn(不平衡警告格式(设备标识[min\u pos],设备标识[m
我试图从OpenMP线程调用OpenBlas函数,而Blas并行化设置为不等于1的值。我正在使用OpenBlas 0.3.9,在下载源代码后,我解开了它并调用了它
使用OPENMP=1
makeprefix=/someFolder/install
但是,我总是从我的可执行文件中收到以下错误消息
OpenBLAS警告:检测OpenMP循环,此应用程序可能挂起。请使用“使用OPENMP=1”选项重建库
有人知道为什么会这样吗?我怎样才能改变它?下面是我的代码的一个简单示例:
#include <
我正在研究逐位运算
但是,我不明白他们为什么声称代码是并行运行的
并行计算奇偶校验
unsigned int v; // word value to compute the parity of
v ^= v >> 16;
v ^= v >> 8;
v ^= v >> 4;
v &= 0xf;
return (0x6996 >> v) & 1;
我从你的电脑上复制了代码
任何帮助都将不胜感激 计算32位字奇偶校验的简单顺序方法需
最大并发度是可并发执行的最大任务数
我相信这个图的最大并发度是2。因为同一时间只能执行两个任务,其他任务必须等待另一个任务。然而,在解决方案中,给出了8。你觉得怎么样
通常,对于树型任务依赖关系图
最大并发度始终等于树中的叶数。这就是为什么它是8
假设集群中安装了octave的并行包,是否有人可以提供一个示例octave代码提交到集群?我想说的是,我是使用Matlab并行计算工具箱中的parfor,还是使用下面的代码
n = 100000000;
s = 0;
% Initialize MPI
MPI_Init;
% Create MPI communicator
comm= MPI_COMM_WORLD;
% Get size and rank
size = MPI_Comm_size(comm);
rank= MPI_Comm_ran
在我的一篇大学论文中,我发现了一个问题“FORTRAN 90中的控制和数据并行特性?”
根据我的理解,Fortran 90中的内置数组操作是数据并行的一个例子,因为Fortran能够用简单的代码对数组元素执行加法、乘法等操作,如:c=a+b
但是fortran 90中的控制并行特性是什么?这个问题值8分,所以我想只有用于数据并行性的数组操作是不行的,肯定还有别的
请帮帮我 我不认为Fortran 90在语言中内置了任何控制并行性。(“控制并行”意味着两个完全不同的代码块可以并行运行。它通常被称为
我有四个不同的实验因素
对于每个实验,我需要改变三个参数并调用fortran程序。我使用EOF构造将参数传递给fortran程序
下面是一个代码示例:
set expfac=(0.1 0.3 0.5 0.7)
set fact1=(1 3 2 8)
set fact2=(9 2 1 4)
set fact3=(5 6 1 4)
@ exp = 1
while ( $exp <= $#expfac )
foreach i ($fact1)
foreach k ($fact2)
我在Erlang中使用receive函数后遇到了一些问题,我已经在Google上搜索了一段时间,并对此进行了猛烈的攻击,但似乎无法找到答案,需要一些帮助。我有一个进程,它运行以下进程并等待消息
% Waits for messages, and puts them into the list.
% If the list has the same length as the Length variable
% which is the original provided list, then
只是为了简化场景
消费者数量==分区数量==Kafka代理数量
如果将使用者部署在代理所在的同一台机器上,如何使每个使用者仅在本地使用消息?目的是减少所有的网络开销
我认为如果每个消费者都知道他们机器上的分区id,我们就可以做到,但我不知道如何做到?还是有其他的方向来解决这个问题
谢谢。bin/kafka-topics.sh--zookeeper[zk address]--description--topic[topic_name]告诉您哪个代理托管每个分区的负责人。然后,您可以为每个使用者使用
我使用的是QtVersion5.5.1(但使用的是5.6.1GUI),我使用的是MSVC++编译器10.0,我在选项->构建和运行->常规菜单中选中了“使用jom而不是nmake”选项。我使用的是最新版本的cmake,选项->构建和运行->工具包->cmake生成器设置为“代码块-NMake Makefiles”。老实说,我不知道最后一个选项是什么,它只是默认的
我正在构建并运行QT creator IDE
如果我在Projects->Build&Run->Build Steps中的“tool
我编写了一个简单的代码来测试并行性的正确性。
要调用的子例程是
SUBROUTINE two_pt_fn()
IMPLICIT NONE
INTEGER :: i,j
!$OMP PARALLEL DO
DO i=1,10
j=i*2
WRITE(*,*)i,j
END DO
!$OMP END PARALLEL DO
END SUBROUTINE
主程序只调用上述子例程
源代码由
gfortran -fopenmp -o m.x sb_two_pt_fn.f90 main.f90
expo
我有一些矩阵乘法运算。我想通过多个处理器并行执行这些操作。。这可以在使用MPI(消息传递接口)的高性能计算集群上完成
像wise一样,我可以使用多个工作者角色在云中进行一些并行化。有什么方法可以做到这一点。6月份发布的Azure SDK和工具版本1.2现在支持.NET 4。您现在可以利用.NET4中包含的并行扩展。这包括Parallel.ForEach()和Parallel.For(),作为示例
任务并行库(TPL)只会在单个VM上帮助您—它不会帮助您在多个VM之间分配工作。因此,如果您设置(比
很抱歉这个模糊的主题问题,但我正在研究一些学术视频处理例程。这些算法是用MATLAB编写的,虽然对于开发来说还不错,但它处理视频的速度大约为60spf,或者大约为.0166fps。不用说,这对于演示之类的东西来说是不够的,所以我的暑期工作就是将常规转换成运行速度更快的东西
我已经为nvidia的GPGPU解决方案CUDA重写了代码中最慢的部分。然而,也有很大一部分代码似乎最好在CPU上完成,因为它是相对串行的。问题是,给我的机器有2个Xeon处理器,总共有8个逻辑核,如果只为单核编码,那么将GP
我想测试pbsdsh是否在我的系统中工作。我使用以下程序
我使用的linux服务器有两个64位四核Intel Xeon(24个计算节点
try.sh
#!/bin/bash
# Set up the path
PATH=/usr/local/bin:$PATH
export PATH
# Make all hosts print out "Hello World"
pbsdsh echo Hello World
然后我发出命令
qsub -l nodes=2 try.sh
我在try.
我正在尝试应用openmp并行化以下代码段,如下所示。然而,并行代码的运行速度比没有openmp派生代码的串行代码慢。我在64 linux平台上运行,并使用gfortran编译。
非常感谢您对如何正确操作的意见和建议
call omp_set_num_threads(4)
do i = 2, natoms - 1
rti(1:3) = R_for(i,1:3)
fti(1:3) = ftmp(i,1:3)
!$OMP
我有一个fortran代码,其中有一个并行部分。它是由gfortran成功编译的,但我运行它时遇到了分段错误。串行编译的运行文件未显示任何故障。此外,我还检查了具有非常小的输入矩阵(rho1和rho2)的并行程序,并测试了分步参数。没有过错。如果我理解正确,当我确定变量为PRIVATE时,就不需要使用
$OMP-ATOMIC。这里矩阵rho1和rho2的维数约为15000000。以下是代码的并行部分:
!$OMP PARALLEL DO ORDERED DEFAULT(PRIVATE)
do
有人能给我指出一个简单的并行最短路径算法的好伪代码吗?或者任何语言,都没关系。我很难找到好的例子=[/p>我最终用OpenMP为比特币机器人实现了它:
/*defines the chunk size as 1 contiguous iteration*/
#define CHUNKSIZE 1
/*forks off the threads*/
#pragma omp parallel private(i) {
/*Starts the work sharing construct*/
#p
对于数值问题,go例程是否预先多任务处理
我对Go的精益设计、速度非常感兴趣,但最感兴趣的是通道是一流的对象。我希望最后一点可以通过复杂的互连模式,为大数据提供一种全新的深度分析算法
我的问题域需要对流式传入数据进行实时计算范围分析。数据可以划分为100-1000个“问题”,每个问题需要10到1000秒的时间来计算(即,它们的粒度是高度可变的)。然而,在输出有意义之前,结果必须全部可用,即,假设500个问题出现,并且在我可以使用其中任何一个之前,所有500个问题都必须得到解决。该应用程序必须能够
我有一个大小为w*h的哈希表T,每个条目有一个存储桶,用于存储映射到同一哈希的值
现在我想插入一组值G。
G中的每个值都包含一个位置元组(x,y)和一个特定的有效载荷p
哈希函数使用值的位置元组作为参数:H(x,y)。
G本质上是一个网格,每个位置存储一个有效载荷p
为了在不同步的情况下并行地将G中的所有值插入T,H应该保证G中的所有值都有不同的哈希值
G的宽度小于w,高度小于h,因此
H(x,y) = mod y * w + mod x
这样比较合适
然而,这个简单的模散列函数仅适用于
在
如何确认我用MPI编写的并行程序比用非并行方法编写的程序快。你可以用它来计时你的程序。这就是一个例子。分析工具可能会为您提供更详细的结果。在这个问题上做一个循环:
假设我有一群工人(电脑),大约1000人,但他们非常不可靠。我希望每一次都能一天下降好几次,有时会持续很长一段时间。仅供参考,这些是运行BOINC的志愿者电脑(我发誓,不是我的僵尸网络!)
是否有任何工具可以帮助使用它们进行并行计算(大部分是可并行化的)?我在想类似IPython并行的东西,可能当一个节点死亡时,计算会在别处重新启动,可能当一个新节点加入到当前的工作环境中时,它会加速 可能重复我认为我的问题更一般,如果这个工具存在,它可能负责网络、复制环境等。。。我一点也不喜欢Python,我只
在Scala中,您可以使用以下工具轻松地执行并行映射、forEach等操作:
collection.par.map(..)
Kotlin是否有一个等价物?目前没有。与Scala相比,官方Kotlin提到:
以后可能添加到Kotlin的内容:
平行集合
Kotlin标准库不支持并行操作。但是,由于Kotlin使用标准Java集合类,因此也可以使用Java8流API对Kotlin集合执行并行操作
e、 g。
Kotlin的stdlib中还没有官方支持,但是您可以定义一个模拟par.map:
我读
如果没有提供要执行的副本数(即。,
命令行中未提供“-np”及其同义词),
Open MPI将自动在每台计算机上执行一份程序副本
进程槽(有关“进程槽”的说明,请参见下文)
所以我想
mpirun program
运行八个程序副本(实际上是一个简单的hello world),因为我有一个Intel®内核™ i7-2630QM CPU@2.00GHz×8,但它不是:它只运行一个进程。如果不指定要使用的进程数,mpirun尝试从(指定的或)默认主机文件获取它们。从:
如果主机文件不提供插槽信
所以我对并行编程的范例是相当陌生的。我试图通过索引矩阵从根进程(秩=0)发送到从进程(秩=1)。因此,我使用以下命令来运行它:
奥林匹克运动会第九届奥林匹克运动会.c-o第九届奥林匹克运动会
mpirun-np 2./q_9
程序编译成功,但无论如何都不会运行。我感觉MPI_Send()和MPI_Recv()例程没有正确同步。任何形式的帮助都会大有帮助。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include "mpi
我很好奇Postgresql的新功能是否允许利用服务器上的多个CPU。一般来说,应该有一些工作人员查询分区并合并结果,我希望这是并行完成的。我想,当使用外部表时,这一点变得至关重要。这可能是目前最接近的答案:
改进的并行查询。虽然PostgreSQL 9.6提供了并行查询,但这一功能在PostgreSQL 10中得到了显著改进,增加了并行位图堆扫描、并行索引扫描等新功能。2-4x的加速比在并行查询中很常见,这些增强应该允许在更广泛的查询中使用这些加速比。这可能是目前最接近的答案:
改进的并行
下面的问题更多地与设计有关,而不是实际的编码。我不知道这类问题是否有专门术语,所以我将继续举一个例子
我有一些openCL代码根本没有经过优化,在内核中有一个与下面类似的switch语句
switch(const) {
case const_a : do_something_a(...); break;
case const_b : do_something_b(....); break;
... //etc
}
我不能写实际的陈述,因为它很长。作为一个简单的例子,考虑下面的
我目前正在尝试并行化现有的分层MCMC采样方案。我的大部分(现在是顺序的)源代码都是用RcppArmadillo编写的,所以我也希望使用这个并行化框架
在开始并行化我的代码之前,我读了几篇关于Rcpp/Openmp的博客文章。在大多数博客文章(例如)中,作者警告线程安全、R/Rcpp数据结构和Openmp的问题。到目前为止,我读过的所有帖子的底线是,R和Rcpp不是线程安全的,不要从omp并行pragma中调用它们
因此,当从R调用时,以下Rcpp示例会导致segfault:
#include
我目前正在与许多以前的开发人员一起编写一个大型代码,该代码被分成了大量的类。虽然OOP设计非常好,但代码本身运行速度非常慢,我希望使用OpenMP使其更快
问题是,我以前没有在这么大的代码中找到可能的可并行区域的经验——有什么好的工具/分析器可以做到这一点吗
到目前为止,我发现:
英特尔顾问()
您是否使用过任何代码执行探查器来收集有关代码中任何部分的运行时的硬事实?代码的跨度是多少i、 e.在您开始考虑通过OpenMP将代码库转换为重新分解之前,在代码库上花费了多少[人*年]的努力?@us
回想一下阿姆达尔关于估计最佳加速比的定律。回答以下问题
您有一个程序,它有40%的代码在三个处理器上并行,并且仅对于这部分代码,就实现了2.3的加速。总体加速率是多少
在这个问题上,我很难理解加速比和总体加速比之间的区别。我知道这个问题的措辞肯定有区别
Q:总体加速比是多少?
最好不要从原始和琐碎的阿姆达尔定律公式开始,而是多读一点,其中讨论了附加间接费用,并解释了拆分工作原子性的一个方面
两个部分,一个通过“局部”加速进行加速,一个整体结果
您最初的问题公式似乎忽略了这一点,通过简单地假设(
我们正在使用Android和IOS为移动设备运行自动化脚本
我们正在尝试为两台Android设备(One Plus和三星S10)运行两个功能文件
最初脚本在两个设备上运行,但当第一个功能文件执行停止时,第二个设备上的执行过程也会自动停止
Appium版本-1.16.0
我们尝试改变设备的顺序,比如先运行三星s10的功能文件,然后再运行一个Plus,然后先启动一个Plus设备的功能文件,然后再启动三星s10的功能文件
在这两种情况下,当第一个启动的进程的执行结束时,另一个进程突然停止,没有任何错误
我从一个更大的编码项目中提取了一些代码。这段代码有一个OMP并行do循环,当使用gfortran编译时,它可以很好地随处理器数量扩展,但当使用Intel编译时,它的扩展性很差。使用gfortran,代码在1个处理器上运行需要18秒,在4个处理器上运行需要5秒。对于Intel,使用1个处理器运行需要7秒,使用4个处理器运行需要14秒。我不明白这里发生了什么。代码如下
MODULE test
TYPE walker
DOUBLE PRECISION, DIMENSION(:,:), AL
我需要初始化环境变量来并行求解微分方程。我知道如何在windows中创建系统变量,我想问的是我应该用哪个数字初始化这个变量。我有6个核心CPU,但包括逻辑核心后,它变成了12个。所以我应该用6或12来初始化它以获得更好的性能吗?
同样,当我运行命令Base.Sys.CPU\u THREADS时,我得到12个线程,但当我运行命令THREADS.nthreads()时,我得到1个线程
另外,像哪一个是最佳的一样,将JULIA_NUM_THREADS保存为6或12?您始终可以使用--THREADS a
在过去的两年里,我一直在写计算流体动力学代码。在我的串行代码中,我定义了一个派生类型,如下所示:
type ptr_SCL
real(8), pointer :: Q
end type ptr_SCL
type arr_nod
real(8) :: Q
type(ptr_SCL)::p0(5)
type(ptr_SCL)::pj(5,5)
end type arr_nod
type(arr_nod ),target,allocatabl
1 2 3 4 5 6 ...
下一页 最后一页 共 24 页