小编Dig*_*ggs的帖子

如何在 x86 实模式引导加载程序中初始化堆栈以防止与 BIOS 冲突?

假设我想将堆栈初始化为S字节大小。

我想选择堆栈的基本位置,B以便随着堆栈从 向下增长B,我最终不会覆盖引导加载程序或 BIOS 使用的任何代码或其他内存。

由于我自己编写引导加载程序(并且初始 MBR 扇区被加载到线性地址0x7c00),防止与引导加载程序发生冲突似乎是一个仔细规划的问题。

我如何知道 BIOS 代码所在的位置,以及我的堆栈是否可能覆盖 BIOS 正在使用的任何内存?

另外,是否可以保证初始ss:sp值指向哪里,以及在不设置新值的情况下可以安全使用多少堆栈空间?

assembly callstack bios bootloader x86-16

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

为什么 CUDA 中有扭曲级同步原语?

我有两个关于__syncwarp()CUDA的问题:

  1. 如果我理解正确的话,CUDA 中的扭曲是以 SIMD 方式执行的。这是否意味着扭曲中的所有线程始终是同步的?如果是这样,它到底有什么__syncwarp()作用,为什么有必要?
  2. 假设我们启动了一个块大小为 1024 的内核,其中块内的线程被分为每组 32 个线程。每个线程通过共享内存与其组中的其他线程通信,但不与其组外的任何线程通信。在这样的内核中,我可以看到更细粒度的同步如何__syncthreads()有用,但由于块被分割成的扭曲可能与组不匹配,如何保证使用时的正确性__syncwarp()

cuda gpgpu thread-synchronization

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