在哪里可以找到用“Unified Parallel C”编写的代码示例?
我还对有关该语言的规范性文档(标准、参考手册、在线书籍和课程)感兴趣。C 中添加了哪些扩展来获得 UPC?
这种方言是活的还是死的?
出于维基百科历史的目的,任何人都熟悉“令人尴尬的平行”一词的起源。我一直认为它可能是由一位最初从事 Map-Reduce 工作的 Google 员工随机创造的。有谁有关于起源的具体信息吗?
我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作。目前,我们使用 makefile 来执行处理,因为 makefile 非常擅长通过更改单个选项:-j x 进行并行运行。此外,gnu make 已经内置了依赖堆栈,因此添加辅助处理器或处理更多线程的能力仅意味着更新该单个选项。我希望 python 具有同样的功能和灵活性,但我没有看到。
举个例子:
all: dependency_a dependency_b dependency_c
dependency_a: dependency_d
stuff
dependency_b: dependency_d
stuff
dependency_c: dependency_e
stuff
dependency_d: dependency_f
stuff
dependency_e:
stuff
dependency_f:
stuff
Run Code Online (Sandbox Code Playgroud)
如果我们执行标准单线程操作(-j 1),操作顺序可能是:
dependency_f -> dependency_d -> dependency_a -> dependency_b -> dependency_e \
-> dependency_c
Run Code Online (Sandbox Code Playgroud)
对于两个线程 (-j 2),我们可能会看到:
1: dependency_f -> dependency_d -> dependency_a -> dependency_b
2: dependency_e -> dependency_c
Run Code Online (Sandbox Code Playgroud)
有人对已经构建的包或方法有什么建议吗?我完全开放,只要它是一个Python式的解决方案/方法。
请提前致谢!
python parallel-processing concurrency dependencies makefile
我一直在阅读有关如何检查 LAN 上特定端口上的所有侦听服务器的信息,最后我编写了一些代码,它可以按我想要的方式工作。
我正在使用 System.Threading.Tasks.Parallel 尽快连接到所有 254 个 IP 地址,例如
:192.168.1。1 - 192.168.1。第254章
我需要的是为这些连接尝试设置超时,因为失败时需要大约 15-20 秒才能打印:“连接失败”..那么我该怎么做?
这是客户端代码:
static void Main(string[] args)
{
Console.WriteLine("Connecting to IP addresses has started. \n");
Parallel.For(1, 255, i =>
{
Connect("192.168.1." + i);
});
Console.ReadLine();
}
private static void Connect(string ipAdd)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse(ipAdd), 9990);
e.RemoteEndPoint = ipEnd;
e.UserToken = s;
e.Completed += new EventHandler<SocketAsyncEventArgs>(e_Completed);
Console.WriteLine("Trying to connect …Run Code Online (Sandbox Code Playgroud) 我正在 Linux 中创建一个多线程应用程序。这是场景:
假设我有一个类的 x 个实例BloomFilter,并且有一些 y GB 的数据(大于可用内存)。我需要测试每个布隆过滤器实例中这 y GB 数据的成员资格。很明显,并行编程将有助于加快任务速度,而且因为我只读取数据,因此它可以在所有进程或线程之间共享。
现在我很困惑该使用 Cilk、Cilk++ 还是 OpenMP 哪一个(哪一个更好)。我也很困惑该选择多线程还是多处理
我可能会问一个非常基本的问题,但我真的不知道如何在 python 中创建一个简单的并行应用程序。我正在一台具有 16 个核心的机器上运行我的脚本,我希望有效地使用所有这些核心。我有 16 个大文件要读取,我希望每个 cpu 读取一个文件,然后合并结果。在这里,我举一个简单的例子来说明我想做的事情:
parameter1_glob=[]
parameter2_glob[]
do cpu in arange(0,16):
parameter1,parameter2=loadtxt('file'+str(cpu)+'.dat',unpack=True)
parameter1_glob.append(parameter1)
parameter2_glob.append(parameter2)
Run Code Online (Sandbox Code Playgroud)
我认为该multiprocessing模块可能会有所帮助,但我无法理解如何将其应用到我想做的事情中。
摆脱parallel_for的最有效方法是什么?为了摆脱标准的 for 循环,我们执行以下操作:
for(int i = 0; i < 100; i+)
{
bool bValue = DoSomething();
//Break if bValue is true
if(bValue)
break;
}
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,在 PPL 中 找到了一些有关取消的信息,我正在考虑 3 个选项
-任务组
// To enable cancelation, call parallel_for in a task group.
structured_task_group tg;
task_group_status status = tg.run_and_wait([&]
{
parallel_for(0, 100, [&](int i)
{
bool bValue = DoSomething();
if (bValue)
{
tg.cancel();
}
});
});
Run Code Online (Sandbox Code Playgroud)
-抛出异常
try
{
parallel_for(0, 100, [&](int i)
{
bool bValue = DoSomething();
if (bValue)
throw i; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 git filter-branch 功能替换 git 存储库中的文本数据。
我编写了一个简单的脚本来搜索各种术语并替换它们。它运行得非常慢。我执行了多行 BASH 代码来自定义搜索结果和替换操作。我知道我的代码效率不是很高。我决定继续尝试我的第一行,这应该是半效率的。浏览代码库仍然需要很长时间。
是否可以使用 BASH 或其他简单的方法来搜索我的文件并并行执行查找和替换操作以加快速度?
如果没有,是否有其他建议可以更好地处理这个问题?
这是我正在执行的 Git 命令:
git filter-branch --tree-filter "sh /home/kurtis/.bin/redact.sh || true" \
-- --all
Run Code Online (Sandbox Code Playgroud)
这是我的命令实质上执行的代码:
find . -not -name "*.sql" -not -name "*.tsv" -not -name "*.class" \
-type f -exec sed -i 's/01dPassw0rd\!/HIDDENPASSWORD/g' {} \;
Run Code Online (Sandbox Code Playgroud) 我在使用 #pragma omp parallel 时遇到问题
基本上我有数百个 DNA 序列,我想用一种称为 NNLS 的算法来运行它们。
我认为并行执行会给我带来相当好的速度,因此我应用了 #pragma 运算符。
当我顺序运行它时,没有问题,结果很好,但是当我使用 #pragma omp parallel 运行它时,我在算法中遇到了段错误(有时在不同的点)。
#pragma omp parallel for
for(int i = 0; i < dir_count; i++ ) {
int z = 0;
int w = 0;
struct dirent *directory_entry;
char filename[256];
directory_entry = readdir(input_directory_dh);
if(strcmp(directory_entry->d_name, "..") == 0 || strcmp(directory_entry->d_name, ".") == 0) {
continue;
}
sprintf(filename, "%s/%s", input_fasta_directory, directory_entry->d_name);
double *count_matrix = load_count_matrix(filename, width, kmer);
//normalize_matrix(count_matrix, 1, width)
for(z = 0; z < width; z++) …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,它有 3 个主要功能,目前正在按顺序运行:
1)将数据加载到内存并对其进行预处理。
2)使用GPU和theano对数据执行一些计算。
3)监视GPU上的计算状态并将其打印到屏幕上。
这 3 个功能可以通过使用多线程实现并行化。但在 python 中,我按顺序执行所有这三个功能。部分原因是过去我在 Python 多线程和 GIL 问题上运气不佳。
在这种情况下,我不一定需要利用手头的多 CPU 的全部功能。我想做的就是在 GPU 上执行计算的同时加载数据并对其进行预处理,同时监视计算的状态。目前,大多数耗时的计算都是在 2) 处执行的,因此我在 2) 处的操作有点受时间限制。现在我的问题是:
*Python 可以并行化这 3 个操作而不产生新的瓶颈,例如:由于 GIL 问题。
*我应该使用多处理而不是多线程吗?
简而言之,如果我应该在 Python 中并行化这三个操作,应该如何并行化。
自从我上次为 CPU(尤其是 python)编写多线程代码以来已经有一段时间了,任何指导将不胜感激。
编辑:错别字。