cpu-architecture相关内容
我想知道我是否可以读取或写入共享int值,而不锁定在mips cpu(尤其是亚马逊或多瑙河)。我的意思是如果这样的读或写是原子的(其他线程不能中断他们)。要清楚 - 我不想阻止线程之间的竞争,但我关心int值本身没有损坏。 假设编译器将所有ints cpu字的边界,应该是可能的。我使用gcc(g ++)。测试也显示它似乎工作正常。 解决方案 使用gcc的内置原子操作,如果不支持这些操
..
我想知道我是否可以读取或写入共享int值,而不锁定在mips cpu(尤其是亚马逊或多瑙河)。我的意思是如果这样的读或写是原子的(其他线程不能中断他们)。要清楚 - 我不想阻止线程之间的竞争,但我关心int值本身没有损坏。 假设编译器将所有ints cpu字的边界,应该是可能的。我使用gcc(g ++)。测试也显示它似乎工作正常。 解决方案 使用gcc的内置原子操作,如果不支持这些操
..
Herb Sutter在他的 2005年11月1日C ++栏中撰写... int A [17]; int * endA = A + 17; for(int * ptr = A; ptr
..
int * a = new int [5] - 1; 此行本身根据C ++标准调用未定义的行为,因为a是一个无效的指针, - 结束。同时,这是一个零开销的方法,使1基于数组(第一个元素是a [1],我需要一个 我想知道如果这是我需要避免的东西,或者如果C ++标准只是保守支持一些奇怪的架构,我的代码永远不会运行反正。所以问题是,在什么架构这将是一个问题?是否有广泛
..
当我尝试使用Visual Studio 2010在Win32或x64模式编译我的c + +项目我得到以下错误: > C:\Program Files(x86)\Microsoft SDKs \Windows \v7.0A\include\winnt.h(135):致命错误C1189:#error:“无目标体系结构” 我的预处理器定义是WIN32; _DEBUG; _CONSOLE;%(
..
好吧,这就是所有。我找不到足够的信息来决定我应该使用哪个编译器来编译我的项目。在不同的计算机上有几个程序模拟一个过程。在Linux上我使用GCC。一切都很好。我可以优化代码,它编译快,使用不那么多的内存。 我用MSVC和GCC编译器做我自己的基准。后来一个产生略快的二进制(对于每个子体系结构)。虽然编译时间远远超过MSVC。 所以我决定使用MinGW。但是在MinGW中找不到任何关于异
..
在C ++中, 为什么是一个布尔值1字节而不是1位大小? 为什么没有像4位或2位整数的类型? 我错过了上述事因为CPU不能处理小于一个字节的任何内容。 $ $ $
..
笔者近日了解到这里以下是线程安全与x86 CLR(不一定是ECMA标准的CLR) 公共类SometimesThreadSafe $ b的x86 CPU上$ b { 私人int值; 公共int值{{返回值; }} 公共无效更新() { Interlocked.Add(参考值,47); } } 这是因为写的 INT 在这样的架构,确保任何有价值的其他CPU高速缓
..
我有一个需要两个x64和x86的DLL(它的数字出来,它需要在运行时哪些),但试图创建一个安装程序时,它抱怨的程序: 文件AlphaVSS.WinXP.x64.dll“定位”AMD64“是不是个项目的目标平台兼容'86'结果 档AlphaVSS.Win2003.x64.dll”针对AMD64''是不是个项目的目标平台'86'结果 档AlphaVSS.Win2008.x64.dll“定位”
..
我有必要与这些针对x86,x64和IA64做Windows可执行文件的工作。我想通过检查文件本身以编程方式找出平台。 我的目标语言的PowerShell但C#示例会做。无论是失败的那些,如果你知道所需要的逻辑将是巨大的。 解决方案 (从另一个Q,因为删除) 机器类型:这是基于一些获取链接时间戳code口的快速点点。这是相同的标题,它似乎工作 - 它返回时,I386与作为目标平台编译编译
..
这我不清楚如何编译器会自动知道要编译64位时,它需要。它怎么知道什么时候可以自信地针对32位? 我主要是好奇编译器如何知道哪些架构编译时的目标。它分析code,并根据其发现的决定? 解决方案 这就是这么奇怪,没有人链接到博客条目的 What值为anycpu实际上意味着作为.NET 4.5和Visual Studio 11 的: 在.NET 4.5和Visual Studio 11中
..
我访问来自program1的一个共享库(共享阵列),并找到访问时间阅读该数组中的所有元素。我得到了17000左右,而蜱仅PROGRAM1单独执行。 现在,当我在另一个选项卡中首先执行Program2中(有空while循环,从终止持有它),然后运行程序1,测量访问时间读取该数组的所有元素。 令我惊讶,现在我得到8000ticks相比,其中只有PROGRAM1执行previous场景。 看起来虽
..
返回类型经常检查是否存在错误。但是,在code,将继续执行可以以不同的方式来指定。 如果(!RET) { doNoError code(); } 出口(1); 或如果(RET) { 出口(1); } doNoError code(); 单向重量级的CPU可以推测使用简单的统计靠近接近/地区所采取的分支 - 我研究了分支预测的4位机制(-2,-1,0,+ 1,+ 2)其中零为未
..
我们正在尝试使用英特尔CLFLUSH指令刷新在Linux下一个进程在用户空间缓存内容。 我们创建一个非常简单的C程序,首先访问一个大阵,然后调用CLFLUSH刷新整个阵列的虚拟地址空间。我们衡量花费CLFLUSH冲洗整个阵列的延迟。在程序中数组的大小是输入,我们改变输入从1MB到40MB具有2MB的步骤 在我们的理解,在CLFLUSH应刷新缓存中的内容的 的。因此,我们希望看到冲洗整个阵列首先
..
我看了这篇文章 http://igoro.com/archive/gallery -of处理器的高速缓存效果/ 。文章称,由于缓存线延误,code: INT [] =改编新INT [64 * 1024 * 1024];//循环1 的for(int i = 0; I< arr.Length;我++)改编[I] * = 3;//循环2 的for(int i = 0; I< arr.Le
..
我组建了一个小补丁在Valgrind的的cachegrind / callgrind工具,它会自动-detect,使用完全通用code,CPU指令和缓存配置(右现在只有在x86 / x64自动配置,以及其他体系结构不提供CPUID型配置,以非特权code)。这code将需要在一个非特权背景,即纯用户模式code完全执行。它还需要能够跨截然不同的POSIX实现便携,所以所著的Grokking的/ p
..
考虑下面的一块code的: 的#include“stdio.h中”typedef结构CustomStruct { 短元素1 [10]; } CustomStruct;无效F2(字符* Y) { * Y = 0×00; ÿ++; * Y = 0x1F的; }无效F1(CustomStruct * X) { F2((字符*)X); 输出(“S =%×\\ N”,(* X).E
..
我已经了解到,某些Intel / AMD的CPU可以做点大的乘法和SSE / AVX补充:结果
..
我必须非常关注速度/延迟在我目前多线程的项目。 高速缓存访问的东西我想更好地理解。而且我不是如何清晰无锁队列(如升压:: lockfree :: spsc_queue)上的高速缓存级别的访问/使用的内存。 我见过使用队列,其中一个大对象,需要由消费者核心操作上的指针推入队列。 如果消费者芯弹出从队列的元件,我presume则意味着元素(在此情况下的指针)已经装入消费者芯的L2和L1高速缓
..
我当时就在想,怎么做的机器间preTER二进制code?我所不解的是你的code获取的变成1和0使机器可以理解他们,但他们是如何做到这一点?难道仅仅是一个普通的文本到二进制翻译? 解决方案 首先,“二进制”并不意味着你认为这意味着(计算机上的任何数据,包括文本已经是二进制的,它只是我们决定方式显示和处理是不同的)。 二,编译不是一个简单的改造,奇怪的字符(如果是这样,我们就不需要针对不同
..