我正在尝试将 GPU 与 Tensorflow 结合使用。我的 Tensorflow 版本是2.4.1,我使用的是 Cuda 版本 11.2。这是 的输出nvidia-smi。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce MX110 Off | 00000000:01:00.0 Off | N/A |
| N/A 52C P0 N/A / N/A | 254MiB / 2004MiB | 8% …Run Code Online (Sandbox Code Playgroud) 我试图了解小代码模型中使用的 RIP 相对偏移量。也许互联网上有关此主题的唯一可用资源是: https: //eli.thegreenplace.net/2012/01/03/understanding-the-x64-code-models 但在这篇文章中也有一些事情不清楚。我使用这个简单的程序来了解一些事情:
// sample.cc
int arr[10] = {0};
int arr_big[100000] = {0};
int arr2[500] = {0};
int main() {
int t = 0;
t += arr[7];
t +=arr_big[6];
t += arr2[10];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
汇编:g++ -c sample.cc -o sample.o
.text 部分的目标代码:( objdump -dS sample.o)
Disassembly of section .text:
0000000000000000 <main>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
b: 8b 05 00 …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个非常基本的“Hello World”设备驱动程序示例,该示例在任何设备驱动程序实现介绍性课程中都有讲授。我的makefile如下:
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/bulid
PWD := $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)
当我使用 make 命令时,它显示 /lib/modules/version_no/build/ 不存在。所以我进入目录/lib/modules/version_no,发现有一个目录build,但是如果我使用ls命令,它打印成红色,这意味着该目录已被弃用。它包含一个指向 ../../../usr/src/version_no 的链接,但令我惊讶的是,该链接中的版本号与 /usr/src/ 中实际文件夹的名称不同。谁能指出是什么问题?我正在使用 centos 6.1。
我正在尝试编写一个程序,该程序涉及将信号发送到一个过程,以通知它暂停一段时间,然后在收到另一个信号后重新开始工作。我这样写了一个信号处理程序:
void sig_handler(int alrm)
{
if(sig_rcv==0)
{
printf("Signal received..sig_rcv value: %d\n",sig_rcv);
sig_rcv = (sig_rcv+1)%2;
printf("After increment sig_rcv value: %d\n",sig_rcv);
signal(SIGUSR1,sig_handler);
if(pause()<0)
{
printf("Signal received again..\n");
}
}
else
{
sig_rcv = (sig_rcv+1)%2;
printf("Signal received..sig_rcv value: %d\n",sig_rcv);
signal(SIGUSR1,sig_handler);
}
printf("Exiting..\n");
}
Run Code Online (Sandbox Code Playgroud)
在这里我要维护一个全局变量sig_rcv,它最初为0,如果在零时收到信号,它将进入if条件并暂停另一个信号;另一方面,如果在sig_rcv为1时获得信号,它只会更改该变量的值。我以这种方式编写信号处理程序的目的是将相同的信号用于两个不同的目的。我使用了这个系统调用:
signal(SIGUSR1,sig_handler);
Run Code Online (Sandbox Code Playgroud)
现在,当我将SIGUSR1发送到该进程时,它正在执行直到该pause()语句。但是在第二次发送SIGUSR1之后,它没有显示任何效果,只是冻结在pause语句上。使用另一个信号删除暂停状态后,此问题已解决,例如:
void sig_handler2(int a)
{
sig_rcv = (sig_rcv+1)%2;
printf("Restarting reading...\n");
}
Run Code Online (Sandbox Code Playgroud)
和
signal(SIGUSR2,sig_handler2);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它工作得很好。所以,我的问题是,为什么会发生这种现象?我们不能在执行为同一信号编写的信号处理程序时等待信号吗?如果是这样,原因是什么?在不使用SIGUSR2的情况下,是否有任何方法可以获得相同的结果?