小编jit*_*hsk的帖子

如何更改内核i/o缓冲区大小

我正在运行I/O密集型应用程序的一些实验,并试图了解改变内核i/o缓冲区大小,不同电梯算法等的影响.

如何知道内核中i/o缓冲区的当前大小?内核是否在需要时使用多个缓冲区?如何更改此缓冲区的大小?是否存在存储此信息的配置文件?

(要明确的是,我不是在讨论处理器或磁盘缓存,我在谈论内核使用的缓冲区,缓冲读/写,然后再将它们刷新到磁盘).

提前致谢.

c linux io linux-kernel

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

Linux aio(不是posix)的例子?

有没有人有Linux aio功能的经验(io_*,而不是posix aio)?如果有人可以提供某些示例的链接(或在此提供一些示例),那将是很棒的.另外,您对其使用的一般观察/评论是什么?

我正在开发一个I/O库,有人建议我查看它们.众所周知,它们在某些情况下比POSIX aio表现更好,我想看看.

谢谢.

c linux io linux-kernel

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

Intel icc:如何将优化代码转储为C文件

Gcc的-fdump-tree-optimized选项将C代码的优化版本转储为C文件.有没有办法可以使用intel的icc编译器做同样的事情?

我有一个矩阵乘法代码,我编译为icc -O3 -ipo mult.c.我想查看编译器如何执行优化.如果没有任何作用,那么我将生成程序的汇编代码.

c compiler-construction intel icc compiler-optimization

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

为何选择ISO_C_BINDING

我正在研究一些fortran-calling-C代码,并且不清楚iso_c_binding模块的使用.

我有fortran和C接口在没有 iso_c_binding的情况下成功运行,问题是我是否仍应显式绑定函数和变量.例如,这有效:

program testprog
...
interface
  subroutine c_parser(param)
    integer, intent(in) :: param
  end subroutine
end interface

integer :: a
call c_parser(a)
..
end program

/****************/

void c_parser_ (int* param)
Run Code Online (Sandbox Code Playgroud)

因此,在C函数中附加下划线,为其编写接口,并从fortran程序中调用它.我不使用指针或allocatables,我的所有代码都有int,char,float和逻辑,需要从fortran子程序移动到C.

iso_c_binding服务的确切目的是什么?有没有陷阱?作为一个例子,提到了在通过绑定使用字符串时的一个警告(参见"不幸的是,至少在GNU和英特尔编译器上,声明"部分).

c fortran fortran-iso-c-binding

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

如何避免读取基准中的缓存效应

我有一个读取基准,并且在连续运行之间,我必须确保数据不驻留在内存中,以避免因缓存而出现影响。到目前为止,我所做的就是:运行一个程序,在连续运行读取基准测试之间写入一个大文件。就像是

./read_benchmark
./write --size 64G --path /tmp/test.out
./read_benchmark
Run Code Online (Sandbox Code Playgroud)

write 程序只是将一个大小为 1G 的数组写入文件 64 次。由于主存的大小是64G,所以我写了一个大约的文件。相同的尺寸。问题是写入需要很长时间,我想知道是否有更好的方法来做到这一点,即避免数据缓存时出现的影响。

另外,如果我将数据写入/dev/null 会发生什么?

./write --size 64G --path /dev/null
Run Code Online (Sandbox Code Playgroud)

这样,写入程序退出得非常快,实际上没有执行任何I/O,但我不确定它是否覆盖了64G的主存,这正是我最终想要的。

非常感谢您的意见。

c linux io caching memory-management

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

gnuplot:保持抽搐,删除标签

我的gnuplot上的x轴看起来类似于:

2 4 8 16 32 64 72 86 98 112 128 256 512 1024 ... 1048576

所以这些是来自2,4,8 ... 1048576的log2值.问题是有某些中间值,如72,86,98,112等,它们不是基于log2的值,并且彼此如此接近以至于标签重叠.有没有办法可以保持抽搐(即绘制值),但不能在x轴上显示标签?我想只显示那些精确幂为2的标签,但我想在图上显示所有值.

谢谢.

gnuplot

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

为什么使用const不允许变量大小的对象初始化

这是错误的,因为可能无法初始化可变大小的对象

int size = 4;
int array[size] = {1};
Run Code Online (Sandbox Code Playgroud)

size是一个变量,但编译器在创建时是否知道它的值array(size在编译时没有为初始值4分配?)?让我们size改变之后,为什么会出现这个问题呢?我的意思是,这些是连续的指令,什么可能改变size数组声明之前的值?

第二个问题:为什么不允许这样做:

const int size = 4;
int array[size] = {1};
Run Code Online (Sandbox Code Playgroud)

我宣称size是一个常数.我知道const!=只读,并且声明size为宏是正确的方法.但是,如果我保证编译器使用const我不会改变它的值size,为什么不允许?

c compiler-construction const

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

如果col A有子串,则绘制图

我需要在gnuplot中这样做:

plot 1:4 where col 2=="P1", col 3=="3", col 1 has substring "blur1"
Run Code Online (Sandbox Code Playgroud)

下面是一个数据集:

col_1          col_2        col_3    col_4
gcc.blur1.O0   P1           3        10.5
icc.blur1.O2   P2           5        9.8
gcc.blur2.O3   P2           3        8.9
Run Code Online (Sandbox Code Playgroud)

提前致谢.

gnuplot

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

尝试写2GB到文件,看到写入的数量不正确

我正在尝试使用pwrite将2GB写入文件,但下面的代码写的数量较少.但是,如果我使用1GB的2个pwrite调用总共写入2GB,那就行了.

预期文件大小:2147483648字节(2GB),观察:2147479552

编译为: gcc -Wall test.c -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -D_XOPEN_SOURCE=600

64位Opensuse上的gcc v 4.5.0

这是完整的计划.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
    size_t size = 2147483648; //2GB
    off_t offset = 0;
    int fd;

    char *buf = (char*) malloc (size * sizeof(char));
    if(buf == NULL)
    {
        printf("malloc error \n");
        exit(-1);
    }

    if(-1 == (fd = open("/tmp/test.out", O_RDWR|O_CREAT, 0644)))
    {
        fprintf(stderr, "Error opening file. Exiting..\n");
        free(buf);
        exit(-1);
    }

    if(-1 == (pwrite(fd, buf, size, offset)))
    {
        perror("pwrite error");
        free(buf);
        exit(-1);
    } …
Run Code Online (Sandbox Code Playgroud)

c file-io posix

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

bash 脚本:查找最大值、分组依据和按列排序

我有一个看起来像这样的文件:

b, 20, 434
a, 20, 23
a, 10, 123
a, 20, 423
a, 10, 89
b, 20, 88
b, 10, 133
b, 10, 99
Run Code Online (Sandbox Code Playgroud)
  1. 为 col1 和 col2 的每个唯一组合找到 col 3 的最大值。(例如所有 col3 的最大值a,10
  2. 按 col1 对输出进行分组(所有a行放在一起)
  3. 按 col2 对输出进行排序。

也就是说,输出应该是文件应该是

a, 10, 123
a, 20, 423
b, 10, 133
b, 20, 434
Run Code Online (Sandbox Code Playgroud)

如何在 bash 脚本中执行此操作?谢谢你的帮助。

bash shell

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