New Tools, Programming Models, And System Support For Processing-In-Memory Architectures