如果同时满足它们所需的条件,matlab脚本是否可以同时运行两个不同的功能?
在这个例子中,我正在matlab上制作一个双人格斗游戏作为一个项目:如果两个玩家都试图跳跃,那么随时都可以.
通过在其中使用for循环的单独if语句执行此操作会使一个玩家在半空中停止,而另一个玩家完成他的跳跃,然后第一个玩家像往常一样继续他的跳跃.
目前我已经"硬编码"了这些动作,并希望将它们转换为函数.
两个跳跃的例子如下.
这两个玩家目前也是块,并且必须转换为精灵,所以每个动作,如来回走动,原则上也会有一个for循环,所以这个问题对我的项目至关重要.
if double(c(1)) == 30 && double(c(2)) == 0 && jump == 0 % up
jump=1;
for dt=0:18
dy=dy+20*0.1;
y = y + dy;
set(player,'Position',[x y w h]);
pause(0.07)
if double(c(1))==122 || double(c(2))==122 || double(c(3))==122 %check for punch
if abs(x-x2)<=64 && hit2==0
h2=h2-10;
hit2=1;
x=x;
if x<x2
x2=x2+2*dx;
elseif x>x2
x2=x2-2*dx;
end
if h2<=0
disp('YOU WIN');
else
set(health2,'position',[640-h2 0 h2 20])
end
set(player2,'position',[x2 y2 wp hp])
end
elseif double(c(1))==120 || double(c(2))==120 || double(c(3))==120 %check for …Run Code Online (Sandbox Code Playgroud) 我不确定并行for循环的迭代是什么意思是独立的.以下是两个有效并行for循环的示例吗?它们写入和读取相同的矩阵,但矩阵索引对于每次迭代都是唯一的.
X = zeros(64);
parfor i = 1:64^2
X(i) = i;
end
parfor i = 1:64
X(i,:) = X(i,:) .* randn(1,64);
end
Run Code Online (Sandbox Code Playgroud) 我已经看到了并行合并排序的算法此文件.这是代码:
void mergesort_parallel_omp (int a[], int size, int temp[], int threads)
{
if ( threads == 1) { mergesort_serial(a, size, temp); }
else if (threads > 1)
{
#pragma omp parallel sections
{
#pragma omp section
mergesort_parallel_omp(a, size/2, temp, threads/2);
#pragma omp section
mergesort_parallel_omp(a + size/2, size - size/2, temp + size/2, threads - threads/2);
}
merge(a, size, temp);
} // threads > 1
}
Run Code Online (Sandbox Code Playgroud)
我在多核上运行它.发生的事情是,在树的叶子上,2个线程并行运行.完成工作后,其他2个线程开始,依此类推.即使我们有所有叶节点的免费核心.
我认为原因是这个OpenMP代码不会在并行区域内创建并行区域.我对么?
Go的口号是"不要通过共享内存进行通信;而是通过通信共享内存".我想知道Go是使用共享内存还是分布式计算方法.例如,对于MPI来说,它是明确分布式的,OpenMP显然是共享内存; 但我不确定Go,这是独一无二的.
我见过很多帖子,比如共享内存与Go频道的通信,有效的Go文档等,但无法澄清.提前致谢.
我有openMP和MPI供我使用,并且想知道是否有人遇到任何泛洪填充算法的并行版本(最好是在c中).如果没有,我会对如何进行并行化的草图感兴趣 - 它是否可能基于递归?
维基百科有一篇非常好的文章,如果你需要在洪水填充上刷新你的记忆.
非常感谢您的帮助.
在连接到集群中的笔记本电脑的交互原型开发,我想定义一个类,无论是在客户端可用的__main__会话,并通过传递这样的情况下围绕集群引擎节点上交互方式更新到能够移动该类的实例LoadBalanced视图的参数.以下演示了典型的用户会话:
首先设置并行集群环境:
>>> from IPython.parallel import Client
>>> rc = Client()
>>> lview = rc.load_balanced_view()
>>> rc[:]
<DirectView [0, 1, 2]>
Run Code Online (Sandbox Code Playgroud)
在笔记本单元格中,让我们定义我们交互式编辑的组件的代码片段:
>>> class MyClass(object):
... def __init__(self, parameter):
... self.parameter = parameter
...
... def update_something(self, some_data):
... # do something smart here with some_data & internal state
...
... def compute_something(self, other_data):
... # do something smart here with other data & internal state
... return something
...
Run Code Online (Sandbox Code Playgroud)
在下一个单元格中,让我们创建一个脚本来构建此类的实例,然后使用集群环境的负载平衡视图来评估各种输入参数上的组件:
>>> def process(obj, some_data, other_data):
... …Run Code Online (Sandbox Code Playgroud) 最近我已经阅读了很多关于.NET中的并行编程的内容,但我仍然对这个主题的文本中的语句相矛盾.
例如,弹出(在鼠标指向标记的图标上时)stackoverflow.com task-parallel-library标记的描述:
"任务并行库是.NET 4的一部分.它是一组API,使开发人员能够编写多核共享内存处理器"
这是否意味着使用早期版本的.NET无法实现多核d和并行编程应用程序?
我是否在.NET多线程应用程序中控制核心之间的多核/并行使用/分配?
如何识别要运行线程的核心并将线程归属到特定核心?
什么启用了.NET 4.0+任务并行库,这在以前的.NET版本中是不可能的?
更新:
嗯,很难提出具体问题,但我想更好地理解:
.NET在开发多线程应用程序和并行编程之间有什么区别?
到目前为止,我无法理解它们之间的区别
Update2:
MSDN ".NET Framework中的并行编程"从.NET 4.0版本开始,其文章任务并行库告诉:
"从.NET Framework 4开始,TPL是编写多线程和并行代码的首选方式"
您是否可以提示如何在.NET4之前(在.NET3.5中)专门创建并行代码,同时考虑到我熟悉多线程开发?
c# parallel-processing concurrency multithreading task-parallel-library
// parallel processing
int processors = Runtime.getRuntime().availableProcessors();
ExecutorService executorService = Executors.newFixedThreadPool(threads);
final List<String> albumIds2 = new ArrayList<String>();
long start2 = System.nanoTime();
for (final HColumn<String, String> column : result.get().getColumns()) {
Runnable worker = new Runnable() {
@Override
public void run() {
albumIds2.add(column.getName());
}
};
executorService.execute(worker);
}
long timeTaken2 = System.nanoTime() - start2;
Run Code Online (Sandbox Code Playgroud)
我有像上面的例子一样的代码,它创建了一个List<String>专辑ID.该列是来自cassandra数据库的切片.我记录要创建的整个专辑列表所用的时间.
我使用增强的for循环完成了同样的操作,如下所示.
QueryResult<ColumnSlice<String, String>> result = CassandraDAO.getRowColumns(AlbumIds_CF, customerId);
long start = System.nanoTime();
for (HColumn<String, String> column : result.get().getColumns()) {
albumIds.add(column.getName());
}
long timeTaken = System.nanoTime() - start; …Run Code Online (Sandbox Code Playgroud) 我需要一些帮助来理解GPU上的内核与CPU中的内核的概念,以便进行并行计算.
说到CPU中的核心,看起来很简单.我有一个超级密集的"for"循环,迭代四次.我的Intel i5 2.26GHz CPU有四个内核.我给每个核心一个循环.四个循环中的每一个都独立于另一个.繁荣 - 我现在创建了四个线程和100%CPU使用率(而不是只有一个核心的25%CPU使用率).我的"for"循环现在运行速度比没有并行化时快四倍.顺便说一下,对于"for"循环,我使用了Microsoft Visual Studio 2012上提供的自动并行化,如在线示例所示:( http://msdn.microsoft.com/en-us/library/hh872235. aspx).
相比之下,我甚至不知道我可以用于并行计算的笔记本电脑的GPU(英特尔图形媒体加速器HD,或英特尔高清显卡,1696MB共享内存)中的内核数量.我甚至不知道将GPU与CPU进行比较的有效方法.当我在我的显卡描述旁边看到"12 @ 500MHz"时,我想知道这是否意味着显卡有12个并行核心,可以像CPU中的4个内核一样工作,除了GPU核心运行在500MHz [慢而不是2.26GHz [快]?GPU使用率是否与Windows任务管理器中的CPU使用率相当?我是一个试图在visual studio 2012中使用C++库的新手,如果这有任何区别的话.当我编写实际的GPU软件时,并行化代码如下所示:( http://msdn.microsoft.com/en-us/library/hh265137.aspx).
那么,请您填写我的知识中的一些空白或错误,或者帮助我比较两者?我不需要一个非常复杂的答案,就像"由于空白空白而无法将CPU核心与GPU核心进行比较"或"GPU核心不像CPU核心那样真正的核心"这样简单非常感谢.
parallel-processing performance multithreading multicore gpgpu
我正在尝试使用OpenMP在以下函数中并行化循环
void CEnergymulti::forcetwobody(vector<CMolecule*> m_mols,CPnt force0,CPnt torque0)
{
const int nmol=m_mols.size();
vector<CMolecule*> twomols(2);
CPnt forcetemp,torquetemp;
twomols.clear();
force0.zero();
torque0.zero();
forcetemp.zero();
torquetemp.zero();
#pragma omp parallel for reduction(+:force0,torque0) private(twomols)
for(int j=1;j<nmol;j++)
{ twomols.push_back(m_mols[0]);
twomols.push_back(m_mols[j]);
CMolecule::polarize_mutual(twomols,false, 1000);
twomols[0]->computeMol_Force_and_Torque(forcetemp,torquetemp);
force0+=forcetemp;
torque0+=torquetemp;
forcetemp.zero();
torquetemp.zero();
twomols.clear();
}
REAL converter=COUL_K*IKbT;
force0*=converter;
torque0*=converter;
return;
}
Run Code Online (Sandbox Code Playgroud)
当我编译代码时,它给出以下消息:
EnergyD_multi.cpp: In static member function ‘static void
CEnergymulti::forcetwobody(std::vector<CMolecule*,
std::allocator<CMolecule*> >, CPnt, CPnt)’: EnergyD_multi.cpp:226:
error: ‘torque0’ has invalid type for ‘reduction’
EnergyD_multi.cpp:226: error: ‘force0’ has invalid type for
‘reduction’
Run Code Online (Sandbox Code Playgroud)
我知道变量'force0'和'torque0'既不是双重或整数类型的数据,而是类型'CPnt',这是一个定义为表示空间中三维向量的类.对于类'CPnt',运算符'+'和' - '已经由运算符重载定义.所以我的问题是:OpenMP的减少是否真的无法处理这样的重载运算符?有没有其他方法可以将此循环与OpenMP并行化而不减少'force0'和'torque0'的每个组件?
非常感谢.
c++ ×2
matlab ×2
openmp ×2
c ×1
c# ×1
concurrency ×1
flood-fill ×1
go ×1
gpgpu ×1
ipython ×1
java ×1
multicore ×1
performance ×1
python ×1
sections ×1