小编mel*_*sgl的帖子

select() + 非阻塞 write() 是否可以在阻塞管道或套接字上使用?

情况是我有一个阻塞管道或套接字 fd,我不想write()阻塞,所以我先做了select()一个,但这仍然不能保证write()不会阻塞。

这是我收集的数据。即使select()指示可以写入,写入的PIPE_BUF字节数也会阻塞。然而,写入最多PIPE_BUF字节在实践中似乎不会阻塞,但POSIX 规范并未强制要求。

那只指定原子行为。Python(!) 文档指出:

报告为准备写入的文件select()poll()或此模块中的类似接口保证不会在写入最多PIPE_BUF字节时阻塞。POSIX 保证该值至少为 512.

在下面的测试程序中,设置BUF_BYTES100000write()成功选择后在 Linux、FreeBSD 或 Solaris 上阻塞 。我假设命名管道与匿名管道具有相似的行为。

不幸的是,阻塞套接字也会发生同样的情况。通话 test_socket()main(),并使用一个相当大的BUF_BYTES100000好这里太)。目前尚不清楚是否有像PIPE_BUF套接字一样的安全缓冲区大小 。

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <limits.h>
#include <stdio.h> …
Run Code Online (Sandbox Code Playgroud)

unix sockets posix pipe blocking

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

CUDA允许使用非对齐固定内存吗?

是否传递指向cudaHostRegister的指针,该指针不是页面对齐允许/可移植的?我问,因为simpleStream示例执行手动页面对齐,但我在文档中找不到此要求.也许这是一个可移植性问题(类似于mlock()支持linux上的非对齐,但POSIX一般不会)?

我更改为带宽测试并使用非对齐,但注册的内存执行与cudaHostAlloc返回的内存相同.由于我使用这些固定缓冲区来重叠复制和计算,我也对非对齐是否阻止它(迄今为止我无法检测到性能损失)感兴趣.

我所有的测试都是在x86-64 linux上进行的.

cuda

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

cuda运行时api和动态内核定义

使用驱动程序api可以排除在同一个应用程序中使用运行时api([1]).不幸的是,cublas,cufft等都基于运行时api.如果想要同时在cuModuleLoad和cublas中进行动态内核定义,有哪些选项?我记得这些,但也许还有更多:

A.等待计算能力3.5,传闻支持在同一个应用程序中驱动程序和运行时api的和平共存.

B.将内核编译为.so文件并将其删除.他们在dlcose上卸载了吗?

C.尝试从驱动程序api使用cuModuleLoad,但运行时api中的所有其他内容.不知道这是否有任何希望.

我没有屏住呼吸,因为jcuda或pycuda几乎是相同的绑定,他们可能已经想到了它.

[1] CUDA驱动程序API与CUDA运行时

cuda pycuda jcuda cublas

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

标签 统计

cuda ×2

blocking ×1

cublas ×1

jcuda ×1

pipe ×1

posix ×1

pycuda ×1

sockets ×1

unix ×1