我正在尝试并行化一个非常简单的for循环,但这是我在很长一段时间内第一次尝试使用openMP.我对运行时间感到困惑.这是我的代码:
#include <vector>
#include <algorithm>
using namespace std;
int main ()
{
int n=400000, m=1000;
double x=0,y=0;
double s=0;
vector< double > shifts(n,0);
#pragma omp parallel for
for (int j=0; j<n; j++) {
double r=0.0;
for (int i=0; i < m; i++){
double rand_g1 = cos(i/double(m));
double rand_g2 = sin(i/double(m));
x += rand_g1;
y += rand_g2;
r += sqrt(rand_g1*rand_g1 + rand_g2*rand_g2);
}
shifts[j] = r / m;
}
cout << *std::max_element( shifts.begin(), shifts.end() ) << endl;
}
Run Code Online (Sandbox Code Playgroud)
我用它编译它
g++ -O3 …Run Code Online (Sandbox Code Playgroud) 有人能够澄清这些东西到底是什么吗?据我所知,节点是集群内的计算点,本质上是一台计算机。任务是可以在单个节点或多个节点上执行的进程。核心基本上是指您希望在单个节点上分配多少 CPU 来执行分配给该 CPU 的任务。它是否正确?我是否混淆了什么?
你的CPU可能是四核的,但你知道今天有些显卡有超过200个内核吗?我们已经看到了当今显卡的GPU在图形方面的功能.现在它们也可用于非图形任务,在我看来,结果简直令人惊讶.一种适用于并行性的算法在GPU上可能比在CPU上更快,更快.
有一些技术可以实现所有这些:
1.)NVIDIA的CUDA.它似乎是最知名的,有据可查的.不幸的是,它只适用于NVidia显卡.我已经下载了SDK,尝试了一些样本,并且在CUDA中有一些很棒的东西.但它仅限于NVidia显卡这一事实让我质疑它的未来.
2.)ATI 流.ATI相当于CUDA.正如您所料,它只适用于ATI卡.
3.)OpenCL - Khronos集团已经制定了这个标准,但它仍然处于初期阶段.我喜欢OpenCL的想法.希望它应该得到大多数视频卡制造商的支持,并且应该使交叉视频卡开发变得更加容易.
但是,非图形化GPU编程的其他技术即将到来,最有希望的是什么呢?您是否看到或者您是否希望将这些技术构建到某些主流开发框架(如.NET)中以使其更容易?
如果我有这个:
val a = Array(...)
Run Code Online (Sandbox Code Playgroud)
我写
a.par.map(e => someFunc(e))
Run Code Online (Sandbox Code Playgroud)
生成的集合是否与非并行集合的顺序相同?
这是Rob Pike对此的幻灯片.每次我通过这个,我都觉得自己像个白痴.我无法弄清楚它的要点.众所周知,并发性是将复杂问题分解为更小的组件.如果你不能正确地将某些东西划分成较小的部分,那么使用并发很难解决它.
但是,一旦你实现了并发性,关于如何获得并行性的幻灯片中没有太多细节.在Lesson幻灯片(第52期)中,他说并发 - "甚至可能是并行".但问题是 - 何时以及如何才能正确有效地实现并发性并行化?
我的猜测是,在引擎盖下,Rob指出开发人员应该在并发级别工作 - 并行性应该是语言/ vm的关注(gomaxprocs?).只关心智能分解成更小的单元,只关心正确的并发性 - 并行性将由"系统"来处理.
请说清楚.
我有一个ID列表,我需要在每个ID上运行几个存储过程.
当我使用标准的foreach循环时,它工作正常,但是当我有很多记录时,它的工作速度很慢.
我想将代码转换为使用EF,但我得到一个例外:"底层提供程序在Open上失败".
我在Parallel.ForEach中使用此代码:
using (XmlEntities osContext = new XmlEntities())
{
//The code
}
Run Code Online (Sandbox Code Playgroud)
但它仍然抛出异常.
知道如何使用与EF并行?我是否需要为我正在运行的每个程序创建一个新的上下文?我有大约10个程序,所以我认为创建10个上下文非常糟糕,每个上下文一个.
我在Linux机器上运行R,它有8个多核处理器,并且有一个优化问题我希望通过并行优化例程本身来加速.重要的是,该问题涉及(1)多个参数,以及(2)固有的慢速模型运行.一个相当普遍的问题!
有人知道这种场合的并行化优化器吗?
更具体地说,nlm()每次算法在参数空间中执行一个步骤时,解算器就会运行多个模型评估(每个参数值两个),因此,当多个参数值超过几个时,并行化多个模型运行的实例将大大加快速度.健康.
似乎使用包的代码parallel可以用户必须进行最少的代码修改以从使用nlm()或optim()转移到此并行化优化例程的方式编写.也就是说,似乎可以基本上没有任何改变地重写这些例程,除了在基于梯度的方法中常见的多次调用模型的步骤将并行完成.
理想情况下,像nlmPara()这样的代码会采用看起来像的代码
fit <- nlm(MyObjFunc, params0);
Run Code Online (Sandbox Code Playgroud)
并且只需要很小的修改,例如,
fit <- nlmPara(MyObjFunc, params0, ncores=6);
Run Code Online (Sandbox Code Playgroud)
思考/建议吗?
PS:我已采取措施加速这些模型运行,但由于各种原因它们很慢(即我不需要加速模型运行的建议!;-)).
有没有人知道让Parallel.Foreach循环使用块分区的方法,我认为默认情况下是范围分区.使用数组时似乎很简单,因为您只需创建自定义分区程序并将负载均衡设置为true即可.
由于IEnumerable中的元素数量直到运行时才知道,因此我似乎无法找到使块分区工作的好方法.
任何帮助,将不胜感激.
谢谢!
我试图在每个对象上执行的任务执行的时间明显不同.最后,我通常会等待最后一个线程完成其工作的时间.我想要实现的是在整个过程中使用并行循环请求块而不是为每个线程预分配项.
我喜欢的的parallel包在R和它是多么容易和直观做并行版本apply,sapply等等.
是否有类似的并行功能replicate?
这是我第一次尝试并行处理,我一直在研究Dask,但实际编写它时遇到了麻烦.
我已经看过他们的示例和文档,我认为dask.delayed效果最好.我试图用延迟(function_name)包装我的函数,或者添加一个@delayed装饰器,但我似乎无法让它正常工作.我更喜欢Dask而不是其他方法,因为它是用python制作的,并且它(假设的)简单.我知道dask在for循环中不起作用,但是他们说它可以在循环中工作.
我的代码通过一个包含其他函数输入的函数传递文件,如下所示:
from dask import delayed
filenames = ['1.csv', '2.csv', '3.csv', etc. etc. ]
for count, name in enumerate(filenames)"
name = name.split('.')[0]
....
Run Code Online (Sandbox Code Playgroud)
然后做一些预处理ex:
preprocess1, preprocess2 = delayed(read_files_and_do_some_stuff)(name)
Run Code Online (Sandbox Code Playgroud)
然后我调用一个构造函数并将pre_results传递给函数调用:
fc = FunctionCalls()
Daily = delayed(fc.function_runs)(filename=name, stringinput='Daily',
input_data=pre_result1, model1=pre_result2)
Run Code Online (Sandbox Code Playgroud)
我在这里做的是将文件传递给for循环,进行一些预处理,然后将文件传递给两个模型.
关于如何并行化这个的想法或提示?我开始得到奇怪的错误,我不知道如何修复代码.代码确实有效.我使用了一堆pandas数据帧,系列和numpy数组,我宁愿不回去更改所有内容以使用dask.dataframes等.
我的评论中的代码可能难以阅读.这是一种更加格式化的方式.
在下面的代码中,当我输入print(mean_squared_error)时,我得到:延迟('mean_squared_error-3009ec00-7ff5-4865-8338-1fec3f9ed138')
from dask import delayed
import pandas as pd
from sklearn.metrics import mean_squared_error as mse
filenames = ['file1.csv']
for count, name in enumerate(filenames):
file1 = pd.read_csv(name)
df = pd.DataFrame(file1)
prediction = df['Close'][:-1]
observed = df['Close'][1:]
mean_squared_error = delayed(mse)(observed, …Run Code Online (Sandbox Code Playgroud) parallel-processing multithreading python-3.x python-multiprocessing dask
.net ×2
c# ×2
r ×2
c++ ×1
concurrency ×1
cuda ×1
dask ×1
gpu ×1
opencl ×1
openmp ×1
optimization ×1
python-3.x ×1
scala ×1
slurm ×1