我想知道无序超标量处理器(假设是Intel i7处理器)的每个周期的取指令数是否恒定,或者它可能会根据高速缓存未命中率或分支未命中预测的数量而改变.给出代码/程序?
如果不是常数,如何解释其背后的原因呢?据我所知,在现代多核处理器中,解码器单元总是尝试解决依赖关系并尝试使用独立指令填充管道气泡.那么,对于任何给定的工作负载,获取指令的数量不应总是相同(大约)?
我试图了解锁如何在多线程中工作.当我执行以下代码而没有锁定时,即使将变量sum声明为全局变量并且多个线程正在更新它,它也能正常工作.任何人都可以解释为什么这里的线程在没有锁的共享变量上工作得很好?
这是代码:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NTHREADS 100
#define ARRAYSIZE 1000000
#define ITERATIONS ARRAYSIZE / NTHREADS
double sum=0.0, a[ARRAYSIZE];
pthread_mutex_t sum_mutex;
void *do_work(void *tid)
{
int i, start, *mytid, end;
double mysum=0.0;
/* Initialize my part of the global array and keep local sum */
mytid = (int *) tid;
start = (*mytid * ITERATIONS);
end = start + ITERATIONS;
printf ("Thread %d doing iterations %d to %d\n",*mytid,start,end-1);
for (i=start; i < end ; i++) {
a[i] …Run Code Online (Sandbox Code Playgroud)