在运行 Linux 的共享内存系统上,假设它有 4 个 Intel Xeon-E5 CPU,每个 CPU 有 10 个内核。安装了 PBS Pro。例如qsub -l select=1:ncpu=30,如果用户想要在 30 个内核上运行,他们通常会运行软件程序。或者会setenv OMP_NUM_THREADS 30为其他软件做。
我的问题主要与基于 MPI 的商业软件包有关。暂时忽略 PBS 和 qsub,运行这些程序所做的只是在启动后从下拉菜单中选择要运行的内核数,或者在启动时从提示中./cfd.exe -np 30选择使用 30 个内核。
系统有 4 个物理插槽 = 4 个 CPU;每个 CPU 有 10 个内核 = 总共 40 个物理内核;每个内核都有超线程,因此cat /proc/cpuinfo将返回 80 个CPU或编号从 0 到 79 的内核。
Q1:我对超线程何时以及如何发生感到困惑,如果它在幕后自动发生,或者我是否必须以某种方式手动调用它来发生。
对于具有许多内核的系统,但为了简单起见,我将继续使用上述数字,现在当使用 PBS Pro 和 qsub 并且用户是否qsub -l select=1:ncpu=20分配了 10 个物理内核,例如 10..19,并且还分配了 10 …
我有一些代码使用低级别的i/o read和write系统调用,如C编程语言书籍Kernighan和Ritchie的第170页所述.功能原型就是这样
int n_read = read ( int fd, char *buf, int n )
int n_read = write ( int fd, char *buf, int n )
Run Code Online (Sandbox Code Playgroud)
现在使用这些两个.c文件read,并write通过一个更大的FORTRAN程序基于被称为读写大量数据.
C代码就是这样,没有#include任何类型,在函数名后面加下划线并通过引用传递:
int read_ ( int *descriptor, char *buffer, int *nbyte )
{
return ( read( *descriptor, buffer, *nbyte ) );
}
int write_ ( int *descriptor, char *buffer, int *nbyte )
{
return ( write( *descriptor, buffer, *nbyte ) );
}
Run Code Online (Sandbox Code Playgroud)
而较大的基于fortran的程序将会做这样的事情
INTEGER nbyte …Run Code Online (Sandbox Code Playgroud) 我曾经免费下载 PGI 编译器的社区版,但多年来它似乎比专业版旧一个版本。随着专业版本更新为新版本,旧版本成为免费提供的“社区”版本。
有人能简单地告诉我现在发生了什么事吗?
我已经注册了一个帐户,但现在不知道如何获得它。我没有找到价目表或任何指示去这里付钱给我们。我需要了解发生了什么,因为我依靠它提供的库来运行我们付费购买的由 pgi 编译的其他软件。
有人可以帮我找到在哪里或解释什么__attribute_malloc__意思吗?并且__wur?
我正在使用一些大约 120 个 fortran f77 文件的旧代码,但使用了一些 C 文件,其中它只使用malloc()并且它们确实使用# include <malloc.h>.
我已经 kdiff'dstdlib.h和malloc.h; 不太确定我能找到这两种实现之间的区别吗?
正在使用的 Linux 发行版可以对 的内容负责吗/usr/include/malloc.h?我正在使用具有 GCC 4.3.4 的 SLES 11.4 x86-64,这里是/usr/include/malloc.h:
/* Prototypes and definition for malloc implementation.
Copyright (C) 1996, 1997, 1999, 2000, 2002-2004, 2005, 2007, 2009
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you …Run Code Online (Sandbox Code Playgroud)