New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC] Address space preserving bitcasts #9423

Closed
wants to merge 1 commit into
base: master
from

Conversation

3 participants
@vchuravy
Member

vchuravy commented Dec 20, 2014

@maleadt worked towards supporting the CUDA/PTX backend in llvm in Julia. He presented his work in https://groups.google.com/forum/#!topic/julia-dev/doQUqQabC8A, because he will not be able to spend much time on it in the coming months.

I personally would like to see support for this in Julia and planned to work on something similar for the OpenCL/SPIR backend in llvm.

In order to integrate @maleadt work with upstream Julia I plan to submit PRs for separated concerns so that they can be properly discussed.

First up is address space preserving bitcasts.

@maleadt do you have time to explain shortly the rational behind this?

Cherry-picked from:
6c4fbcc and 855bb43

@maleadt

This comment has been minimized.

Member

maleadt commented Dec 20, 2014

In PTX land pointers live in different address spaces, depending on the type of memory you want to address. This is quote important, because the behaviour of each address space is vastly different (for example, thread-shared memory).

Julia does not care about address spaces, and makes everything live in the default one (0). Worse, the global pointer type objects (jl_pvalue_llvmt etc) are defined as living in addrspace 0. These objects are used when bitcasting jl_value_ts, regardless of the address space of those values. In older LLVM versions (pre 3.5, IIRC) this was silently ignored. Recent versions however croak when the address spaces within a bitcast don't match.

The preserving_bitcast function makes sure that, when casting pointer values, the address space is preserved by first casting the type object to the address space of the value, and then bitcasting the value with the proper type.

Note that this still lacks support for setting the address space of pointers from within Julia, which is a requirement to make this functionality useful. I was thinking of parameterizing the Ptr type to include the address space, but didn't get too far.

@vchuravy vchuravy force-pushed the vchuravy:maleadt_preserving_bitcast branch from f5b4460 to 9c10f3a Jan 18, 2015

@vchuravy vchuravy referenced this pull request Jun 1, 2015

Closed

[RFC/WIP] NVPTX/Cuda backend support in Julia #11516

0 of 2 tasks complete
@Keno

This comment has been minimized.

Member

Keno commented Jun 1, 2015

LGTM after rebase.

@vchuravy vchuravy force-pushed the vchuravy:maleadt_preserving_bitcast branch from 9c10f3a to bd6717f Jun 1, 2015

@vchuravy

This comment has been minimized.

Member

vchuravy commented Jun 1, 2015

rebased

@vchuravy

This comment has been minimized.

Member

vchuravy commented Jun 29, 2016

Superseded by #17193

@vchuravy vchuravy closed this Jun 29, 2016

@vchuravy vchuravy deleted the vchuravy:maleadt_preserving_bitcast branch Jun 29, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment