OpenACC-Library-Interoperability

Vikram Singh vikramsingh001@gmail.com
Fri Apr 15 08:36:00 GMT 2016


Hi Thomas.

Thanks for the reply. Yes, I came to the conclusion that host_data
would be the only way to do it in fortran.

On the other hand, I though there were no plans to implement it in
gfortran 6 either, so I pivoted back to using PGI compilers which I
had originally not wanted to do.

> I'm copying Jim, who is the author of this chapter in the documentation
> as well as the libgomp/testsuite/libgomp.oacc-c-c++-common/context-*.c
> test cases, and much of the relevant libgomp code, too, and who should
> please correct me if I'm wrong.  I'll make a note for later, that we
> should translate the libgomp.oacc-c-c++-common/context-*.c test cases to
> Fortran, and also replicate them using the OpenACC host_data construct
> (like in libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-1.c), and
> the same for the documentation you referenced.  (Vikram, please tell if
> you're interested to work on these items.)

I am not sure I understand what you want me to work on exactly. I am
not really much of a C programmer, so I wouldn't be good at it. I
would still like to help.


Thanks and Regards,
Vikram



On Fri, Apr 15, 2016 at 9:16 AM, Thomas Schwinge
<thomas@codesourcery.com> wrote:
> Hi!
>
> On Tue, 12 Apr 2016 18:00:02 +0300, Vikram Singh <vikramsingh001@gmail.com> wrote:
>> We have a project that is written in gfortran.
>>
>> I am trying to see whether we could use OpenACC in our project.
>
> Thanks for your interest!
>
>> I got
>> gcc5.2 installed
>
> I will just note that the upcoming GCC 6 releases will offer much
> extended support for OpenACC with nvptx offloading.  (If you're building
> GCC from sources anyway, you may want to give the current GCC trunk or
> gomp-4_0-branch a try, after resolving the problem discussed below.)
>
>> using instructions here.
>>
>> https://github.com/olcf/OLCFHack15
>
> Nice.
>
>> Now I want to do something similar to what is stated here.
>>
>> https://gcc.gnu.org/onlinedocs/libgomp/OpenACC-Library-Interoperability.html
>>
>> More specifically what is stated in secion 8.3. I am trying to exactly
>> reproduce it using gfortran. Unfortunately I don't see how I can do it
>> in fortran. In the example,
>>
>> d_X = acc_copyin(&h_X[0], N * sizeof (float));
>>
>> This allows d_X to be directly used in s = cublasSaxpy(h, N, &alpha,
>> d_X, 1, d_Y, 1);
>>
>> But in fortran, the acc_copyin does not return anything.
>
> Correct.  I'm not much of a Fortran programmer, but as far as I remember,
> Fortran doesn't have a notion of a pointer as C/C++ have.  I suppose
> that's why the OpenACC specification defines that in Fortran, acc_copyin
> et al. are subroutines (no return value) instead of functions, and why
> acc_malloc, acc_deviceptr, acc_map et al. don't even exist in Fortran.
>
>> So how would I replicate the case in Fortran?
>
> You would use the OpenACC host_data construct.  So, instead of:
>
>     [...]
>     d_X = acc_copyin(&h_X[0], N * sizeof (float));
>     [...]
>     s = cublasSaxpy(h, N, &alpha, d_X, 1, d_Y, 1);
>     [...]
>
> ... you would do something like (notice X instead of d_X and h_X)
> (untested):
>
>     [...]
>     acc_copyin(X, N * sizeof (float));
>     [...]
>     #pragma acc host_data use_device(X)
>     {
>       s = cublasSaxpy(h, N, &alpha, X, 1, d_Y, 1);
>     }
>     [...]
>
> I'm copying Jim, who is the author of this chapter in the documentation
> as well as the libgomp/testsuite/libgomp.oacc-c-c++-common/context-*.c
> test cases, and much of the relevant libgomp code, too, and who should
> please correct me if I'm wrong.  I'll make a note for later, that we
> should translate the libgomp.oacc-c-c++-common/context-*.c test cases to
> Fortran, and also replicate them using the OpenACC host_data construct
> (like in libgomp/testsuite/libgomp.oacc-c-c++-common/host_data-1.c), and
> the same for the documentation you referenced.  (Vikram, please tell if
> you're interested to work on these items.)
>
>
> ..., and now that've written all this, I think we have a show-stopper
> here: as far as I remember, the OpenACC host_data construct is not yet
> supported in the GCC 5 releases, and it's currently broken for Fortran,
> too: <https://gcc.gnu.org/PR70598> (Chung-Lin if working on that).
>
>
> Grüße
>  Thomas



More information about the Fortran mailing list