CUDA FORTRAN: функция дает другой ответ, если я передам переменную вместо числа - PullRequest
1 голос
/ 17 февраля 2011

Я пытаюсь использовать функцию ISHFT() для сдвига битов некоторых 32-разрядных целых чисел параллельно, используя CUDA FORTRAN.

Проблема в том, что я получаю разные ответы на ISHFT(-4,-1) и ISHFT(var,-1), хотя var = -4. Это тестовый код, который я написал:

module testshift 

  integer :: test 
  integer, device :: d_test 

contains 

  attributes(global) subroutine testshft () 
    integer :: var
    var = -4
    d_test = ISHFT(var,-1)
  end subroutine testshft

end module testshift

program foo 
  use testshift 

  integer :: i
  call testshft<<<1,1>>>() ! carry out ishft on gpu
  test = d_test            ! copy device result to host
  i = ISHFT(-4,-1)         ! carry out ishft on cpu
  print *, i, test         ! print the results
end program foo

Затем я компилирую и выполняю:

pgf90 testishft.f90 -Mcuda
./a.out 
   2147483646           -2

Оба должны быть 2147483646, если работают правильно. Я получу правильный ответ, если заменю var на 4.

Как мне исправить эту проблему? Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Когда я удаляю специфичный для GPU код из вышеуказанной программы, я получаю 2147483646 2147483646 от компилятора g95, как вы ожидаете.Вы пытались запустить «скалярную» версию программы с помощью компилятора pgf90?Если скалярная версия работает, а версия графического процессора - нет, это помогает локализовать проблему.Если проблема связана с pgf90 / CUDA, возможно, лучше всего задать вопрос:

Индекс форума пользователей PGI -> Программирование и компиляция http://www.pgroup.com/userforum/viewforum.php?f=4.

0 голосов
/ 01 августа 2011

Я нашел обходной путь, который размещен на этом форуме: http://www.pgroup.com/userforum/viewtopic.php?t=2455&postdays=0&postorder=asc&start=15

Вместо использования ISHFT я использую IBITS, который описан здесь: http://gcc.gnu.org/onlinedocs/gfortran/IBITS.html

Также проблема была исправлена ​​в версии 11.3 компилятора PGI http://www.pgroup.com/support/release_tprs_2011.htm

...