小编lei*_*i_z的帖子

Pthread Mutex:pthread_mutex_unlock()会占用大量时间

我使用生产者 - 消费者模型用pthread编写了一个多线程程序.

当我使用英特尔VTune分析器来分析我的程序时,我发现生产者和消费者在pthread_mutex_unlock上花了很多时间.我不明白为什么会这样.我认为线程可能需要等待很长时间才能获得互斥锁,但释放互斥锁应该很快,对吧?

下面的快照来自英特尔VTune.它显示了消费者尝试从缓冲区中获取项目的代码,以及每个代码行消耗的时间.

我的问题是为什么pthread_mutex_unlock有这样的开销?是pthread互斥体本身的问题还是我使用它的方式? 在此输入图像描述

multithreading mutex pthreads intel-vtune

14
推荐指数
1
解决办法
2882
查看次数

如何使用SIMD指令转置16x16矩阵?

我目前正在编写一些针对英特尔即将推出的AVX-512 SIMD指令的代码,该指令支持512位操作.

现在假设有一个由16个SIMD寄存器表示的矩阵,每个寄存器包含16个32位整数(对应一行),如何用纯SIMD指令转置矩阵?

已经有解决方案分别用SSE和AVX2转置4x4或8x8矩阵.但我无法弄清楚如何使用AVX-512将其扩展到16x16.

有任何想法吗?

assembly intel simd matrix avx512

13
推荐指数
2
解决办法
4722
查看次数

无法使用英特尔编译器强制内联C++函数

我有一个定义为的函数

inline void vec_add(__m512d &v3, const __m512d &v1, const __m512d &v2) {
    v3 = _mm512_add_pd(v1, v2);
}
Run Code Online (Sandbox Code Playgroud)

(这__m512d是映射到Intel MIC架构上的SIMD寄存器的本机数据类型)

由于此函数相当短并且经常被调用,我希望它在每次调用时都被内联.但是,即使在我使用-inline-forceinline-O3选项之后,英特尔的编译器似乎也不愿意内联这个函数.它在编译时报告'Forceinline不尊重电话......'.由于我必须使用某些编译器特定的功能,例如__m512d类型,因此英特尔编译器是我唯一的选择.

更多信息:

文件结构非常简单.该函数vec_add在头文件中定义,该文件mic.h包含在另一个文件中test.cc.函数vec_add只是在循环中重复调用,并且不涉及函数指针.一个简单的代码的版本test.cc看起来像这样

for (int i = 0; i < LENGTH; i += 8) {
    // a, b, c are arrays of doubles, and each SIMD register can hold 8 doubles
    __mm512d va = _mm512_load_pd(a + i); // load SIMD register …
Run Code Online (Sandbox Code Playgroud)

c++ inline icc intel-mic

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

在CUDA中哪个更快:恒定内存或纹理内存?

我知道这两者都是在片外DRAM和缓存.

但访问速度更快?或者在什么情况下一个比另一个快?

cuda

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

ARM:APCS和AAPCS ABI有什么区别?

我目前正在将为ARM编写的编译器移植到另一个目标架构.我发现ABIARM 存在两种不同的类型:APCS_ABIAAPCS_ABI.

我用Google搜索并引用了ARM手册,但没有发现它们之间的差异.

但是,在编译器后端的实现中,这两种ABIs处理方式不同,并且具有单独的实现.

顺便说一句,它APCS是ARM过程调用标准的缩写,以及AAPCSARM体系结构的过程调用标准的缩写.(他们的意思不一样吗?)

那么APCS和之间的区别是AAPCS什么?为什么ABIs要定义两种不同的类型?

arm

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

OS X上是否有可用的命令行分析工具?

我想使用像gprof这样的东西在命令行上配置C/C++程序.但遗憾的是gprof由于某种原因无法在OS X上运行(这是一个已知问题).

当我在互联网上搜索这个主题时,几乎每个人都推荐使用Instruments.app.由于我的工作流完全在命令行环境中,我真的不想仅仅为了一些分析而切换到GUI.

那么OS X上目前是否有一个可用的替代gprof,它纯粹是基于命令行的?

编辑:更具体地说,我想使用该工具分析程序中每个函数的运行时间,以找出热点.

macos

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

如何防止BeautifulSoup转换实体?

我有一个名为keywords的 BeautifulSoup 标签,当我用来keyword.decode(formatter=None) 获取 html 文本时,我得到了这个

<pre><span id="VAL(<>)"><span class="keyword">val</span> (<>)</span> : <code class="type">'a -> 'a -> bool</code></pre>
Run Code Online (Sandbox Code Playgroud)

但原来的html文本是

<pre><span id="VAL(<>)"><span class="keyword">val</span> (&lt;&gt;)</span> : <code class="type">'a -> 'a -> bool</code></pre><div class="info ">
Run Code Online (Sandbox Code Playgroud)

可以看到 已&lt;&gt;转换为<>. 我只是希望文本与原始 html 文件中的文本完全相同。那么我怎样才能阻止这种转换呢?

html python beautifulsoup

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

Visual-C++ malloc实现?

我正在研究malloc我的作业的实施.

我知道有一些版本的malloc实现,比如glibc使用的ptmalloc和FreeBSD使用的jemalloc.

我想知道Visual C++采用哪种版本的实现?或者VC++团队刚刚实现了自己的版本?

c++ malloc visual-c++

4
推荐指数
1
解决办法
1485
查看次数

哪个在CUDA,全局内存或主机内存中更快?

通过示例,第9.4章从CUDA中读到,当在GPU全局内存上使用原子操作不正确时,由于内存访问争用,程序的性能可能比纯粹在CPU上执行时更差.

在更糟糕的情况下,在GPU上执行的程序是高度序列化的,没有线程并行执行,这就是单线程程序在CPU上运行的方式.所以关键问题是程序访问内存的速度有多快.

考虑到我提到的书中的示例,似乎CPU访问主机内存的速度比GPU访问设备上的全局内存要快.

是这样吗?或者在我刚刚描述的情况下是否还有其他因素会影响程序的性能?

cuda

3
推荐指数
1
解决办法
537
查看次数

如何使用fst函数实现head函数

我承认这是我的作业。但苦思冥想实在找不到好的解决办法。

可能有一些愚蠢的方法可以实现这一点,例如:

myHead (x:[]) = x
myHead (x:y:xs) = fst (x, y)
Run Code Online (Sandbox Code Playgroud)

但我认为这并不是老师想要的。
顺便说一句,不需要错误处理。

提前致谢!

haskell

0
推荐指数
1
解决办法
2649
查看次数