我有一个用一些intel-intrinsincs编写的C代码.在我首先使用avx然后使用ssse3标志编译它之后,我得到了两个完全不同的汇编代码.例如:
AVX:
vpunpckhbw %xmm0, %xmm1, %xmm2
Run Code Online (Sandbox Code Playgroud)
SSSE3:
movdqa %xmm0, %xmm2
punpckhbw %xmm1, %xmm2
Run Code Online (Sandbox Code Playgroud)
很明显,vpunpckhbw只是punpckhbw使用avx三操作数语法.但是第一条指令的延迟和吞吐量是否等于延迟和最后一条指令的吞吐量相结合?或者答案取决于我正在使用的架构?顺便说一下,这是IntelCore i5-6500.
我试图在Agner Fog的指令表中搜索答案,但找不到答案.英特尔规格也没有帮助(但是,我很可能错过了我需要的那个).
如果可能的话,最好使用新的AVX语法吗?
我正在尝试在我的项目中开始使用 open mp。我有这样的代码:
#pragma omp for
for (i = 0; i < 16; i++) {
resBuf[i] = buf1[i] ^ buf2[i];
}
Run Code Online (Sandbox Code Playgroud)
我包含<omp.h.>在文件的开头。我还尝试在 makefile 中使用不同的标志及其组合:
FLAGS = -Wall -g -fopenmp -lgomp -fgomp
CC = gcc
Run Code Online (Sandbox Code Playgroud)
还是不行。有以下问题:
undefined reference to `omp_get_num_threads'
undefined reference to `omp_get_thread_num'
undefined reference to `GOMP_barrier'
Run Code Online (Sandbox Code Playgroud)
你能帮助我吗?