当以下代码运行时,我知道在调用 fork() 后,父级和子级都会立即并行运行。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int pfds[2];
char buf[30];
pipe(pfds);
if (!fork()) {
printf(" CHILD: writing to the pipe\n");
write(pfds[1], "test", 5);
printf(" CHILD: exiting\n");
exit(0);
} else {
printf("PARENT: reading from pipe\n");
read(pfds[0], buf, 5);
printf("PARENT: read \"%s\"\n", buf);
wait(NULL);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这意味着 child 将执行:
printf(" CHILD: writing to the pipe\n");
Run Code Online (Sandbox Code Playgroud)
并且父级将执行
printf("PARENT: reading from pipe\n");
Run Code Online (Sandbox Code Playgroud)
在平行下。
对于那些不熟悉的人C,在sh:
$ sh …Run Code Online (Sandbox Code Playgroud) 我正在启动openGL.无法理解图形中的所有内容都是从三角形开始的.我读过的每篇文章都说整个图形都依赖于三角形.
选择这种形状作为基本构件的原因是什么?我虽然方形或圆形会更好,并且因为对称属性而合乎逻辑.
我试图理解CUDA中统一虚拟寻址(UVA)的概念.我有两个问题:
是否有可用于演示此概念的示例(psudo)代码?
我在CUDA C编程指南中读到,UVA只能用于64位操作系统.为什么会这样?
我在amd平台的opencl程序中观察到我们需要两次构建程序.一旦使用clBuildProgram ...(); 当我们构建整个代码时.为什么我们这样做两次?
我指的是这个问题
#define max(a,b) ((a<b)?b:a)
这会产生一些副作用,如答案所述;
如果您使用max(a ++,b ++)作为示例(a或b将增加两次),则会出现副作用
我无法理解这种副作用; 当我们使用max(a ++,b ++)时,为什么a或b会递增两次?
当波前执行时,它提供细粒度多线程.其中一个后果是没有分支预测要求,如下面的幻灯片所示:
但我无法理解这一点.有人可以用一种简单的方式解释这个吗?
在我的电脑上使用intel N2820 cpu(具有Intel HD Ghaphics)的简单设备查询opencl程序,给出了以下几行:
CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT: 1
CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG: 1
CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT: 1
CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE:
CL_DEVICE_NATIVE_VECTOR_WIDTH_INT: 1
CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG: 1
CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT: 1
CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE: 0
Run Code Online (Sandbox Code Playgroud)
有人可以解释不同数据类型的提供和本机矢量宽度的含义吗?