vector_register_state.cc revision 11534
14104Ssaidi@eecs.umich.edu/* 24104Ssaidi@eecs.umich.edu * Copyright (c) 2015 Advanced Micro Devices, Inc. 34104Ssaidi@eecs.umich.edu * All rights reserved. 44104Ssaidi@eecs.umich.edu * 54104Ssaidi@eecs.umich.edu * For use for simulation and test purposes only 64104Ssaidi@eecs.umich.edu * 74104Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 84104Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are met: 94104Ssaidi@eecs.umich.edu * 104104Ssaidi@eecs.umich.edu * 1. Redistributions of source code must retain the above copyright notice, 114104Ssaidi@eecs.umich.edu * this list of conditions and the following disclaimer. 124104Ssaidi@eecs.umich.edu * 134104Ssaidi@eecs.umich.edu * 2. Redistributions in binary form must reproduce the above copyright notice, 144104Ssaidi@eecs.umich.edu * this list of conditions and the following disclaimer in the documentation 154104Ssaidi@eecs.umich.edu * and/or other materials provided with the distribution. 164104Ssaidi@eecs.umich.edu * 174104Ssaidi@eecs.umich.edu * 3. Neither the name of the copyright holder nor the names of its contributors 184104Ssaidi@eecs.umich.edu * may be used to endorse or promote products derived from this software 194104Ssaidi@eecs.umich.edu * without specific prior written permission. 204104Ssaidi@eecs.umich.edu * 214104Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 224104Ssaidi@eecs.umich.edu * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 234104Ssaidi@eecs.umich.edu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 244104Ssaidi@eecs.umich.edu * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 254104Ssaidi@eecs.umich.edu * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 264104Ssaidi@eecs.umich.edu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 274104Ssaidi@eecs.umich.edu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 284104Ssaidi@eecs.umich.edu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 294104Ssaidi@eecs.umich.edu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 304104Ssaidi@eecs.umich.edu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 314104Ssaidi@eecs.umich.edu * POSSIBILITY OF SUCH DAMAGE. 324104Ssaidi@eecs.umich.edu * 334104Ssaidi@eecs.umich.edu * Author: John Kalamatianos 344104Ssaidi@eecs.umich.edu */ 354104Ssaidi@eecs.umich.edu 364104Ssaidi@eecs.umich.edu#include "gpu-compute/vector_register_state.hh" 374104Ssaidi@eecs.umich.edu 384104Ssaidi@eecs.umich.edu#include <limits> 394104Ssaidi@eecs.umich.edu 408229Snate@binkert.org#include "gpu-compute/compute_unit.hh" 414104Ssaidi@eecs.umich.edu 424762Snate@binkert.orgVecRegisterState::VecRegisterState() : computeUnit(nullptr) 434104Ssaidi@eecs.umich.edu{ 444104Ssaidi@eecs.umich.edu s_reg.clear(); 454104Ssaidi@eecs.umich.edu d_reg.clear(); 464104Ssaidi@eecs.umich.edu} 474104Ssaidi@eecs.umich.edu 484104Ssaidi@eecs.umich.eduvoid 494104Ssaidi@eecs.umich.eduVecRegisterState::setParent(ComputeUnit *_computeUnit) 504104Ssaidi@eecs.umich.edu{ 514104Ssaidi@eecs.umich.edu computeUnit = _computeUnit; 524104Ssaidi@eecs.umich.edu _name = computeUnit->name() + ".VecRegState"; 534104Ssaidi@eecs.umich.edu} 544104Ssaidi@eecs.umich.edu 554104Ssaidi@eecs.umich.eduvoid 564104Ssaidi@eecs.umich.eduVecRegisterState::init(uint32_t _size, uint32_t wf_size) 574104Ssaidi@eecs.umich.edu{ 584104Ssaidi@eecs.umich.edu s_reg.resize(_size); 594104Ssaidi@eecs.umich.edu fatal_if(wf_size > std::numeric_limits<unsigned long long>::digits || 604104Ssaidi@eecs.umich.edu wf_size <= 0, 614104Ssaidi@eecs.umich.edu "WF size is larger than the host can support or is zero"); 624104Ssaidi@eecs.umich.edu fatal_if((wf_size & (wf_size - 1)) != 0, 634104Ssaidi@eecs.umich.edu "Wavefront size should be a power of 2"); 644104Ssaidi@eecs.umich.edu for (int i = 0; i < s_reg.size(); ++i) { 654104Ssaidi@eecs.umich.edu s_reg[i].resize(wf_size, 0); 664104Ssaidi@eecs.umich.edu } 674104Ssaidi@eecs.umich.edu d_reg.resize(_size); 684104Ssaidi@eecs.umich.edu for (int i = 0; i < d_reg.size(); ++i) { 694104Ssaidi@eecs.umich.edu d_reg[i].resize(wf_size, 0); 704104Ssaidi@eecs.umich.edu } 714104Ssaidi@eecs.umich.edu} 724104Ssaidi@eecs.umich.edu