我正在研究基于时间序列的计算.每次迭代计算都是独立的.有人可以在Matlab中使用并行处理分享一些提示/在线引子吗?如何在实际代码中指定?
我想开始阅读C#/ .Net 4.0中的多线程和并行计算.
我理解多线程的基础知识,所以我正在寻找的东西不仅仅是基础知识.我也在寻找与.Net 4.0中的变化最新的东西.
你能推荐一本书吗?
非常感谢.
我想做以下事情:
同时执行多个shell脚本(此处为2个脚本).
等到两个脚本完成
转储每个脚本的返回值
但是,main.sh不能按预期工作.
#!/bin/bash
ret1=`./a.sh` &
ret2=`./b.sh`
if [ "${ret1}"="" -a "${ret2}"="" ]; then
sleep 1
else
echo ${ret1},${ret2}
end
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
sleep 10
echo 1
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
sleep 5
echo 2
Run Code Online (Sandbox Code Playgroud) 我通常使用F#编写数值算法.F#中的函数编程构造有助于以非常自然的方式表达算法.我经常最终得到一个简洁易懂的实现,并且如果有并行机会可能能够快速并行化.
我想知道有一种方法可以将F#程序编译成FPGA.通过这种方式,我仍然可以使用F#来避免FPGA编程中的样板代码,并在FPGA中使用高性能计算.这可能吗?如果是的话,你能为我提供一些提示吗?
有时当我在Mathematica中编写实验代码时,我很担心是否应该对它进行评估,因为它可能最终导致我的系统陷入困境.
作为一个人为的例子,如果您尝试在64位计算机上运行以下代码片段,它很可能会导致系统在耗尽所有内存后完全停止.
junk = Table[{x, x}, {10^9}]; (* nom nom nom memory. Please don't run this. *)
Run Code Online (Sandbox Code Playgroud)
当然,你可以抛出MemoryConstrained它并希望最好,但有时你不希望它阻止任何进一步的输入.为此,我认为实现中间立场的最佳方式是在单独的内核中执行评估.
这很容易做到:
ClearAll[GetAvailableKernel];
GetAvailableKernel[] := Block[{i, kernels},
kernels = Kernels[];
If[Length@kernels != 0,
For[i = 1, i <= Length@kernels, i++,
If[kernels[[i, 1, 2]] > 0, Return@kernels[[i]]]
]
];
LaunchKernels[1]]
ClearAll[SafeEvaluate];
SetAttributes[SafeEvaluate, HoldFirst];
Options[SafeEvaluate] = {"EvaluationKernel" -> Null,
"ConstrainMemory" -> True, "MaxMemory" -> 2 1024^3};
SafeEvaluate[expr_, OptionsPattern[]] := Block[{evalkernel, result},
If[OptionValue["EvaluationKernel"] != Null,
evalkernel = OptionValue["EvaluationKernel"],
evalkernel = GetAvailableKernel[]
];
result = …Run Code Online (Sandbox Code Playgroud) 图形是那些"令人尴尬的并行"问题之一.Haskell应该真的非常适合并行处理.所以我的问题是:
在渲染问题上抛出尽可能多的CPU内核的最佳方法是什么?
是否有可能让GPU完成任务?
通过"渲染问题",我指的是诸如以下问题:
每个像素的颜色都是其坐标的纯函数.
我们从现有的"输入"图像开始,并且每个"输出"像素的颜色是相应输入像素的纯函数,或者可能是这种像素的小邻域.
关于#1:这看起来很简单,但事实并非如此.有几种可能的数据结构选择来存储计算出的像素(这会影响您如何访问它,以及您可以轻松地将结果转储到磁盘或屏幕上).有多种方法可以在多个核上执行.等等.
在我看来,Data Parallel Haskell将是这类事物的理想选择.但是,上次我检查时,DPH还没有工作.就是这样.即使假设它确实有效,你可能会创建一个并行数组来保存像素,然后你必须复制像素以在屏幕上显示它们或将它们写入磁盘.
我会尝试引发每一个像素,但这可能太精细了.我可以将像素作为列表并使用其中一个并行列表策略.或者我可以使它成为一个(未装箱?)不可变数组并编写一些手动代码来启动火花.或者我可以使用显式线程和可变数组.或者我可以拥有一堆工作线程,它们通过通道将像素值传输到主线程,将结果放到正确的位置.要么...
总之,这里有很多可能性,我不确定哪个是最好的.
关于#2:显然,这类问题是GPU首先存在的全部原因.显然,GPU非常适合攻击这些类型的问题.我的问题是"从哈斯克尔那里做这件事难吗?"
他们是刚刚使用蛮力方法想出来的还是有算法呢?
我目前正在尝试在C++中实现基于libpng的PNG编码器,该编码器使用OpenMP来加速压缩过程.该工具已经能够从各种图像格式生成PNG文件.我将完整的源代码上传到pastebin.com,以便您可以看到我到目前为止所做的工作:http://pastebin.com/8wiFzcgV
到现在为止还挺好!现在,我的问题是找到一种方法如何并行化包含压缩图像数据的IDAT块的生成.通常,libpng函数png_write_row在for循环中调用,其中包含指向结构的指针,该结构包含有关PNG文件的所有信息以及包含单个图像行的像素数据的行指针.
(Pastebin文件中的第114-117行)
//Loop through image
for (i = 0, rp = info_ptr->row_pointers; i < png_ptr->height; i++, rp++) {
png_write_row(png_ptr, *rp);
}
Run Code Online (Sandbox Code Playgroud)
然后,Libpng压缩一行接一行,并用压缩数据填充内部缓冲区.一旦缓冲区已满,压缩数据就会在IDAT块中刷新到映像文件.
我的方法是将图像分成多个部分,让一个线程压缩第1行到第10行,另一个线程压缩11到20,依此类推.但是由于libpng正在使用内部缓冲区,它并不像我想象的那么容易:)我不得不让libpng将压缩数据写入每个线程的单独缓冲区.之后我需要一种方法以正确的顺序连接缓冲区,这样我就可以将它们一起写入输出图像文件.
那么,是否有人知道我如何使用OpenMP和一些调整到libpng?非常感谢你!
嗨,大家好我正在学习用MPI编程,我遇到了这个问题.假设我有一个包含100,000行/行的.txt文件,如何将它们分块以便由4个处理器处理?即我想让处理器0负责0-25000行的处理,处理器1处理25001-50000等处理.我做了一些搜索,确实遇到了MPI_File_seek,但我不确定它是否可以在.txt上运行并且之后支持fscanf.
是否可以在脚本的多次运行中调用gnu parallel,而这些脚本又由gnu parallel生成?
我有一个运行100次连续迭代的python脚本,并且在每次迭代中的某个地方,并行计算4个值(使用gnu parallel).现在我想同时使用gnu parallel生成多个这样的脚本.这可能吗?gnu parallel会不会好好利用可用内核?
例如,如果在内部循环中,4个值中有2个已完成且2个正在运行,那么在计算所有4个值之前,单个脚本无法继续下一次迭代.这两个免费核心是否会用于自动计算不同脚本运行的结果?如何指定可用的核心总数?在内部呼叫并行或外部呼叫?
这个问题表明可以将调用嵌套到并行中,但是当我从脚本内部调用嵌套并行时,我不确定这是否会发生变化.
PS:Thrashing不是一个问题,我可以使用大型集群中的大量核心.
PS2:gnu-parallel是一款非常棒的工具......谢谢!:)