小编klm*_*123的帖子

多线程:为什么两个程序比一个好?

关于我的问题:

我有一台带有2个AMD Opteron 6272和64GB RAM插槽的电脑.

我在所有32个核心上运行一个多线程程序,与运行2个程序的情况相比,速度降低了15%,每个程序在一个16核心插槽上运行.

如何以两个程序的速度制作单程序版本?


更多细节:

我有大量的任务,并希望完全加载系统的所有32个核心.因此,我将任务分组打包1000个.这样的组需要大约120Mb的输入数据,并且需要大约10秒才能在一个核心上完成.为了使测试更加理想,我将这些组复制32次,并使用ITBB的parallel_for循环在32个核心之间分配任务.

pthread_setaffinity_np用来确保系统不会让我的线程在核心之间跳转.并确保所有核心都得到了相应的使用.

mlockall(MCL_FUTURE)用来确保系统不会让我的内存在套接字之间跳转.

所以代码看起来像这样:

  void operator()(const blocked_range<size_t> &range) const
  {
    for(unsigned int i = range.begin(); i != range.end(); ++i){

      pthread_t I = pthread_self();
      int s;
      cpu_set_t cpuset;
      pthread_t thread = I;
      CPU_ZERO(&cpuset);
      CPU_SET(threadNumberToCpuMap[i], &cpuset);
      s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);

      mlockall(MCL_FUTURE); // lock virtual memory to stay at physical address where it was allocated

      TaskManager manager;
      for (int j = 0; j < fNTasksPerThr; j++){
        manager.SetData( &(InpData->fInput[j]) …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading pthreads numa

12
推荐指数
1
解决办法
424
查看次数

OS X 10.7上的meld不起作用?

我正在使用端口在Mac OS上安装meld.

它已下载所有依赖项并告知一切正常:

Staging meld into destroot
Installing meld @1.5.3_0
Activating meld @1.5.3_0
Cleaning meld
Updating database of binaries: 100.0%
Scanning binaries for linking errors: 100.0%
No broken files found.
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时:

[18:28:24]~$ meld
Run Code Online (Sandbox Code Playgroud)

Traceback(最近一次调用最后一次):

File "/opt/local/bin/meld", line 75, in <module>

locale.setlocale(locale.LC_ALL,'')

File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 539, in setlocale

return _setlocale(category, locale)

locale.Error: unsupported locale setting
Run Code Online (Sandbox Code Playgroud)

问题是什么以及如何处理?

macos diff port install meld

9
推荐指数
1
解决办法
4303
查看次数

如何重启taskgated进程?

我正在尝试遵循手册,其中包含以下说明:

restart taskgated service by killing the current running taskgated process
Run Code Online (Sandbox Code Playgroud)

怎么做?我试图找到taskgated并只得到一些ttys007,但没有任务门控过程:

$ ps | grep taskgated
66942 ttys007    0:00.00 grep --exclude-dir=.svn taskgated
$lsof | grep taskgated
$
Run Code Online (Sandbox Code Playgroud)

macos kill

8
推荐指数
2
解决办法
8900
查看次数

SIMD XOR操作不如Integer XOR有效吗?

我有一个任务来计算数组中的xor-sum字节:

X = char1 XOR char2 XOR char3 ... charN;
Run Code Online (Sandbox Code Playgroud)

我正在尝试并行化它,而是使用__m128.这应该加速因子4.另外,要重新检查算法,我使用int.这应该加速因子4.测试程序是100行,我不能让它更短,但它很简单:

#include "xmmintrin.h" // simulation of the SSE instruction
#include <ctime>

#include <iostream>
using namespace std;

#include <stdlib.h> // rand

const int NIter = 100;

const int N = 40000000; // matrix size. Has to be dividable by 4.
unsigned char str[N] __attribute__ ((aligned(16)));

template< typename T >
T Sum(const T* data, const int N)
{
    T sum = 0;
    for ( int i = 0; i < N; ++i …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing performance simd seeding

7
推荐指数
2
解决办法
1182
查看次数

引用类型的定义是什么?

你如何以正式和严格的方式定义(解释)什么是 C++ 中的引用类型?

我试着用谷歌搜索,并查看了 Stroustrup 的“C++ 编程语言”,但我在那里没有看到这个概念的定义。

c++ reference

7
推荐指数
1
解决办法
1912
查看次数

如何缩放`clip-path:path`?

我有一个剪辑路径,可以切割某种形状。问题是它是用绝对坐标设置的。如果我把 % 放在那里,它就会崩溃。如何缩放它使其适合画布边框并与画布一起拉伸?

.canvas {
    width: 200px;
    height: 200px;
    background-color: black;
}

.clip {
    width: 100%;
    height: 100%;

    background-color: orange;
    content: "";
    clip-path: path('M 100 50 A 75 75 0 0 1 0 50 A 75 75 0 0 1 100 50 z');
 }
Run Code Online (Sandbox Code Playgroud)
<div class="canvas"><div class="clip">sadf</div></div>
Run Code Online (Sandbox Code Playgroud)

css svg clip-path

7
推荐指数
1
解决办法
3114
查看次数

如何检查内存不同部分的使用情况?

我的电脑配有2个Intel Xeon CPU和48 GB RAM.RAM分为CPU - 两部分24 GB + 24 GB.如何查看每个特定部件的使用量?

所以,我需要类似的东西htop,它显示每个核心的使用情况(参见本例),而不是内核而不是内核.或者指定使用哪个部分(地址)的内存以及哪些不是.

linux memory-management

6
推荐指数
1
解决办法
8785
查看次数

类成员函数与函数关于速度

可能重复:
虚函数和性能C++

这是正确的,类成员函数比简单函数需要更多时间吗?如果使用继承和虚函数怎么办?

我试图将我的函数收集到一个简单的接口类中(只有成员函数,没有数据成员),看来我浪费时间.有办法解决吗?

PS我正在检查gcc和icc编译器并使用-O3选项.

c++

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

在支持SSE的x86处理器上有多少个XMM寄存器?

如何在支持SSE的处理器上找出XMM寄存器的数量?

例如,在Intel X5550上.

x86 sse processor cpu-registers

6
推荐指数
1
解决办法
5772
查看次数

关于gcc O3优化标志的疑问

我有g ++ 4.7.3编译器.我正在尝试按照优化标志描述http://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/Optimize-Options.html并遇到下一个问题:

我有一个程序,它给出了-O2和-O3标志的不同时间.-O2比-O3快两倍.O2时间为8ms,O3时间为16ms.

所以我想了解到底有什么区别.在上面的链接中,我看到:

"O3优化更多.-O3打开-O2指定的所有优化,并打开-finline-functions,-funswitch-loops,-fpredictive-commoning,-fgcse-after-reload,-ftree-vectorize和-fipa -cp-clone选项."

所以我只需要-O2并添加所有描述的标志:

-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone
Run Code Online (Sandbox Code Playgroud)

时间是30ms.但是这组选项应该等同于-O3.为什么时间不同?我哪里做错了什么?

PS所有结果均可完美再现,精度为1ms.


我已经检查了选项

g++ -c -Q -Ox --help=optimizers
Run Code Online (Sandbox Code Playgroud)

并且看到O3还有一个额外的选项:-ftree-loop-distribute-patterns.但是当我添加选项集时:

-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone -ftree-loop-distribute-patterns
Run Code Online (Sandbox Code Playgroud)

速度仍然是30ms.

c++ optimization options

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