小编Ayr*_*rat的帖子

MSI/MESI:我们如何在共享状态下获得"读取未命中"?

在Jim Handy的高速缓冲存储器书中(摘录如下),作者有MESI协议的表格描述.该表对我来说看起来很不清楚,不幸的是文本没有帮助.

第一个问题(图中绿色):

Is this right? -- a data block is in the cache of a CPU,
and it is in the shared state, but when the CPU reads it, 
the CPU gets read miss. 
How is this possible?
Run Code Online (Sandbox Code Playgroud)

第二个问题(紫色):

Who and when create all these messages "Read miss", etc.?
(afaik, the system bus just translates messages of others) 
Run Code Online (Sandbox Code Playgroud)

最后,第三个问题(不在图片上):

Do all these cache coherency protocols 
(MSI,MESI,MOESI,Firefly,Dragon...)
maintain sequential consistency memory model?
Are there protocols that maintain other consistency models?
Run Code Online (Sandbox Code Playgroud)

Mesi协议描述

cpu-architecture cpu-cache

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

SLURM:如何仅在特定节点上运行30个作业?

例如,您需要运行30个srun作业,但确保每个作业都在特定节点列表的节点上运行(具有相同的性能,以便公平地比较时间).你会怎么做?

我尝试了什么:

  • srun --nodelist=machineN[0-3] <some_cmd>:同时<some_cmd>所有节点上运行(我需要的是:在列表中的一个可用节点<some_cmd>上运行)

  • srun -p partition 似乎工作,但需要一个包含精确机器N [0-3]的分区,但情况并非总是如此.

想法?

slurm

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

Z3_ast是否在Z3之外引用计数引用计数?

在Z3中有2种模式:自动参考计数和手动.

我理解手动引用计数的工作原理.谢谢你的例子.

但Z3如何知道何时在自动引用计数中删除AST节点? 由于Z3_ast是来自C语言=>的结构,因此在创建Z3_ast之后,无法跟踪Z3_ast之外的所有赋值和用法.

或Z3仅在Z3内跟踪参考?例如,如果您执行以下操作,则不会对ref计数器进行更新:ast1 = ast2.

z3

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

如何解决两个不使用命名空间的第三方库之间的类名冲突?

我的项目使用了两个第三方开源库,这两个库都定义了 type BDD,并且都不使用命名空间。

有没有办法解决名称冲突?也许强制一个库进入自定义命名空间?

附加信息:第一个库仅用作BDD类型别名 ( typedef int BDD),因此它不会调用 上的任何方法BDD

c++ namespaces

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

Z3使用什么方法来解决无量词的位向量公式(QF_BV)?

特别是,它是否使用DPLL(T)?它是否使用低于/高于近似值?它是否在单词级别处理线性算术?那么非线性算术呢?

我在文章中只发表了一篇关于"类似于MathSAT/Boolector中的简化"的表面提及,以便有效地解决量化比特公式.

非常有趣的是什么方法帮助Z3在smtcomp的QF_BV部分获得第一名.

z3

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

使用和不使用推送调用在UFBV上对Z3进行增量调用

我在UFBV查询上运行Z3.目前查询包含2个调用check-sat.如果放在Z3 push 1之后check-sat在30秒内解决查询.如果不放任何东西push 1- Z3在200秒内解决它.有趣.任何具体原因还是巧合?

z3

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

信号处理程序中的 pthread_exit 导致分段错误

下面的程序为整个过程设置 SIG_ALRM 处理程序,创建一个线程,将 SIG_ALRM 信号发送到新创建的线程。在 SIG_ALRM 处理程序中调用 pthread_exit。结果 - 分段错误。如果你在发送信号之前睡觉 - 好的。

看起来在 pthread_exit 时刻没有启动新线程。我试图用 gdb 定位分段错误,但无法用 gdb 重现崩溃。

导致分段错误的原因是什么?

谢谢!

#include <signal.h>
#include <pthread.h>
#include <iostream>
#include <cassert>
using namespace std;

void* threadFunc(void* arg) {
    cout << "thread: started. sleeping..: " << pthread_self() << endl;
    sleep(10);
    cout << "thread: exit" << endl;
    return NULL;
}

void alrm_handler(int signo) {
    cout << "alrm_handler: " << pthread_self() << endl;

    pthread_exit(NULL); //if comment - no segmentation fault
}

int main() {
    cout …
Run Code Online (Sandbox Code Playgroud)

linux signals pthreads segmentation-fault

2
推荐指数
1
解决办法
3183
查看次数

为什么有JVM指令`monitorenter/monitorexit`但没有`wait/notifyAll`(它们是本机调用)?

当我们编写时,synchronized(some_object){}我们可以看到两个JVM指令monitorenter/monitorexit作为字节代码发出.

当我们编写时,synchronized(some_object){some_object.wait()}我希望看到特殊的JVM指令wait,但是没有 - 而是wait/notify实现为本机C函数.

为什么会出现这种不一致(要么将它们全部作为JNI还是作为java字节代码)?是否存在特定(历史)原因或仅仅是品味问题?

上下文:我对此感兴趣,因为monitorenter/monitorexit/wait/notify在字节码中包含所有内容将允许"不处理JNI的JavaByteCode程序正确性验证程序"来验证不使用JNI的并发Java程序.目前,这种假设工具必须解决等待/通知.

java bytecode language-design

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

C#就像python中的扩展函数一样?

最后写了很多:

lines = [l.strip() for l in lines]
Run Code Online (Sandbox Code Playgroud)

是否有一种可读的Pythonista方式:lines.stripped()它返回剥离的行?(在C#中,您可以在字符串列表中添加"扩展方法").

c# python

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