Проект APE в ОИЯИ

А.П.Сапожников
доклад на конференции
Modern Trends in Computational Physics
[1]

     Семейство компьютеров APE - это массивно-параллельные вычислительные системы с распределенной памятью и архитектурой SIMD. Буквосочетание "APE" - это аббревиатура от "Array Parallel Engine".
     Основной отличительной чертой архитектуры SIMD (Single Instruction, Multiple Data) является то, что все процессоры, входящие в состав вычислительной системы, синхронно выполняют одну и ту же программу, причем каждый процессор обрабатывает свой комплект локальных данных.
     Число процессоров может быть весьма велико, порядка нескольких тысяч. Исторически первой подобной системой был ILLIAC-IV (начало 70-х годов).
     Проект APE разработан и развивается группой итальянских физиков-теоретиков, специализирующихся в области квантовой хромодинамики (QCD). Первые публикации по этому проекту относятся к 1985 году (R.Tripiccione, F.Rapuano, INFN, Италия). Активное участие в проекте принимает Alenia Spazio - Национальное космическое агентство Италии. В последние 5-7 лет в проекте активно участвует немецкий институт DESY.

1. APE-100


     Первым практическим результатом проекта явилась разработка вычислительной системы APE-100, включающей до 512 процессорных узлов. Каждый узел состоит из:
     Основной операцией MAD, работающего на частоте 25 Mhz, является обобщенная 3-местная операция A*B+C над тремя вещественными или комплексными 32-разрядными числами, исполняемая за 1 такт. Таким образом, пиковая производительность одного процессорного узла равна 50 Mflops, а всей вычислительной системы - до 25 Gflops. Процессоры образуют 3-мерный тор, в котором каждый узел имеет непосредственный доступ к памяти 6 своих соседей.
     Минимальной конфигурацией системы является так называемая процессорная плата (Processing Board), содержащая 8 узлов в конфигурации 2x2x2.
     Вся система обслуживается front-end машиной, в качестве которой выступает серийная SUN SPARC Station, работающая под управлением OC UNIX. Серийное производство APE-100 осуществляется фирмой Quadrics с 1993 года.
     Основным языком программирования в APE-100 является язык высокого уровня TAO с фортраноподобным синтаксисом и встроенными средствами поддержки параллельной архитектуры машины. В рамках проекта сотрудниками INFN разработан эффективный компилятор с языка TAO, работающий на front-end машине. По утверждению разработчиков, использование этого компилятора в типичных QCD-приложениях позволяет достичь от 30 до 70% пиковой производительности системы.
     К настоящему времени APE-100 успешно эксплуатируется в ряде институтов Италии, Великобритании и Германии, в том числе 4 установки - в DESY. В этом году 32-процессорный комплект (конфигурация 8x2x2) установлен и в ОИЯИ.

2. APE-1000 (APE Mille)


     Следующим шагом проекта явилось создание системы APEMille, преемственной с APE-100 по архитектуре и языку программирования.
     Введение нового типа данных, локальных целых чисел, решило проблему использования смешанной арифметики в программах. Компоновка управляющих элементов непосредственно в процессорные платы существенно улучшила масштабируемость системы.
     Первый образец 64-процессорной APEMille проходит сейчас опытную эксплуатацию в DESY.

3. APE Next


     В стадии подготовки предложений находится очередной этап - проект APENext. Здесь основной целью является достижение производительности в десятки Tflops при стоимости порядка 1$/Mflop. Одним из путей достижения этой цели может явиться использование в качестве процессорных узлов современных высокоскоростных процессоров Pentium-III. В качестве языковых средств программирования наряду с хорошо зарекомендовавшим себя языком TAO предполагается использовать и язык С, в котором надлежит сделать ряд расширений, диктуемых SIMD-архитектурой вычислительной системы.

Участие ОИЯИ в проекте (задачи APE-группы)

  1. Освоение собственного экземпляра APE-100 в ЛИТ.
  2. Тестирование программного обеспечения APEMille на установке в DESY.
  3. Модернизация компилятора с языка ТАО для переноса его с APE-100 на APE-1000.
  4. Участие в работах по созданию С-компилятора для APE Next.
  5. Постепенный перевод библиотеки математических программ общего назначения на архитектуру SIMD.

Примеры программирования на языке ТАО

1. Вычисление определенного интеграла заданной функции одной переменной
b
integralF(x)dx
a
     Файл integral.zzt:
/include 
real s,s1,a,b,p1,p2
integer tim
  p2=3.14159
  p1=-p2
  call Get_SubInterval(p1,p2, a,b)
  get time in tim
do i=1,1000                   !! to get time big enough 
  call Integral(a,b, 100, 100.0, s1)
enddo
  call Sum_All_Locals(s1,s)
  get time in tim
  write s,tim
  s1=node_abs_id              !! testing Sum_All_Locals
  call Sum_All_Locals(s1,s)
  if( any(s!=496.0) )         !! 0+1+...+31 = 31*32/2 = 496
    write " must be 496 !!!"
  endif
 
subroutine F(real x, real y)
  y=sin(x)    
end

subroutine Integral(real a, real b, integer n, real rn, 
real s)
real x,y,dx
  s=0.0
  dx=(b-a)/rn   !! n points used  
  x=a+0.5*dx
  do i=1,n
    call F(x,y)
    s=s+y*dx
    x=x+dx
  enddo
end

subroutine Get_SubInterval(real a,real b, real a1,real b1)
real d
  d=(b-a)/(machine_lx*machine_ly*machine_lz) !! total 
number of processors
  a1=a+d*node_abs_id                         !! own unique 
number
  b1=a1+d
end

subroutine Sum_All_Locals(real s1, real sum)
real t[1]   !! must be declared as array because we use "indexes"
  t[0]=s1
  sum=s1               !! start from own local value
  do i=2,i_machine_lx  !! summation in x-direction
    t[0]=t[left]+sum
  enddo
  sum=t[0]         
  do j=2,i_machine_ly  !! summation in y-direction
    t[0]=t[back]+sum
  enddo
  sum=t[0]            
  do k=2,i_machine_lz  !! summation in z-direction
    t[0]=t[up]+sum
  enddo
  sum=t[0]             !! final result
end

2. Глобальные условия: квалификаторы any,all,none
real s,s1 s1=node_abs_id !! testing Sum_All_Locals call Sum_All_Locals(s1,s) !! 0+1+...+31 = 31*32/2 = 496 if( any(s!=496.0) ) write " must be 496 !!!" endif
3. Локальные условия: оператор WHERE
real x,y open for reading "input.dat" as 5 read from 5 multidata x ... where (x==0.0) y=1.0 elsewhere y=sin(x)/x endwhere ...

[1]   Sapojnikov A.P., "APE Project in JINR", Second International Conference "Modern Trends in Computational Physics", July 24-29, 2000, Dubna, Russia. D11-2000-155, p144.