# Optimize for Intel® AVX Using Intel® Math Kernel Library's Basic Linear Algebra Subprograms (BLAS) with DGEMM Routine

### Introduction

Although our initial efforts supports tunings and functionality in three areas, the Intel® Math Kernel Library (Intel® MKL), provides a broader set of functionality for scientific and engineering use. These are highlighted below:

• Biblioteca kernel de matemática Intel®
• MKL
• AVX
• Computação paralela

# SIMD tuning with ASM pt. 3 - PS good, SS bad

If you recall where we left off on my post yesterday we compiled a test program with gcc and saw this code for the 'working' part of a loop. (Yes, I will be getting to the Intel C++ compiler next post, but I'll stick with what I've got so far just so we can take baby steps).

```
.LBB52:

.loc 1 14 0

movss   (%rbp,%rax,4), %xmm0

movss   %xmm0, (%rbp,%rax,4)

```

# SIMD tuning with ASM pt. 2 - Your First Dump

(here's part 1 in case you missed it)

Let's take a really, really simple program. It just adds one array of things to another. This should be a SIMD slam dunk! I will call this program `blah.cpp`

```
#include

#define PTS 1000

int main()

{

float x[PTS];

float y[PTS];

for (int i = 0; i < PTS; i++) {

x[i] = 0.0f;    // set up some data
```

# AVX指令集中的32种浮点比较关系详解

在传统印象中，数字的比较关系只有6种。但在AVX指令集中，Intel一下给出了32种浮点比较谓词，详见下图--

（Intel手册：Table 3-9. Comparison Predicate for VCMPPD and VCMPPS Instructions）

为什么会有这么多种比较谓词呢？我为此困惑困惑了很久。
直到最近翻阅了不少资料后，才终于将它们弄懂了。

一、浮点数据类型

Intel使用的是IEEE 754规范的浮点数据类型。对于浮点数据类型来说，除了可以存储数字、无穷之外，还可以存储 NaN（not a number。非数）。

NaN（非数）分为两大类--