void BlockManager::lazy_gpu_read_on_device(const Block::BlockPtr& blk) { if (!blk->is_on_gpu() && !blk->is_on_host()) { fail("block allocated neither on host or gpu", current_line()); } else if (!blk->is_on_gpu()) { blk->allocate_gpu_data(); _gpu_host_to_device(blk->get_data(), blk->get_gpu_data(), blk->size()); } else if (blk->is_dirty_on_host()) { _gpu_host_to_device(blk->get_data(), blk->get_gpu_data(), blk->size()); } else if (blk->is_dirty_on_all()) { fail("block dirty on host & gpu !", current_line()); } blk->set_on_gpu(); blk->unset_dirty_on_host(); }
void BlockManager::lazy_gpu_write_on_device(Block::BlockPtr& blk, const BlockId &id, const BlockShape& shape) { if (!blk->is_on_gpu() && !blk->is_on_host()) { block_map_.cached_delete_block(id); // Get rid of block, create a new one blk = create_gpu_block(id, shape); // if (is_scope_extent) { // temp_block_list_stack_.back()->push_back(id); // } } else if (!blk->is_on_gpu()) { blk->allocate_gpu_data(); _gpu_host_to_device(blk->get_data(), blk->get_gpu_data(), blk->size()); } else if (blk->is_dirty_on_host()) { _gpu_host_to_device(blk->get_data(), blk->get_gpu_data(), blk->size()); } else if (blk->is_dirty_on_all()) { fail("block dirty on host & gpu !", current_line()); } blk->set_on_gpu(); blk->set_dirty_on_gpu(); blk->unset_dirty_on_host(); }