标签: intel

GLSL版本1.20允许GLSL Uniforms初始化

我收到以下错误:

WARNING: uniforms initializing is allowed from GLSL version 1.20
WARNING: Only GLSL version > 110 allows postfix "F" or "f" for float
Run Code Online (Sandbox Code Playgroud)

虽然我知道如何解决这个问题,但我想知道为什么会发生这种情况,因为这个机器出现了OpenGL 3.1,因此有GLSL 1.4:

12:40:58 [INFO] Intel(R) HD Graphics Family
12:40:58 [INFO] OpenGL 3.1.0 - Build 8.15.10.2509
Run Code Online (Sandbox Code Playgroud)

编辑:有问题的着色器是一个fragement着色器(没有顶点着色器):

uniform sampler2D sampler;
uniform sampler2D bump;

uniform float imageSize;
uniform float range = 50;

void main() {
    vec2 pos = gl_TexCoord[0].xy;

    float height = texture2D(bump, gl_TexCoord[0].xy).r - 0.5;

    pos.y += height * range / imageSize;

    gl_FragColor = texture2D(sampler, pos);

            //gl_FragColor …
Run Code Online (Sandbox Code Playgroud)

opengl intel glsl

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

了解新的gcc序言

我想知道为什么gcc为函数引入了一个新的序言(以及结语) - 尤其是main(),因为我只分析它.例如,之前,它是:

push ebp
mov ebp, esp
sub esp, 0x... ; Allocate memory space into the stack

; ... Some code

; Epilogue
leave
ret
Run Code Online (Sandbox Code Playgroud)

现在这有点复杂(至少要理解):

lea    ecx,[esp+0x4]
and    esp,0xfffffff0
push   DWORD PTR [ecx-0x4]
push   ebp
mov    ebp,esp
push   ecx
sub    esp,0x64

; Some code

; Epilogue
add    esp,0x64
pop    ecx
pop    ebp
lea    esp,[ecx-0x4]
ret
Run Code Online (Sandbox Code Playgroud)

我明白具体是什么,但我无法弄清楚它的目的 .是否使得利用(堆栈溢出)尝试更棘手?另一个召集会议?只是为了让堆栈更安全?(因为我在战争游戏中遇到了这个东西)

最后,我的gcc版本是:gcc版本4.3.2(Debian 4.3.2-1.1)

提前致谢!

assembly gcc intel

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

英特尔TBB concurrent_queue如何工作?它是否实现了细粒度的并行性?

我是英特尔TBB的新手.我正在使用concurrent_queue,以便在我的项目中实现细粒度的并行性.我几乎没有怀疑.这就是我的实施方式.

   thread_fun(arguments) {
      while(concurrent_queue.try_pop(v))
          operation on v;  //each thread executes its own operation(seperate v for each thread)
   }
   main() {
      for(..)
         concurrent_queue.push(); //fill the queue
      _beginthreadex(..); //create 8 win32 threads and pass concurrent_queue as an argument
   }
Run Code Online (Sandbox Code Playgroud)
  1. 我明确提到了线程的数量.我读到TBB将根据处理器核心数创建线程.我怎样才能实现这一目标?所以我不需要使用_beginthreadex函数显式创建线程?

  2. 我是否通过使用concurrent_queue实现了细粒度的并行性?

  3. 任务级并行性是什么意思?你如何用intel tbb实现任务级并行?我从队列中弹出元素.流行操作是否被视为一项任务?这意味着,所有弹出操作都被视为不同的任务.我用8个线程一次弹出8个元素.这意味着,我正在实现任务级并行性.我对么?

  4. 如果我在四核处理器(支持8个线程)上将线程数增加到32,那么concurrent_queue如何工作?是否只有8个线程同时在队列上执行或共32个线程同时执行?

请帮我.

c++ parallel-processing multithreading intel tbb

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

操作`mov [esp - 4],eax`添加额外的字节

我正在用MSVC++中的机器代码进行一些实验,并创建了一个函数,允许我在带有符号位移的寄存器周围构建mov操作.一切顺利,直到我的功能建立起来mov [esp-4], eax.突然,我的程序开始崩溃了.在看完拆卸后,我发现了一些相当奇怪的东西.对于此mov取消引用ESP寄存器的偏移量,在参数字节和有符号位移之间放置了一个额外的字节.这个字节似乎总是0x24.因此,出于好奇,我拆解了下面的__asm块并获得了一些有趣的结果:

mov [eax - 4], eax
mov [ecx - 4], eax
mov [edx - 4], eax
mov [ebx - 4], eax
mov [esp - 4], eax
mov [ebp - 4], eax
mov [esi - 4], eax
mov [edi - 4], eax
Run Code Online (Sandbox Code Playgroud)

机器代码将上述内容翻译成:

89 40 FC
89 41 FC
89 42 FC
89 43 FC
89 44 24 FC      <--- WAT!
89 45 FC
89 46 FC
89 47 FC
Run Code Online (Sandbox Code Playgroud)

我在Windows计算器中键入了十六进制24并将其切换为二进制.结果是 …

assembly intel machine-code cpu-registers

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

在Mac中启动AVD时出错

我有OSX Yosemite 10.10和Intel i5处理器.我安装了Android SDK和Eclipse.它的工作原理但问题是,当我创建AVD启动它时,它会显示以下错误:

 Starting emulator for AVD 'Nexus4-18-xhdpi'
 emulator: ERROR: x86 emulation currently requires hardware acceleration!
 Please ensure Intel HAXM is properly installed and usable.
 CPU acceleration status: HAX is not installed on this machine (/dev/HAX is missing).
Run Code Online (Sandbox Code Playgroud)

我是android编程的新手,并不知道如何解决它或查看/ dev/Hav.请帮忙.谢谢.

macos android intel

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

比较程序集中的整数值

我们的任务是比较整数值并打印出适当的提示以显示哪些值更大.

我在下面的代码分别将'i'和'j'初始化为5和4.目标是比较"变量"而不是直接值本身.所以在这个例子中,我把'i'和'j'放在cmp中,而不是5和4.

global _main
extern _printf, _system 

section .text


_main:
; clear screen
    push clr
    call _system
    add esp, 4

;Test prints out i. Successfully does the job.
    push dword [i]          ; why did it work here and not in *cmp*?
    push prompt2
    call _printf      
    add esp, 8

;compare values and do a conditional jump.
    CMP dword [i], dword [j]            ; compares values stored in i and j. i and j are base 10 nums. This is where …
Run Code Online (Sandbox Code Playgroud)

assembly integer compare intel cmp

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

来自YMM的MOV使用intel x86-64指令注册到RAX

我想将值从YMM复制到RAX寄存器,但我没有找到正确的指令来执行此操作.我想做的事情如下:

mov rax, ymm0
Run Code Online (Sandbox Code Playgroud)

例如对于XMM我可以这样做:movq rax, xmm0.我想要类似于此的东西.

assembly x86-64 intel cpu-registers

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

x86处理器汇编语言AND和OR运算符优先级

我目前正在学习汇编语言,遵循Kip Irvine的书"用于x86处理器的汇编语言".

在书中,作者说过

NOT运算符具有最高优先级,后跟AND和OR

我知道在Java中,&&(和)运算符的优先级高于|| (或)运算符,但从作者所说的来看,似乎在汇编语言中,AND和OR运算符似乎具有相同的优先级.

我的理解是否正确?

此外,哪里是寻找此类信息的最佳地点?

x86 assembly intel operators irvine32

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

分段寄存器的mov是否比通用寄存器的mov慢?

具体是:

mov %eax, %ds
Run Code Online (Sandbox Code Playgroud)

慢于

mov %eax, %ebx
Run Code Online (Sandbox Code Playgroud)

或者他们是相同的速度.我在网上研究过,但一直无法找到明确的答案.

我不确定这是否是一个愚蠢的问题,但我认为修改分段寄存器可以使处理器做额外的工作.

NB我关注旧的x86 linux cpus,而不是现代的x86_64 cpus,其中分段的工作方式不同.

x86 assembly intel cpu-cycles mov

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

为什么调用和跳转指令相对于下一条指令而不是当前指令使用位移?

在从英特尔文档中摘录的下表中,我们为操作码E8 cw和E8 cd提供了位移与下一条指令相关的信息。

为什么下一条指令?为什么位移不相对于call指令本身?

在此处输入图片说明

x86 assembly intel machine-code relative-addressing

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