小编arm*_*ndo的帖子

将python与c/fortran进行比较

我编写了以下程序来比较python与c/fortran的速度.为了获得程序使用的时间,我使用了"time"命令.所有程序计算x x + y y + z*z的平方根,其中x,y,z是浮点数.我使用了根方,因为它是科学计算中最耗时的部分之一,我参与其中.

我得到以下几次:

fortran  0m29.9s //
c        0m20.7s //
python  30m10.8s
Run Code Online (Sandbox Code Playgroud)

根据我做的简单测试,我发现Python不推荐用于科学计算.但可能我的代码效率很低.

您是否认为我可以为这个简单的测试用例提高代码效率?

Fortran语言:

program root_square
implicit none

integer i,j
real x,y,z,r

x=1.0
y=2.0
z=3.0

do j=1,3000
    do i=1,1000000
        r=sqrt(x*x+y*y+z*z)
    enddo
enddo

end program root_square
Run Code Online (Sandbox Code Playgroud)

C:

#include "stdio.h"
#include "math.h"

int main (void)
{

float x=1.0,y=2.0,z=3.0,r;
int i,j;

for(j=0; j<3000; j++){
        for(i=0; i<1000000; i++) {
                r=sqrt(x*x+y*y+z*z);
        }
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

#!/usr/bin/env python

from math import sqrt

x = 1.0
y = 2.0
z …
Run Code Online (Sandbox Code Playgroud)

c python performance fortran

12
推荐指数
2
解决办法
7761
查看次数

越来越多的vim列

通常我会处理看起来像这样的文件:

0.98   3.45
2.45   3.90
.
.
.
4.56   8.45
Run Code Online (Sandbox Code Playgroud)

比方说100行.我想得到这样的东西:

1   0.98   3.45
2   2.45   3.90
.
.
.
100 4.56   8.45
Run Code Online (Sandbox Code Playgroud)

第一列整数.我通常做的是生成一个只有1,2 ... 100的列文件,然后选择该块并将其粘贴到包含两列的文件中.由于行数几乎总是不同,我的方法似乎非常慢.

你有什么建议吗?

谢谢.

vi vim

6
推荐指数
2
解决办法
5277
查看次数

在Vim中缩进Fortran代码

我有一个看起来像这样的fortran代码:

   open(2,file=filenm(i),status='unknown')
         do j=1,num_lines
            do k=1,dime
                     read(2,*) z(k)
            enddo
               if( j .ge. 1000 ) then
                     do k=1,dime
                              sumz(k)=sumz(k)+z(k)
                     enddo
                     nsteps=nsteps+1.0
               endif
         enddo
   close(2)
Run Code Online (Sandbox Code Playgroud)

你可以看到压痕不均匀,我希望有这样的东西:

   open(2,file=filenm(i),status='unknown')
          do j=1,num_lines
                 do k=1,dime
                        read(2,*) z(k)
                 enddo
                 if( j .ge. 1000 ) then
                        do k=1,dime
                               sumz(k)=sumz(k)+z(k)
                        enddo
                        nsteps=nsteps+1.0
                 endif
          enddo
   close(2)
Run Code Online (Sandbox Code Playgroud)

我可以逐行修复缩进,但代码有点大.我感谢任何评论.

vim fortran fortran90

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

vim选择文字

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

1 148 1  4
2 333 1  3
3 534 2  3
4 772 g  7
5 921 p  2
Run Code Online (Sandbox Code Playgroud)

我想从第1行到第5行以及从第1列到第7行抽取文本:

1 148 1  
2 333 1  
3 534 2  
4 772 g  
5 921 p   
Run Code Online (Sandbox Code Playgroud)

我可以从vim命令行那样做吗?如果我输入

:1,5ya a
Run Code Online (Sandbox Code Playgroud)

整行都被记入寄存器"a",我只想要某些列.

谢谢.

vim

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

c/c++ 中带有线程的程序应该比串行程序运行得更快吗?

我正在学习c/c++中线程的概念。我正在尝试Pthreads Overview中引用的两个向量的点积示例。

我运行了代码的串行版本和线程版本,我发现串行版本比线程版本更快。我想应该是相反的。

我在单个 CPU 上运行。

c c++ pthreads

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

mpi_byte是如何工作的?

我在Stackoverflow上看到一篇关于mpi的简单程序的帖子:

简单的MPI计划

在该程序中,用户试图通过使用MPI_BYTE mpi类型而不是MPI_CHAR来广播等于20的char变量长度.

我正在尝试(可能不是很聪明)使用MPI_BYTE类型广泛转换整数变量"n":

call MPI_BCAST(n,1,MPI_BYTE,0,MPI_COMM_WORLD,ierr)
Run Code Online (Sandbox Code Playgroud)

但是当我为不同于root的处理器打印"n"的值时,我得到了一个很大的数字.

我的问题是我什么时候可以使用MPI_BYTE?

我已经读到它依赖于机器架构,但我仍然没有明白这一点.

问候.

c fortran mpi

3
推荐指数
2
解决办法
3457
查看次数

vim命令行编辑

有没有办法在vim命令行中使用vim/vi?有时我在vim中编写一个长命令,例如:

:!./script /home/user/pet --flag=1 
Run Code Online (Sandbox Code Playgroud)

我想通过"其他"更改例如"user".我通常做的是用右箭头导航命令行,这是耗时的,当我想要去行的开头时甚至更多.我希望有一些类似"0"的东西去那里或w/b用文字移动.或者使用j/k转到下一个/上一个命令.

谢谢.

vi vim

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

在混合MPI/OpenMP中进行MPI调用的线程

我在我的混合MPI/OpenMP代码中发现了一个问题,该代码在下面引用的代码中以最简单的形式再现.我每个MPI等级使用2个线程.然后在OpenMP"Section"中使用这两个线程进行多次计算,其中之一是对两个不同的向量A和B进行"mpi_allreduce"调用,其结果存储在W和WW中.问题是,每次运行程序时,我都会得到不同的输出.我的想法是MPI调用是重叠的,并且减少的数组W和WW即使在它们具有不同的名称时也会被组合,但我不确定.如何克服这个问题的任何评论都是受欢迎的.

详细信息:MPI线程级别在代码中初始化为MPI_THREAD_MULTIPLE,但我也尝试过串行和漏斗(具有相同的问题).

我编译代码mpiifort -openmp allreduce_omp_mpi.f90并运行我使用:

export OMP_NUM_THREADS = 2 mpirun -np 3 ./a.out

      PROGRAM HELLO
      use mpi 
      use omp_lib
      IMPLICIT NONE

      INTEGER nthreads, tid 

      Integer Provided,mpi_err,myid,nproc
      CHARACTER(MPI_MAX_PROCESSOR_NAME):: hostname
      INTEGER :: nhostchars

      integer :: i
      real*8 :: A(1000), B(1000), W(1000),WW(1000)

      provided=0
      !Initialize MPI context
      call mpi_init_thread(MPI_THREAD_MULTIPLE,provided,mpi_err)
      CALL mpi_comm_rank(mpi_comm_world,myid,mpi_err)
      CALL mpi_comm_size(mpi_comm_world,nproc,mpi_err)
      CALL mpi_get_processor_name(hostname,nhostchars,mpi_err)

      !Initialize arrays
      A=1.0
      B=2.0
      !Check if MPI_THREAD_MULTIPLE is available
      if (provided >= MPI_THREAD_MULTIPLE) then
      write(6,*) ' mpi_thread_multiple provided',myid
      else
      write(6,*) ' not mpi_thread_multiple provided',myid
      endif

!$OMP PARALLEL PRIVATE(nthreads, tid) …
Run Code Online (Sandbox Code Playgroud)

multithreading fortran mpi openmp hybrid

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

为什么 OpenMP SIMD 指令会降低性能?

我正在学习如何在 OpenMP/Fortran 中使用 SIMD 指令。我写了简单的代码:

program loop
      implicit none
      integer      :: i,j
      real*8       :: x

      x = 0.0

      do i=1,10000
           do j=1,10000000
                x = x + 1.0/(1.0*i)
           enddo
      enddo

      print*, x


end program loop
Run Code Online (Sandbox Code Playgroud)

当我编译这段代码并运行它时,我得到:

ifort -O3 -vec-report3 -xhost loop_simd.f90 
loop_simd.f90(10): (col. 12) remark: LOOP WAS VECTORIZED
loop_simd.f90(9): (col. 7) remark: loop was not vectorized: not inner loop

time ./a.out 
   97876060.8355515     

real    0m8.940s
user    0m8.937s
sys 0m0.005s
Run Code Online (Sandbox Code Playgroud)

我做了编译器关于“非内循环”的建议,并添加了一个 SIMD collapse(2) 指令:

program loop
      implicit none
      integer      :: i,j
      real*8       :: …
Run Code Online (Sandbox Code Playgroud)

fortran simd openmp

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

vim在两个文件之间选择和复制文本

我有以下场景,两个打开的文件

vim -O2 file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

我的光标在file1.txt中.我想在file2.txt中选择一些行(比如从第80行到第100行),但不必将光标移动到file2.txt并在那里查看文本.如果可能的话,使用vim的命令行.你有什么建议吗?

谢谢.

vi vim

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

标签 统计

fortran ×5

vim ×5

c ×3

vi ×3

mpi ×2

openmp ×2

c++ ×1

fortran90 ×1

hybrid ×1

multithreading ×1

performance ×1

pthreads ×1

python ×1

simd ×1