小编pra*_*st1的帖子

N体算法:为什么这种并行速度较慢?

我整理了一个模拟我正在处理的数据结构类型的示例程序.也就是说我有n对象,我需要在每个可能的对之间迭代一次并执行(对称)计算.此操作涉及将数据写入两对.在串行中,这将采用这样的循环形式

for(int i = 0; i < N-1; ++i)
   for(int j = i + 1; j < N; ++j)
      ...
Run Code Online (Sandbox Code Playgroud)

然而,它并没有在互联网上寻找一个"缓存无关的并行实现",我在下面写下并转载.我在这里链接了一个帖子(使用英特尔TBB),详细描述了这个算法.

https://software.intel.com/en-us/blogs/2010/07/01/n-bodies-a-parallel-tbb-solution-parallel-code-balanced-recursive-parallelism-with-parallel_invoke

我尝试使用OpenMP任务来执行相同的操作,并且它总是比串行对应物运行得慢(只是在没有-fopenmp的情况下编译).我用它编译它g++ -Wall -std=c++11 -O3 test.cpp -o test.无论是否观察到相同的情况-O3; 串口总是更快.

为了添加更多信息,在我的实际应用程序中,通常有几百到几千个元素(n下面的例子中的变量),我需要多次以这种成对的方式循环.数百万次.我下面的尝试试图模拟(虽然我只尝试循环10-100k次).

我非常粗暴地使用它,time ./test因为它有很多不同之处.是的,我知道我的例子编写得很糟糕,并且我在我的例子中包含了创建向量所需的时间.但串行的时间给了我大约30秒和一分钟的时间,所以我认为我还不需要做更严格的事情.

我的问题是:为什么序列会做得更好?我在OpenMP中做错了吗?如何正确纠正我的错误?我误用了任务吗?我有一种感觉,递归任务与它有关,我尝试将'OMP_THREAD_LIMIT'设置为4,但它没有产生实质性的区别.有没有更好的方法使用OpenMP实现这一点?

注意:我的问题是具体询问如何修复此特定实现,以便它可以并行正常工作.虽然如果有人知道这个问题的替代解决方案及其在OpenMP中的正确实现,我也对此持开放态度.

提前致谢.

#include <vector>
#include <iostream>

std::vector<std::vector<double>> testme;

void rect(int i0, int i1, int j0, int j1)
{
    int di = i1 - j0;
    int dj = j1 - j0;
    constexpr int threshold …
Run Code Online (Sandbox Code Playgroud)

c++ performance openmp

6
推荐指数
2
解决办法
1213
查看次数

如何使用C#中的数据库中的模块化,可搜索字段创建对象?

我想问一个关于如何最好地构建一个类的对象的设计问题,我想拥有可搜索的字段,包括作为对象的字段 - 但也是模块化的,在某种意义上,可以根据数据库中的新条目添加字段.让我澄清一下:

假设我有一个对象类型,Car.汽车具有诸如品牌,型号,颜色,最高速度等属性,可以通过简单类型(如字符串和双打等)来表示.但它也可能包含更复杂的信息,例如类型为CarPowerProfile(一个单独的对象)的属性,保持一个方程式,描述车辆的功率输出作为节气门的函数.或者也许是其他子对象.

我的问题分解为以下几点:

设计这样一个类的最佳方法是什么,这样我就可以搜索数据库,不仅可以搜索颜色,品牌和型号这样的简单属性,还可以说"找到一辆蓝色的汽车,它的含量在70%到90%之间"功率输出为30%油门"?问题是,我需要执行计算以获取该信息的对象,并且数据库仅存储等式的系数.

另外,假设有人想要向对象添加属性(除了硬编码的"基本属性"),如何最好地实现这样,以便新属性同时在数据库和加载的对象中?最后,这个问题最适合关系数据库或非关系数据库,请记住,这将是一个与Web服务同步的独立应用程序.

我意识到我要求很多,但我不是在寻找代码讲义,而是更多的是如何设计解决方案 - 这就是为什么我使用的是单词而不是代码来描述问题.我来自数值计算的背景,这种类型的软件设计对我来说很陌生.我更感兴趣的是,如果有类似这样(或类似的)的设计模式,或者可能是一种不同的方法,因为我正在解决问题.

谢谢!

c# architecture

5
推荐指数
1
解决办法
127
查看次数

标签 统计

architecture ×1

c# ×1

c++ ×1

openmp ×1

performance ×1