├── LICENSE ├── README.md ├── common ├── header │ ├── cnpy.hpp │ ├── data_types.hpp │ ├── logger.hpp │ └── macros.hpp ├── obj │ ├── cnpy.o │ └── logger.o └── src │ ├── cnpy.cpp │ └── logger.cpp ├── data ├── inputs │ ├── encoder_logits_1.npy │ ├── encoder_logits_10.npy │ ├── encoder_logits_2.npy │ ├── encoder_logits_3.npy │ ├── encoder_logits_4.npy │ ├── encoder_logits_5.npy │ ├── encoder_logits_6.npy │ ├── encoder_logits_7.npy │ ├── encoder_logits_8.npy │ ├── encoder_logits_9.npy │ └── metadata.txt ├── outputs │ ├── encoder_logits_1.npy.txt │ ├── encoder_logits_10.npy.txt │ ├── encoder_logits_2.npy.txt │ ├── encoder_logits_3.npy.txt │ ├── encoder_logits_4.npy.txt │ ├── encoder_logits_5.npy.txt │ ├── encoder_logits_6.npy.txt │ ├── encoder_logits_7.npy.txt │ ├── encoder_logits_8.npy.txt │ └── encoder_logits_9.npy.txt └── params │ ├── pred_joint_wts │ ├── joint_net_dense_1_bias:0.npy │ ├── joint_net_dense_1_bias:0_T.npy │ ├── joint_net_dense_1_kernel:0.npy │ ├── joint_net_dense_1_kernel:0_T.npy │ ├── joint_net_dense_bias:0.npy │ ├── joint_net_dense_bias:0_T.npy │ ├── joint_net_dense_kernel:0.npy │ ├── joint_net_dense_kernel:0_T.npy │ ├── pred_net_embedding_embeddings:0.npy │ ├── pred_net_embedding_embeddings:0_T.npy │ ├── pred_net_lstm_10_bias:0.npy │ ├── pred_net_lstm_10_bias:0_T.npy │ ├── pred_net_lstm_10_kernel:0.npy │ ├── pred_net_lstm_10_kernel:0_T.npy │ ├── pred_net_lstm_11_bias:0.npy │ ├── pred_net_lstm_11_bias:0_T.npy │ ├── pred_net_lstm_11_kernel:0.npy │ └── pred_net_lstm_11_kernel:0_T.npy │ └── vocab_list.txt ├── decoder ├── Makefile ├── decoder ├── header │ ├── decoder.hpp │ ├── hparams.hpp │ ├── jointnet.hpp │ └── prednet.hpp ├── obj │ ├── decoder.o │ ├── jointnet.o │ ├── main.o │ └── prednet.o └── src │ ├── decoder.cu │ ├── jointnet.cu │ ├── main.cu │ └── prednet.cu ├── scripts ├── get_decoder_weights_pytorch.py └── get_decoder_weights_tf2.py └── sys ├── header ├── activation.hpp ├── dense.hpp ├── dlstm.hpp └── embedding_table.hpp ├── obj ├── dense.o ├── dlstm.o └── embedding_table.o └── src ├── dense.cu ├── dlstm.cu └── embedding_table.cu /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [2020] [JANVIJAY SINGH] 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RNN-Transducer Prefix Beam Search 2 | 3 | This repository provides an optimised implementation of prefix beam search for RNN-Tranducer loss function (as described in "[Sequence Transduction with Recurrent Neural Networks](https://arxiv.org/pdf/1211.3711.pdf)" paper). This implementation takes ~100 milliseconds for a speech segment of ~5 seconds and beam size of 10 (beam size of 10 is adequate for production level error rates). 4 | 5 | ## Sample Run 6 | 7 | To execute a sample run of prefix beam search on your machine, execute the following commands: 8 | 9 | 1. Clone this repository. 10 | 11 | ``` 12 | git clone https://github.com/iamjanvijay/rnnt_decoder_cuda.git; 13 | ``` 14 | 15 | 2. Clean the output folder. 16 | 17 | ``` 18 | rm rnnt_decoder_cuda/data/outputs/*; 19 | ``` 20 | 21 | 3. Make the deocder object file. 22 | 23 | ``` 24 | cd rnnt_decoder_cuda/decoder; 25 | make clean; 26 | make; 27 | ``` 28 | 4. Execute the decoder - decoded beams will be saved to data/output folder. 29 | 30 | ``` 31 | CUDA_VISIBLE_DEVICES=0 ./decoder ../data/inputs/metadata.txt 0 9 10 5001; 32 | CUDA_VISIBLE_DEVICES=$GPU_ID$ ./decoder ../data/inputs/metadata.txt $index_of_first_file_to_read_from_metadata$ $index_of_last_file_to read_from_metadata$ $beam_size$ $vocabulary_size_excluding_blank$; 33 | ``` 34 | 35 | ## Contributing 36 | 37 | Contributions are welcomed and greatly appreciated. 38 | -------------------------------------------------------------------------------- /common/header/cnpy.hpp: -------------------------------------------------------------------------------- 1 | 2 | #ifndef LIBCNPY_H_ 3 | #define LIBCNPY_H_ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | namespace cnpy { 19 | 20 | struct NpyArray { 21 | 22 | typedef typename std::vector vec_char; 23 | 24 | NpyArray(const std::vector& _shape, size_t _word_size, bool _fortran_order) : 25 | shape(_shape), word_size(_word_size), fortran_order(_fortran_order) 26 | { 27 | num_vals = 1; 28 | for(size_t i = 0;i < shape.size();i++) num_vals *= shape[i]; 29 | data_holder = std::shared_ptr( 30 | new vec_char(num_vals * word_size)); 31 | } 32 | 33 | NpyArray() : shape(0), word_size(0), fortran_order(0), num_vals(0) { } 34 | 35 | template 36 | T* data() { 37 | return reinterpret_cast(&(*data_holder)[0]); 38 | } 39 | 40 | template 41 | const T* data() const { 42 | return reinterpret_cast(&(*data_holder)[0]); 43 | } 44 | 45 | template 46 | std::vector as_vec() const { 47 | const T* p = data(); 48 | return std::vector(p, p+num_vals); 49 | } 50 | 51 | void merge(const NpyArray& data) 52 | { 53 | // sanity check.. 54 | assert(shape.size() == data.shape.size()); 55 | for(size_t i=1;iinsert(data_holder->end(), data.data_holder->begin(), data.data_holder->end()); 62 | 63 | // modify shape and numVals 64 | num_vals += data.num_vals; 65 | shape[0] += data.shape[0]; 66 | } 67 | 68 | size_t num_bytes() const { 69 | return data_holder->size(); 70 | } 71 | 72 | std::string log(size_t count=10) const 73 | { 74 | std::string logStr = "Shape - "; 75 | for(size_t i=0;i(); 85 | for(int i=0;i data_holder; 95 | std::vector shape; 96 | size_t word_size; 97 | bool fortran_order; 98 | size_t num_vals; 99 | }; 100 | 101 | 102 | char BigEndianTest(); 103 | char map_type(const std::type_info& t); 104 | template std::vector create_npy_header(const std::vector& shape); 105 | void parse_npy_header(FILE* fp,size_t& word_size, std::vector& shape, bool& fortran_order); 106 | void parse_npy_header(unsigned char* buffer,size_t& word_size, std::vector& shape, bool& fortran_order); 107 | NpyArray npy_load(std::string fname); 108 | 109 | template std::vector& operator+=(std::vector& lhs, const T rhs) { 110 | //write in little endian 111 | for(size_t byte = 0; byte < sizeof(T); byte++) { 112 | char val = *((char*)&rhs+byte); 113 | lhs.push_back(val); 114 | } 115 | return lhs; 116 | } 117 | 118 | template<> std::vector& operator+=(std::vector& lhs, const std::string rhs); 119 | template<> std::vector& operator+=(std::vector& lhs, const char* rhs); 120 | 121 | 122 | template void npy_save(std::string fname, const T* data, const std::vector shape, std::string mode = "w") { 123 | FILE* fp = NULL; 124 | std::vector true_data_shape; //if appending, the shape of existing + new data 125 | 126 | if(mode == "a") fp = fopen(fname.c_str(),"r+b"); 127 | 128 | if(fp) { 129 | //file exists. we need to append to it. read the header, modify the array size 130 | size_t word_size; 131 | bool fortran_order; 132 | parse_npy_header(fp,word_size,true_data_shape,fortran_order); 133 | assert(!fortran_order); 134 | 135 | if(word_size != sizeof(T)) { 136 | std::cout<<"libnpy error: "< header = create_npy_header(true_data_shape); 158 | size_t nels = std::accumulate(shape.begin(),shape.end(),1,std::multiplies()); 159 | 160 | fseek(fp,0,SEEK_SET); 161 | fwrite(&header[0],sizeof(char),header.size(),fp); 162 | fseek(fp,0,SEEK_END); 163 | fwrite(data,sizeof(T),nels,fp); 164 | fclose(fp); 165 | } 166 | 167 | template void npy_save(std::string fname, const std::vector data, std::string mode = "w") { 168 | std::vector shape; 169 | shape.push_back(data.size()); 170 | npy_save(fname, &data[0], shape, mode); 171 | } 172 | 173 | 174 | template std::vector create_npy_header(const std::vector& shape) { 175 | 176 | std::vector dict; 177 | dict += "{'descr': '"; 178 | dict += BigEndianTest(); 179 | dict += map_type(typeid(T)); 180 | dict += std::to_string(sizeof(T)); 181 | dict += "', 'fortran_order': False, 'shape': ("; 182 | dict += std::to_string(shape[0]); 183 | for(size_t i = 1;i < shape.size();i++) { 184 | dict += ", "; 185 | dict += std::to_string(shape[i]); 186 | } 187 | if(shape.size() == 1) dict += ","; 188 | dict += "), }"; 189 | //pad with spaces so that preamble+dict is modulo 16 bytes. preamble is 10 bytes. dict needs to end with \n 190 | int remainder = 16 - (10 + dict.size()) % 16; 191 | dict.insert(dict.end(),remainder,' '); 192 | dict.back() = '\n'; 193 | 194 | std::vector header; 195 | header += (char) 0x93; 196 | header += "NUMPY"; 197 | header += (char) 0x01; //major version of numpy format 198 | header += (char) 0x00; //minor version of numpy format 199 | header += (uint16_t) dict.size(); 200 | header.insert(header.end(),dict.begin(),dict.end()); 201 | 202 | return header; 203 | } 204 | } 205 | 206 | #endif 207 | -------------------------------------------------------------------------------- /common/header/data_types.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __data_types_hpp__ 2 | #define __data_types_hpp__ 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | namespace s2t 11 | { 12 | namespace common 13 | { 14 | //typedef boost:numpy parameter; 15 | typedef float float_t; 16 | 17 | template 18 | struct gup_data_type 19 | { 20 | T* ptr; 21 | std::vector shape; 22 | size_t capacity; 23 | 24 | // not copyable; pass using reference only 25 | noCopy(gup_data_type); 26 | 27 | gup_data_type() 28 | : ptr(NULL) 29 | ,capacity(0) 30 | { } 31 | 32 | // This sets the max memory of array 33 | // you can change the shape but not the total size of memory 34 | void init(const std::vector& dims) 35 | { 36 | assert(dims.size() <= 4); 37 | shape = dims; 38 | 39 | // make the shape of lenght 4 for consistency 40 | for(size_t i=shape.size(); i<4;++i) 41 | { 42 | shape.push_back(1); 43 | } 44 | 45 | 46 | capacity = size(); 47 | cudaMalloc(&ptr, capacity*sizeof(T)); 48 | } 49 | 50 | void init(size_t dim1, size_t dim2=1, size_t dim3=1, size_t dim4 = 1) 51 | { 52 | std::vector shape_; 53 | shape_.push_back(dim1); 54 | shape_.push_back(dim2); 55 | shape_.push_back(dim3); 56 | shape_.push_back(dim4); 57 | 58 | init(shape_); 59 | } 60 | 61 | inline void reset(size_t beginIndex = 0) 62 | { 63 | cudaMemset(ptr+beginIndex, 0, (capacity-beginIndex)*sizeof(T)); 64 | } 65 | 66 | inline void copy(const T* src, size_t size) 67 | { 68 | cudaMemcpy(ptr, src, size*sizeof(T), cudaMemcpyHostToDevice); 69 | } 70 | 71 | inline size_t dim(size_t index) const 72 | { 73 | assert(index < shape.size()); 74 | return shape[index]; 75 | } 76 | 77 | size_t size() const 78 | { 79 | size_t numVals = 1; 80 | for(size_t i = 0;i < shape.size();i++) 81 | { 82 | numVals *= shape[i]; 83 | } 84 | 85 | return numVals; 86 | } 87 | 88 | // sets non-zero dimensions 89 | void reshape(size_t dim1, size_t dim2=1, size_t dim3=1, size_t dim4 = 1) 90 | { 91 | shape[0] = dim1; 92 | shape[1] = dim2; 93 | shape[2] = dim3; 94 | shape[3] = dim4; 95 | 96 | assert(size() <= capacity); 97 | } 98 | 99 | // copy gpu data to host and returs a T ptr 100 | // deletion of this T* has to be done by caller 101 | size_t data_at_host(T** local_ptr) const 102 | { 103 | size_t N = shape[0] * shape[1] * shape[2] * shape[3]; 104 | cudaMemcpy(*local_ptr, ptr, N*sizeof(T), cudaMemcpyDeviceToHost); 105 | return N; 106 | } 107 | 108 | std::string log(const std::string& fname) const 109 | { 110 | std::string logStr = "shape [" + std::to_string(shape[0]) + ", " 111 | + std::to_string(shape[1]) + ", " 112 | + std::to_string(shape[2]) + ", " 113 | + std::to_string(shape[3]) + "]\n"; 114 | 115 | size_t N = shape[0] * shape[1] * shape[2] * shape[3]; 116 | T* h_f = new T[N]; 117 | cudaMemcpy(h_f, ptr, N*sizeof(T), cudaMemcpyDeviceToHost); // what if this fails... 118 | std::vector tempShape; 119 | for(int i=0;i 1) 122 | { 123 | tempShape.push_back(shape[i]); 124 | } 125 | } 126 | 127 | cnpy::npy_save(fname, h_f, tempShape); 128 | delete[] h_f; 129 | 130 | return logStr; 131 | } 132 | 133 | std::string log(size_t rowFrom, size_t rowTo =0) const 134 | { 135 | std::string logStr = "shape [" + std::to_string(shape[0]) + ", " 136 | + std::to_string(shape[1]) + ", " 137 | + std::to_string(shape[2]) + ", " 138 | + std::to_string(shape[3]) + "]\n"; 139 | 140 | if(rowTo == 0) 141 | { 142 | // go till the end.. 143 | rowTo = rowFrom; 144 | } 145 | 146 | size_t totalRows = rowTo - rowFrom + 1; 147 | 148 | if(totalRows > 0) 149 | { 150 | size_t dataPerRow = shape[1]*shape[2]*shape[3]; 151 | size_t N = totalRows * dataPerRow; 152 | T* h_f = new T[N]; 153 | T* ptrBegin = ptr + rowFrom*dataPerRow; 154 | cudaMemcpy(h_f, ptrBegin, N*sizeof(T), cudaMemcpyDeviceToHost); // what if this fails... 155 | for(size_t i=0;i gpu_float_array; 190 | //typedef gup_data_type<__constant__ float_t> const_gpu_float_array; 191 | typedef gup_data_type const_gpu_float_array; 192 | typedef gup_data_type gpu_bool_array; 193 | } 194 | } 195 | 196 | #endif 197 | 198 | -------------------------------------------------------------------------------- /common/header/logger.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __LOGGER_HPP__ 2 | #define __LOGGER_HPP__ 3 | 4 | #pragma once 5 | 6 | /* 7 | This providea an inteface for logging primitive variables, objects etc into json format. 8 | TBD:: make it asynchronous and flush all logs into file on kill signal 9 | **/ 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #ifdef DEBUG 16 | #define log_d(name, val) s2t::common::log(name, val) 17 | #define log_d_i(msg) s2t::common::log("info", msg) 18 | #else 19 | #define log_d(name, val) void() 20 | #define log_d_i(msg) void() 21 | #endif 22 | 23 | #define log_e(name, val) s2t::common::log(name, val) 24 | #define log_i(msg) s2t::common::log("info", msg) 25 | 26 | namespace s2t 27 | { 28 | namespace common 29 | { 30 | template 31 | void log(const std::string& name, const T& value) 32 | { 33 | std::ostream out(std::cout.rdbuf()); 34 | out< 38 | void log>(const std::string& name, const std::vector& obj); 39 | } 40 | } 41 | 42 | #endif -------------------------------------------------------------------------------- /common/header/macros.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __MACROS_HPP__ 2 | #define __MACROS_HPP__ 3 | 4 | #include 5 | 6 | #pragma once 7 | 8 | #define noCopy(class_name) class_name(const class_name&) = delete;\ 9 | class_name& operator=(const class_name&) = delete 10 | 11 | 12 | #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) 13 | 14 | #define checkCUDNN(expression) \ 15 | { \ 16 | cudnnStatus_t status = (expression); \ 17 | if (status != CUDNN_STATUS_SUCCESS) { \ 18 | std::cerr << "Error on file : line " \ 19 | << __FILE__ << ": " \ 20 | << __LINE__ << ": " \ 21 | << cudnnGetErrorString(status) << std::endl; \ 22 | std::exit(EXIT_FAILURE); \ 23 | } \ 24 | } 25 | 26 | #define checkCUDAERROR(expression) \ 27 | { \ 28 | cudaError_t status = (expression); \ 29 | if (status != cudaSuccess) { \ 30 | std::cerr << "Error on file : line " \ 31 | << __FILE__ << ": " \ 32 | << __LINE__ << ": " \ 33 | << cudaGetErrorString(status) << std::endl; \ 34 | std::exit(EXIT_FAILURE); \ 35 | } \ 36 | } 37 | 38 | #define checkCUBLAS(expression) \ 39 | { \ 40 | cublasStatus_t status = (expression); \ 41 | if (status != CUBLAS_STATUS_SUCCESS) { \ 42 | std::cerr << "Error on file : line " \ 43 | << __FILE__ << ": " \ 44 | << __LINE__ << ": " \ 45 | << status << std::endl; \ 46 | std::exit(EXIT_FAILURE); \ 47 | } \ 48 | } 49 | 50 | #define checkCURAND(expression) \ 51 | { \ 52 | curandStatus_t status = (expression); \ 53 | if (status != CURAND_STATUS_SUCCESS) { \ 54 | std::cerr << "Error on file : line " \ 55 | << __FILE__ << ": " \ 56 | << __LINE__ << ": " \ 57 | << status << std::endl; \ 58 | std::exit(EXIT_FAILURE); \ 59 | } \ 60 | } 61 | 62 | #define checkOPUS(expression) \ 63 | { \ 64 | int status = (expression); \ 65 | if (status != OPE_OK) { \ 66 | std::cerr << "Error on file : line " \ 67 | << __FILE__ << ": " \ 68 | << __LINE__ << ": " \ 69 | << ope_strerror(status) << std::endl; \ 70 | std::exit(EXIT_FAILURE); \ 71 | } \ 72 | } 73 | 74 | 75 | #endif 76 | -------------------------------------------------------------------------------- /common/obj/cnpy.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/common/obj/cnpy.o -------------------------------------------------------------------------------- /common/obj/logger.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/common/obj/logger.o -------------------------------------------------------------------------------- /common/src/cnpy.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | char cnpy::BigEndianTest() { 13 | int x = 1; 14 | return (((char *)&x)[0]) ? '<' : '>'; 15 | } 16 | 17 | char cnpy::map_type(const std::type_info& t) 18 | { 19 | if(t == typeid(float) ) return 'f'; 20 | if(t == typeid(double) ) return 'f'; 21 | if(t == typeid(long double) ) return 'f'; 22 | 23 | if(t == typeid(int) ) return 'i'; 24 | if(t == typeid(char) ) return 'i'; 25 | if(t == typeid(short) ) return 'i'; 26 | if(t == typeid(long) ) return 'i'; 27 | if(t == typeid(long long) ) return 'i'; 28 | 29 | if(t == typeid(unsigned char) ) return 'u'; 30 | if(t == typeid(unsigned short) ) return 'u'; 31 | if(t == typeid(unsigned long) ) return 'u'; 32 | if(t == typeid(unsigned long long) ) return 'u'; 33 | if(t == typeid(unsigned int) ) return 'u'; 34 | 35 | if(t == typeid(bool) ) return 'b'; 36 | 37 | if(t == typeid(std::complex) ) return 'c'; 38 | if(t == typeid(std::complex) ) return 'c'; 39 | if(t == typeid(std::complex) ) return 'c'; 40 | 41 | else return '?'; 42 | } 43 | 44 | template<> std::vector& cnpy::operator+=(std::vector& lhs, const std::string rhs) { 45 | lhs.insert(lhs.end(),rhs.begin(),rhs.end()); 46 | return lhs; 47 | } 48 | 49 | template<> std::vector& cnpy::operator+=(std::vector& lhs, const char* rhs) { 50 | //write in little endian 51 | size_t len = strlen(rhs); 52 | lhs.reserve(len); 53 | for(size_t byte = 0; byte < len; byte++) { 54 | lhs.push_back(rhs[byte]); 55 | } 56 | return lhs; 57 | } 58 | 59 | void cnpy::parse_npy_header(unsigned char* buffer,size_t& word_size, std::vector& shape, bool& fortran_order) { 60 | //std::string magic_string(buffer,6); 61 | uint8_t major_version = *reinterpret_cast(buffer+6); 62 | uint8_t minor_version = *reinterpret_cast(buffer+7); 63 | uint16_t header_len = *reinterpret_cast(buffer+8); 64 | std::string header(reinterpret_cast(buffer+9),header_len); 65 | 66 | size_t loc1, loc2; 67 | 68 | //fortran order 69 | loc1 = header.find("fortran_order")+16; 70 | fortran_order = (header.substr(loc1,4) == "True" ? true : false); 71 | 72 | //shape 73 | loc1 = header.find("("); 74 | loc2 = header.find(")"); 75 | 76 | std::regex num_regex("[0-9][0-9]*"); 77 | std::smatch sm; 78 | shape.clear(); 79 | 80 | std::string str_shape = header.substr(loc1+1,loc2-loc1-1); 81 | while(std::regex_search(str_shape, sm, num_regex)) { 82 | shape.push_back(std::stoi(sm[0].str())); 83 | str_shape = sm.suffix().str(); 84 | } 85 | 86 | //endian, word size, data type 87 | //byte order code | stands for not applicable. 88 | //not sure when this applies except for byte array 89 | loc1 = header.find("descr")+9; 90 | bool littleEndian = (header[loc1] == '<' || header[loc1] == '|' ? true : false); 91 | assert(littleEndian); 92 | 93 | //char type = header[loc1+1]; 94 | //assert(type == map_type(T)); 95 | 96 | std::string str_ws = header.substr(loc1+2); 97 | loc2 = str_ws.find("'"); 98 | word_size = atoi(str_ws.substr(0,loc2).c_str()); 99 | } 100 | 101 | void cnpy::parse_npy_header(FILE* fp, size_t& word_size, std::vector& shape, bool& fortran_order) { 102 | char buffer[256]; 103 | size_t res = fread(buffer,sizeof(char),11,fp); 104 | if(res != 11) 105 | throw std::runtime_error("parse_npy_header: failed fread"); 106 | std::string header = fgets(buffer,256,fp); 107 | assert(header[header.size()-1] == '\n'); 108 | 109 | size_t loc1, loc2; 110 | 111 | //fortran order 112 | loc1 = header.find("fortran_order"); 113 | if (loc1 == std::string::npos) 114 | throw std::runtime_error("parse_npy_header: failed to find header keyword: 'fortran_order'"); 115 | loc1 += 16; 116 | fortran_order = (header.substr(loc1,4) == "True" ? true : false); 117 | 118 | //shape 119 | loc1 = header.find("("); 120 | loc2 = header.find(")"); 121 | if (loc1 == std::string::npos || loc2 == std::string::npos) 122 | throw std::runtime_error("parse_npy_header: failed to find header keyword: '(' or ')'"); 123 | 124 | std::regex num_regex("[0-9][0-9]*"); 125 | std::smatch sm; 126 | shape.clear(); 127 | 128 | std::string str_shape = header.substr(loc1+1,loc2-loc1-1); 129 | while(std::regex_search(str_shape, sm, num_regex)) { 130 | shape.push_back(std::stoi(sm[0].str())); 131 | str_shape = sm.suffix().str(); 132 | } 133 | 134 | //endian, word size, data type 135 | //byte order code | stands for not applicable. 136 | //not sure when this applies except for byte array 137 | loc1 = header.find("descr"); 138 | if (loc1 == std::string::npos) 139 | throw std::runtime_error("parse_npy_header: failed to find header keyword: 'descr'"); 140 | loc1 += 9; 141 | bool littleEndian = (header[loc1] == '<' || header[loc1] == '|' ? true : false); 142 | assert(littleEndian); 143 | 144 | //char type = header[loc1+1]; 145 | //assert(type == map_type(T)); 146 | 147 | std::string str_ws = header.substr(loc1+2); 148 | loc2 = str_ws.find("'"); 149 | word_size = atoi(str_ws.substr(0,loc2).c_str()); 150 | } 151 | 152 | cnpy::NpyArray load_the_npy_file(FILE* fp) { 153 | std::vector shape; 154 | size_t word_size; 155 | bool fortran_order; 156 | cnpy::parse_npy_header(fp,word_size,shape,fortran_order); 157 | 158 | cnpy::NpyArray arr(shape, word_size, fortran_order); 159 | size_t nread = fread(arr.data(),1,arr.num_bytes(),fp); 160 | if(nread != arr.num_bytes()) 161 | throw std::runtime_error("load_the_npy_file: failed fread"); 162 | return arr; 163 | } 164 | 165 | cnpy::NpyArray cnpy::npy_load(std::string fname) { 166 | 167 | FILE* fp = fopen(fname.c_str(), "rb"); 168 | 169 | if(!fp) throw std::runtime_error("npy_load: Unable to open file "+fname); 170 | 171 | NpyArray arr = load_the_npy_file(fp); 172 | 173 | fclose(fp); 174 | return arr; 175 | } 176 | 177 | 178 | 179 | -------------------------------------------------------------------------------- /common/src/logger.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace s2t::common; 4 | 5 | // change it to json file later.. 6 | std::ostream out(std::cout.rdbuf()); 7 | 8 | template<> 9 | void log>(const std::string& name, const std::vector& obj) 10 | { 11 | std::string valString=""; 12 | // collect comma separated values 13 | for(size_t i=0;i 2 | ्स 3 | टू 4 | द 5 | के 6 | का 7 | आई 8 | यू 9 | ए 10 | है 11 | ा 12 | ी 13 | र 14 | एंड 15 | में 16 | ऑफ 17 | एस 18 | िंग 19 | इन 20 | टी 21 | न 22 | अ 23 | फॉर 24 | वाला 25 | स 26 | की 27 | ल 28 | वन 29 | को 30 | मोबाइल 31 | इट 32 | ही 33 | दैट 34 | से 35 | ्ड 36 | वी 37 | म 38 | ाई 39 | माई 40 | सी 41 | एम 42 | ज 43 | इज 44 | हंड्रेड 45 | एक 46 | फाइव 47 | कवर 48 | ो 49 | मी 50 | वाले 51 | ड 52 | नो 53 | सौ 54 | े 55 | क 56 | दो 57 | कर 58 | भी 59 | थ्री 60 | क्या 61 | हैव 62 | लिए 63 | दिस 64 | कार्ट 65 | हैं 66 | फोन 67 | बे 68 | नहीं 69 | और 70 | ट 71 | ऑन 72 | योर 73 | आर 74 | फोर 75 | वाली 76 | ऐड 77 | शर्ट 78 | डी 79 | दे 80 | कैन 81 | रियलमी 82 | कि 83 | ली 84 | ग्राम 85 | जी 86 | तो 87 | ऑल 88 | ं 89 | वे 90 | मुझे 91 | बैक 92 | सो 93 | हो 94 | ना 95 | गो 96 | बट 97 | नॉट 98 | कम 99 | एट 100 | री 101 | प्राइस 102 | गेट 103 | वाज 104 | न्यू 105 | रेडमी 106 | प 107 | सेट 108 | ़ 109 | डू 110 | विद 111 | सैमसंग 112 | प्रो 113 | पर 114 | सेवन 115 | सिक्स 116 | ेड 117 | व 118 | वीवो 119 | बाय 120 | थे 121 | ब 122 | अप 123 | एल 124 | व्हाट 125 | गर्ल्स 126 | मशीन 127 | ने 128 | ऐट 129 | ट्वेंटी 130 | हर 131 | जस्ट 132 | न 133 | वान्ट 134 | नाइन 135 | इफ 136 | शो 137 | जींस 138 | लेडीज 139 | फ्रॉम 140 | लाइक 141 | मेन 142 | लो 143 | साड़ी 144 | शी 145 | हियर 146 | डॉन 147 | अंडर 148 | ू 149 | शूज 150 | आउट 151 | त 152 | जो 153 | चाहिए 154 | कलर 155 | री 156 | विल 157 | वॉच 158 | कार 159 | पैंट 160 | एलएल 161 | बेबी 162 | थाउजेंड 163 | आ 164 | देयर 165 | दिखाओ 166 | विथ 167 | साल 168 | हिम 169 | जे 170 | उस 171 | बी 172 | इंग 173 | श 174 | ु 175 | टेन 176 | इस 177 | टॉप 178 | ड्रेस 179 | ऐज 180 | आप 181 | करो 182 | था 183 | ईट 184 | ेस 185 | ग 186 | ंग 187 | बच्चों 188 | ि 189 | मैं 190 | अबाउट 191 | हजार 192 | होम 193 | मेरे 194 | कुछ 195 | लाइट 196 | एक्स 197 | फिफ्टी 198 | फ 199 | नाऊ 200 | वुड 201 | हेयर 202 | थर्टी 203 | नोट 204 | कोई 205 | वांट 206 | स 207 | व 208 | करने 209 | ऑयल 210 | ों 211 | क्रीम 212 | बॉक्स 213 | हिज 214 | ब्लूटूथ 215 | िक 216 | डे 217 | वेल 218 | गुड 219 | स्ट 220 | ंस 221 | वूमेन 222 | सम 223 | ता 224 | ले 225 | हाउ 226 | दिखाइए 227 | ् 228 | च 229 | प 230 | ब 231 | यह 232 | ब्लैक 233 | ह 234 | ेज 235 | ने 236 | दिखा 237 | तक 238 | 239 | वर 240 | रा 241 | सर 242 | साइकिल 243 | टाइम 244 | बॉयज 245 | र्स 246 | पाउडर 247 | थिंक 248 | इयर्स 249 | करना 250 | बैग 251 | ऑफर 252 | पे 253 | िन 254 | द 255 | व्हाइट 256 | यर 257 | सूट 258 | ऐन 259 | रहा 260 | िया 261 | राइट 262 | ्ट 263 | कैमरा 264 | पी 265 | ऑर 266 | नी 267 | ओके 268 | पाउच 269 | जा 270 | ला 271 | व्हेन 272 | चप्पल 273 | आवर 274 | प्लस 275 | थ 276 | बास्केट 277 | तीन 278 | हम 279 | बात 280 | नीड 281 | बाई 282 | फुल 283 | िस 284 | टेक 285 | सी 286 | एमएल 287 | कंपनी 288 | ंट 289 | र 290 | म 291 | लेट 292 | ल 293 | ए 294 | हद 295 | चार 296 | वो 297 | किड्स 298 | डीड 299 | ेन 300 | हैंड 301 | देम 302 | गिव 303 | टच 304 | दी 305 | रेड 306 | ्ज 307 | घड़ी 308 | खरीदन 309 | सैंडल 310 | ओप्पो 311 | बीन 312 | बैटरी 313 | रिमोट 314 | बाइक 315 | वह 316 | बेस्ट 317 | फोर्टी 318 | जीरो 319 | ंड 320 | साथ 321 | ना 322 | क 323 | रहे 324 | ग 325 | सा 326 | मोर 327 | टेल 328 | ओ 329 | य 330 | ेट 331 | ग्लास 332 | बार 333 | रेट 334 | ई 335 | एन 336 | मॉडल 337 | लुक 338 | पाँच 339 | गर्ल 340 | टी 341 | िट 342 | नंबर 343 | फेस 344 | फ्रॉक 345 | मैन 346 | ह 347 | एनी 348 | देन 349 | ये 350 | दाम 351 | ेअर 352 | िल 353 | अपने 354 | जूता 355 | डिजाइन 356 | कर 357 | कॉटन 358 | गया 359 | बिग 360 | रिमूव 361 | बहुत 362 | बताओ 363 | ओनली 364 | व्हाई 365 | हैज 366 | रुपये 367 | मेक 368 | मसाला 369 | कंट्रोल 370 | का 371 | कुड 372 | सोप 373 | लव 374 | ्व 375 | हूँ 376 | ज़ 377 | डबल 378 | किट 379 | ओपो 380 | रि 381 | बॉडी 382 | पावर 383 | छोटे 384 | सब 385 | या 386 | या 387 | नाइट 388 | ै 389 | चॉकलेट 390 | हु 391 | हॉट 392 | वाइ 393 | पचास 394 | बुक 395 | ेंट 396 | वा 397 | ओवर 398 | अच्छा 399 | जैकेट 400 | सबसे 401 | अब 402 | वर्क 403 | ेशन 404 | कॉल 405 | मो 406 | बच्चे 407 | गॉन्न 408 | हाफ 409 | सिर्फ 410 | वि 411 | वेरी 412 | हमें 413 | किया 414 | होल 415 | स्मार्ट 416 | ब्लू 417 | फ्री 418 | ते 419 | रूपीज 420 | बॉय 421 | ेंस 422 | पैक 423 | हू 424 | लेना 425 | इ 426 | पा 427 | गॉट 428 | च 429 | जी 430 | एफ 431 | हे 432 | मिल्क 433 | हटा 434 | डी 435 | प्र 436 | सेड 437 | फ 438 | ओ 439 | छोटा 440 | हाँ 441 | ेस्ट 442 | बॉटल 443 | राइस 444 | त 445 | लिटिल 446 | साइज 447 | ्र 448 | लड़की 449 | लैपटॉप 450 | कहा 451 | थी 452 | जेंट्स 453 | डाउन 454 | इलेवन 455 | काम 456 | दस 457 | किसी 458 | स्प 459 | जिओ 460 | लेकिन 461 | सस्ता 462 | मेंट 463 | वाट 464 | गन 465 | स्टैंड 466 | श 467 | ती 468 | मे 469 | रही 470 | पेन 471 | शन 472 | मिल 473 | लहंगा 474 | ईयर 475 | ट 476 | फ्रेश 477 | ओह 478 | स्मॉल 479 | कुर्ती 480 | गोल्ड 481 | लाइफ 482 | टॉक 483 | जेल 484 | ्य 485 | कपड़ा 486 | हाउस 487 | गाय 488 | जीटी 489 | एयर 490 | डिडन 491 | मिक्स 492 | ओल्ड 493 | कितन 494 | ला 495 | ज 496 | बेड 497 | मन 498 | ेल 499 | बा 500 | बिकॉज 501 | दाल 502 | पॉइंट 503 | अन 504 | नेवर 505 | मिस्टर 506 | जीबी 507 | मेड 508 | घर 509 | ्यू 510 | बस 511 | मच 512 | एवरी 513 | प्लीज 514 | िश 515 | प्लेन 516 | वर 517 | टीवी 518 | कॉम्बो 519 | हेलो 520 | स्पीकर 521 | डॉल 522 | हमको 523 | एमआई 524 | वी 525 | ग्रीन 526 | आज 527 | व्हेयर 528 | ख 529 | ित 530 | गा 531 | सिक्सटी 532 | केजी 533 | लीटर 534 | गौट 535 | ले 536 | ट्वेल्व 537 | आफ्टर 538 | ल्स 539 | प्लास्टिक 540 | पी 541 | मीन 542 | लांग 543 | लोग 544 | जब 545 | फर्स्ट 546 | चार्जर 547 | देना 548 | पास 549 | ॉ 550 | पार्टी 551 | टू 552 | आईफोन 553 | रियल 554 | समथिंग 555 | ध 556 | गैलेक्सी 557 | पीस 558 | वाटर 559 | गाड़ी 560 | रियली 561 | को 562 | फिर 563 | मा 564 | बी 565 | हुआ 566 | थॉट 567 | ब्रा 568 | स्कूल 569 | ें 570 | ई 571 | ंक 572 | इन्क्लूड 573 | र्ट 574 | लॉन्ग 575 | वेट 576 | वांटेड 577 | शुड 578 | के 579 | बारह 580 | इंच 581 | ंच 582 | की 583 | पुट 584 | अदर 585 | सकता 586 | सन 587 | इ 588 | रे 589 | िव 590 | किचन 591 | बैंक 592 | फिफ्टीन 593 | फ्लेवर 594 | ोन 595 | केयर 596 | िटी 597 | डि 598 | बाद 599 | बाल 600 | एच 601 | विश 602 | मेकअप 603 | टेबल 604 | टॉय 605 | स्टे 606 | भाव 607 | कपड़े 608 | डाल 609 | इवन 610 | स्टील 611 | इनफिनिक्स 612 | ब्रांड 613 | स्क्रीन 614 | इज़ 615 | गाउन 616 | वे 617 | ोल 618 | स्क 619 | रैम 620 | वीडियो 621 | ोर 622 | फाइंड 623 | ण 624 | ियन 625 | कह 626 | गेम 627 | यस 628 | चीज 629 | सुपर 630 | याह 631 | लीव 632 | फ्रूट 633 | टेक्नो 634 | मुझक 635 | ठीक 636 | अच्छी 637 | नेम 638 | दिया 639 | हेडफोन 640 | फैंसी 641 | फ्लोर 642 | मिस 643 | हाथ 644 | नाम 645 | ऑर्गेनिक 646 | देख 647 | ्म 648 | अभी 649 | सकते 650 | तरह 651 | बतान 652 | लेड 653 | होता 654 | ड़ 655 | ल्ड 656 | क्र 657 | कोट 658 | रे 659 | फोटो 660 | हेल्प 661 | नाइंटी 662 | स्ट 663 | उसे 664 | सु 665 | नोकिया 666 | चेक 667 | सोनी 668 | दीज 669 | पांच 670 | वाश 671 | एस 672 | क्ल 673 | पो 674 | बोल 675 | सस्ते 676 | हाई 677 | करें 678 | हेड 679 | रूप 680 | लड़कियो 681 | यूज 682 | थिंग 683 | स्टिल 684 | लॉ 685 | दिखाएं 686 | ाइज 687 | मस्ट 688 | मु 689 | बच्चा 690 | ीज 691 | कट 692 | िस्ट 693 | कल 694 | फैशन 695 | मा 696 | र्न 697 | पहले 698 | तुम 699 | दैन 700 | बैट 701 | पर्स 702 | ख 703 | क्यों 704 | बोर्ड 705 | कॉस्ट 706 | रन 707 | मोटर 708 | ्न 709 | प्ले 710 | रूम 711 | ्री 712 | स्प्रे 713 | चेन 714 | ौ 715 | िज 716 | कप 717 | पीपल 718 | बता 719 | लास्ट 720 | कौन 721 | स्व 722 | ेक्स 723 | बिफोर 724 | आपको 725 | थ 726 | ॉल 727 | व्हिच 728 | करते 729 | सात 730 | आठ 731 | छ 732 | ली 733 | िड 734 | मोबाइल्स 735 | सॉ 736 | मी 737 | डिस्काउंट 738 | सर्च 739 | मैंने 740 | ऐसा 741 | शू 742 | ेबल 743 | कार्ड 744 | बीस 745 | रो 746 | प्लेस 747 | कितने 748 | छह 749 | बा 750 | स्टार्ट 751 | ्क 752 | सेल 753 | सि 754 | कुर्ता 755 | कीप 756 | सेवेंटी 757 | दिखान 758 | ्ली 759 | उ 760 | ाय 761 | पुलिस 762 | मदर 763 | अवे 764 | हाय 765 | फ्ल 766 | लगा 767 | शॉर्ट 768 | मनी 769 | साउंड 770 | सामान 771 | प्योर 772 | क्स 773 | क्ष 774 | स्टाइल 775 | ड्रिंक 776 | सच 777 | ड 778 | बढ़िया 779 | इयरफोन 780 | सॉफ्ट 781 | स्किन 782 | अगर 783 | बॉल 784 | ॉन 785 | एवर 786 | प्लाजो 787 | जाता 788 | पेपर 789 | दिन 790 | ्या 791 | अगेन 792 | चेंज 793 | बार्बी 794 | से 795 | ीन 796 | िए 797 | डा 798 | स्टार 799 | फ्रिज 800 | थिंग्स 801 | ओन 802 | फैन 803 | अपनी 804 | बारे 805 | ्प 806 | इं 807 | सीड 808 | वॉश 809 | दोज 810 | आटा 811 | रख 812 | नि 813 | राउंड 814 | एट्टी 815 | लोगों 816 | बेल्ट 817 | पता 818 | वाल 819 | क्लीन 820 | लगता 821 | मेबी 822 | मार 823 | भाई 824 | ग्रेट 825 | ाइ 826 | ऑनर 827 | वा 828 | हैप्पी 829 | ऑर्डर 830 | फिल्म 831 | एप्पल 832 | साइड 833 | भ 834 | िम 835 | बड़ा 836 | रोज 837 | लिक्विड 838 | वि 839 | कैप 840 | मिनी 841 | जूस 842 | बिलो 843 | पर 844 | ियर 845 | रिंग 846 | नेट 847 | जूते 848 | बि 849 | दर 850 | ्फ 851 | बेटर 852 | ैक 853 | होगा 854 | कै 855 | समझ 856 | मै 857 | टॉयज 858 | ्ल 859 | सेम 860 | ंत 861 | होने 862 | बनाने 863 | जन 864 | कभी 865 | बन 866 | फील 867 | पतंजलि 868 | हील 869 | फायर 870 | थिंग 871 | प्रोडक्ट 872 | वियर 873 | स्क 874 | व्हाय 875 | सेल्फ 876 | अह 877 | डॉक्टर 878 | सं 879 | मैम 880 | टोल 881 | हार्ड 882 | सेकंड 883 | डॉग 884 | ेश 885 | लेदर 886 | केक 887 | र्म 888 | स्टीकर 889 | अच्छे 890 | वॉज 891 | इंडिया 892 | स्टिक 893 | ्यु 894 | मास्क 895 | ाउट 896 | उसके 897 | जर 898 | मैक्स 899 | सस्ती 900 | मेनी 901 | बैग्स 902 | जूती 903 | फे 904 | वर्ल्ड 905 | लिप 906 | रेंज 907 | घी 908 | स्वीट 909 | म्प 910 | डज 911 | शर्ट्स 912 | ्ब 913 | दि 914 | स्टाइलिश 915 | आल 916 | कि 917 | छोटी 918 | लेफ्ट 919 | ज्यादा 920 | पैड 921 | ेक्ट 922 | सेंट 923 | पैर 924 | थ्रू 925 | मिनट 926 | तेल 927 | कैसे 928 | क्वालिटी 929 | केस 930 | दूर 931 | ुल 932 | बर 933 | समय 934 | मैन 935 | लि 936 | गॉड 937 | सिल्क 938 | ड्रोन 939 | रो 940 | क्लास 941 | नाइस 942 | बिस्कुट 943 | फूड 944 | लाईक 945 | बल 946 | स्पार्क 947 | सिंपल 948 | गई 949 | टुडे 950 | चल 951 | एनीथिंग 952 | हिमालय 953 | मूव 954 | ियों 955 | गिफ्ट 956 | मेरी 957 | ब्र 958 | आस्क 959 | ध 960 | दा 961 | टेस्ट 962 | मेरा 963 | ाइड 964 | बोट 965 | दीजिये 966 | पन्द्रह 967 | नट 968 | व्हाइ 969 | बटर 970 | मो 971 | काइंड 972 | त्र 973 | ड़ी 974 | टो 975 | आइटम 976 | स्कर्ट 977 | अरे 978 | निकाल 979 | किस 980 | कीपैड 981 | वॉट 982 | ्रो 983 | ंद 984 | में 985 | बीइंग 986 | उ 987 | टा 988 | अर 989 | परफ्यूम 990 | लॉट 991 | फ्लिपकार्ट 992 | बूट 993 | फ्रेंड 994 | जाने 995 | लगाने 996 | नाइटी 997 | ाल 998 | बर्थडे 999 | पिक 1000 | आलमंड 1001 | मेंस 1002 | रेडी 1003 | लेस 1004 | ैन 1005 | ओरिजिनल 1006 | शुगर 1007 | पानी 1008 | ेंड 1009 | फादर 1010 | र् 1011 | जिम 1012 | रा 1013 | पैंट्स 1014 | नौ 1015 | ेक 1016 | टाइप 1017 | सिंगल 1018 | ुर 1019 | बैड 1020 | स्ट्र 1021 | गा 1022 | मई 1023 | रखने 1024 | ग्र 1025 | टैबलेट 1026 | कॉफी 1027 | ण्ड 1028 | प्रीमियम 1029 | ड्राई 1030 | िक्स 1031 | जा 1032 | ्टर 1033 | पा 1034 | उन्होंने 1035 | िकल 1036 | ठ 1037 | लाइन 1038 | नो 1039 | िका 1040 | एड 1041 | फुल 1042 | लो 1043 | ंब 1044 | स्प 1045 | करिये 1046 | फाइन 1047 | डे 1048 | कुकर 1049 | पहनने 1050 | जेन 1051 | टूथपेस्ट 1052 | आर 1053 | जान 1054 | ँ 1055 | टर्न 1056 | मंथ 1057 | सन 1058 | लिपस्टिक 1059 | चीप 1060 | वन 1061 | बैंड 1062 | दें 1063 | िफ 1064 | ियो 1065 | डिस्प्ले 1066 | ोज 1067 | ियस 1068 | लिस्ट 1069 | सेक्स 1070 | फैमिली 1071 | गर 1072 | नथ 1073 | लोअर 1074 | सॉर 1075 | किल 1076 | माँ 1077 | क्वांटिटी 1078 | भ 1079 | सीन 1080 | प्लेट 1081 | पेंसिल 1082 | डालो 1083 | नया 1084 | पबजी 1085 | पिंक 1086 | रॉ 1087 | नी 1088 | हुए 1089 | हा 1090 | जु 1091 | समवन 1092 | ट्रैक 1093 | िप 1094 | पास्ता 1095 | ्रा 1096 | एण्ड 1097 | फ़ 1098 | फ्लिप 1099 | मोस्ट 1100 | ाने 1101 | डाई 1102 | ब्लाउज 1103 | प्र 1104 | ्तर 1105 | बिट 1106 | फ्यू 1107 | स्टॉप 1108 | हार 1109 | डिस 1110 | कूल 1111 | र्ज 1112 | नेक्स्ट 1113 | वार 1114 | स् 1115 | लिव 1116 | लोशन 1117 | हनी 1118 | ऑ 1119 | करता 1120 | मॉर्निंग 1121 | ऑलवेज 1122 | आल्स 1123 | डायपर 1124 | थैंक 1125 | गैस 1126 | डार्क 1127 | डेल 1128 | राम 1129 | पीपुल 1130 | नेचुरल 1131 | मैट 1132 | हीरो 1133 | र्ड 1134 | हेल 1135 | गार्ड 1136 | कंप्यूटर 1137 | क्रिकेट 1138 | भेज 1139 | क्क 1140 | गए 1141 | स्पोर्ट 1142 | ोस 1143 | आर्मी 1144 | घ 1145 | सै 1146 | खा 1147 | पसंद 1148 | थियेटर 1149 | फाउंड 1150 | रेडी 1151 | ्टा 1152 | चिली 1153 | सेव 1154 | निंग 1155 | बे 1156 | बाम 1157 | नाइन्टिन 1158 | किंग 1159 | वॉल 1160 | दुपट्टा 1161 | धा 1162 | मे 1163 | उन्हें 1164 | सिटी 1165 | म्ब 1166 | सभी 1167 | इसन 1168 | ओपन 1169 | स्लिपर 1170 | िग 1171 | थर्टीन 1172 | वीट 1173 | चा 1174 | टायर 1175 | यू 1176 | गु 1177 | टॉप्स 1178 | ब्रश 1179 | बिल 1180 | इलेक्ट्रिक 1181 | मान 1182 | पार्ट 1183 | नदर 1184 | वाचस् 1185 | शादी 1186 | वेंट 1187 | भा 1188 | केबल 1189 | शैंपू 1190 | टर 1191 | माइक 1192 | अपना 1193 | ब्रेक 1194 | केम 1195 | ेर 1196 | बेडशीट 1197 | स्पाइसी 1198 | ियम 1199 | एंटी 1200 | चार्ज 1201 | सुन 1202 | क्लीनर 1203 | ाइल 1204 | डोजन 1205 | गोट 1206 | ब्ल 1207 | गो 1208 | स्टर 1209 | फिलिप्स 1210 | डन 1211 | य 1212 | ब्रेसलेट 1213 | बना 1214 | क्र 1215 | एक्स्ट्रा 1216 | ॉन्ग 1217 | जरा 1218 | राज 1219 | जॉब 1220 | फोर्टीन 1221 | एटीन 1222 | उन 1223 | उनके 1224 | ाना 1225 | शा 1226 | डेड 1227 | ्च 1228 | ति 1229 | सोच 1230 | शा 1231 | ऑफिस 1232 | ट्र 1233 | ट्राई 1234 | कार 1235 | सोफा 1236 | रीड 1237 | बल्ब 1238 | बीच 1239 | लेनोवो 1240 | दी 1241 | ष 1242 | फिंगर 1243 | ग्रे 1244 | किड 1245 | र्क 1246 | ाइन 1247 | चश्मा 1248 | ट्स 1249 | रह 1250 | हार्ट 1251 | टा 1252 | फिश 1253 | आपके 1254 | ब्रिंग 1255 | हमारे 1256 | पेंट 1257 | लेस 1258 | स्पेशल 1259 | मिक्सच 1260 | डैड 1261 | दोनों 1262 | चौ 1263 | चेयर 1264 | वीक 1265 | ोट 1266 | हा 1267 | इंड 1268 | नेचर 1269 | फक 1270 | होती 1271 | ऑरेंज 1272 | पु 1273 | रोस्ट 1274 | इंस्टेंट 1275 | बटन 1276 | स्टेट 1277 | तब 1278 | कन 1279 | मीट 1280 | हिट 1281 | चिप्स 1282 | एक्टिव 1283 | ऐसे 1284 | टेडी 1285 | गोल्डन 1286 | लिया 1287 | वाशिंग 1288 | लैक्मे 1289 | मर 1290 | त्त 1291 | बिलीव 1292 | टु 1293 | लेटर 1294 | मेन 1295 | जैसे 1296 | चिल्ड्रन 1297 | नेक 1298 | डै 1299 | सीम 1300 | ्रेस 1301 | कं 1302 | घ 1303 | सीरियल 1304 | विन 1305 | मेल 1306 | लड़का 1307 | आया 1308 | पूरा 1309 | सेफ 1310 | ड्राइव 1311 | बताइए 1312 | पेट 1313 | क्लियर 1314 | कान 1315 | जाए 1316 | ाइट 1317 | रु 1318 | नेस 1319 | फुटबॉल 1320 | डील 1321 | क्लोज 1322 | कमिंग 1323 | पार्क 1324 | ेटर 1325 | ेटेड 1326 | लग 1327 | फ्लावर 1328 | ऊपर 1329 | हैड 1330 | अल 1331 | एक्ट 1332 | ब्रदर 1333 | ब्राउन 1334 | माइंड 1335 | स्टोन 1336 | बजाज 1337 | लावा 1338 | हर्बल 1339 | इसके 1340 | बेयर 1341 | लड़कों 1342 | ट्रेन 1343 | इक 1344 | इम 1345 | जैक 1346 | एक्चुअल 1347 | मेट 1348 | इनफ 1349 | होप 1350 | ्थ 1351 | डेट 1352 | नूडल 1353 | खा 1354 | सारीज 1355 | डा 1356 | वाइफ 1357 | सेंड 1358 | इयर 1359 | ्त 1360 | ्टी 1361 | कब 1362 | लाल 1363 | तीस 1364 | ब्र 1365 | पै 1366 | श्री 1367 | रोल 1368 | आइ 1369 | स्त 1370 | बड़े 1371 | डिटर्जेंट 1372 | बु 1373 | ची 1374 | जय 1375 | लै 1376 | स्पोर्ट्स 1377 | लेडी 1378 | प्प 1379 | ग्यारह 1380 | एल 1381 | स्ल 1382 | स्योर 1383 | लर 1384 | प्ल 1385 | ट्रे 1386 | स्लीप 1387 | लॉक 1388 | प्रि 1389 | कॉ 1390 | ड्रेसेज 1391 | पंप 1392 | ऊ 1393 | हि 1394 | बर् 1395 | लेमन 1396 | रोबोट 1397 | ैग 1398 | कुकीज 1399 | सिस्टम 1400 | मार्क 1401 | फास्ट 1402 | इंडियन 1403 | फूल 1404 | दिल 1405 | प्यार 1406 | प्रेस 1407 | लेटेस्ट 1408 | वै 1409 | मॉम 1410 | सारे 1411 | फ्रंट 1412 | झ 1413 | पिकल 1414 | डिस्क 1415 | ्ग 1416 | फिट 1417 | कोकोनट 1418 | ता 1419 | वुमन 1420 | निकल 1421 | ऐंड 1422 | कु 1423 | ओर 1424 | सिक्सटीन 1425 | फी 1426 | यंग 1427 | लूज 1428 | ड्र 1429 | माइक्रोमैक्स 1430 | गियर 1431 | चिकन 1432 | स्वेटर 1433 | ऐ 1434 | हिंदी 1435 | मिक्सर 1436 | फार 1437 | मोटो 1438 | सलवार 1439 | जीन्स 1440 | ग्र 1441 | अल्ट्रा 1442 | चाइल्ड 1443 | रेगुलर 1444 | एडिडास 1445 | मिलेगी 1446 | ब्यूटी 1447 | इंड 1448 | देश 1449 | थीएटर 1450 | डिश 1451 | आयरन 1452 | फ्रेशनर 1453 | आय 1454 | पीनट 1455 | आपका 1456 | प्रिंट 1457 | वायर 1458 | प्ट 1459 | रिमेम्बर 1460 | वाल 1461 | कॉल्ड 1462 | चॉको 1463 | एमटीआर 1464 | लेंस 1465 | नाइकी 1466 | ट्र 1467 | सोल 1468 | दार 1469 | मूवी 1470 | िविया 1471 | ड़ा 1472 | श्योर 1473 | हूं 1474 | डिजाइनर 1475 | बत्तीस 1476 | कॉज 1477 | अंदर 1478 | हेलीकॉप्टर 1479 | डो 1480 | जिस 1481 | मैजिक 1482 | छ 1483 | एलस् 1484 | डेली 1485 | मिलेगा 1486 | फिल 1487 | प्रॉब्लम 1488 | बंद 1489 | ेम 1490 | डेड 1491 | सही 1492 | ्ह 1493 | ट्राइंग 1494 | गोदरेज 1495 | रू 1496 | टे 1497 | आइस 1498 | ॉक 1499 | वेयर 1500 | अमेरिकन 1501 | उसका 1502 | फि 1503 | कॉन्डम 1504 | गार्डन 1505 | फेयर 1506 | क्लासिक 1507 | वसन 1508 | जि 1509 | रै 1510 | लिए 1511 | डोर 1512 | साल्ट 1513 | ट्रक 1514 | होल्ड 1515 | नेकलेस 1516 | रॉक 1517 | लिसन 1518 | मान 1519 | अलग 1520 | लडन 1521 | िय 1522 | बैठ 1523 | लुकिंग 1524 | बाहर 1525 | सीट 1526 | ेंगे 1527 | म्यूजिक 1528 | यही 1529 | चार्जिंग 1530 | आर्ट 1531 | सिट 1532 | इंटेक्स 1533 | पीछे 1534 | गल 1535 | प्लान 1536 | टेस्टी 1537 | बोथ 1538 | रिफाइं 1539 | ग्ल 1540 | कई 1541 | ंप 1542 | ग्लो 1543 | ्वा 1544 | सिम 1545 | फे 1546 | टाटा 1547 | कहाँ 1548 | वेनटीन 1549 | वायरलेस 1550 | ऑनलाइन 1551 | टेम्पर 1552 | सिल्वर 1553 | आगे 1554 | ऑलिव 1555 | नोज 1556 | डेयरी 1557 | टन 1558 | रेन 1559 | प्ल 1560 | मि 1561 | लाइव 1562 | पेंड 1563 | ्मा 1564 | सकती 1565 | सू 1566 | वो 1567 | गी 1568 | लाइट 1569 | वॉटर 1570 | टोटल 1571 | नेल 1572 | ड्रीम 1573 | कैट 1574 | ंगा 1575 | प्रोटीन 1576 | स्टफ 1577 | रोड 1578 | पो 1579 | शी 1580 | सिलेक्ट 1581 | ्ले 1582 | ट्रू 1583 | सॉर्ट 1584 | चूड़ी 1585 | गार्लिक 1586 | टो 1587 | फाइट 1588 | कटिंग 1589 | मिलेट 1590 | गे 1591 | डियोडरेंट 1592 | कही 1593 | स्पीक 1594 | बिना 1595 | रेस 1596 | बिस्किट 1597 | बै 1598 | फ्रेंड्स 1599 | ोक 1600 | आत 1601 | रिटर्न 1602 | प्री 1603 | मतलब 1604 | िर 1605 | फ्र 1606 | कूलर 1607 | वॉक 1608 | ्रे 1609 | मॉरो 1610 | इच 1611 | हाल 1612 | खुद 1613 | असूस 1614 | शंस 1615 | इल 1616 | यूनिट 1617 | जाएगा 1618 | सून 1619 | लिख 1620 | पुर 1621 | चाय 1622 | कनेक्ट 1623 | लेहंगा 1624 | इनवर्टर 1625 | बो 1626 | ब्यूटीफुल 1627 | स्टोरी 1628 | ब्लड 1629 | माईट 1630 | टेड 1631 | पूरी 1632 | पि 1633 | डॉ 1634 | राखी 1635 | पर्सन 1636 | ट्रिमर 1637 | डेज 1638 | डॉलर 1639 | मैन्गो 1640 | नै 1641 | यु 1642 | ून 1643 | क्शन 1644 | वोल्ट 1645 | हेवेन 1646 | फेल 1647 | आपकी 1648 | याद 1649 | हुई 1650 | फॉल 1651 | भारत 1652 | कोर्स 1653 | बर्तन 1654 | चाहते 1655 | मास्टर 1656 | चना 1657 | जाती 1658 | लिंग 1659 | फै 1660 | कंडीशनर 1661 | टुगेदर 1662 | पॉप 1663 | येट 1664 | पंजाबी 1665 | ्रि 1666 | साबुन 1667 | स्ट्र 1668 | गेस 1669 | प्रिटी 1670 | टे 1671 | टै 1672 | बडी 1673 | न्टिल 1674 | भर 1675 | पेस्ट 1676 | अप 1677 | ्लो 1678 | निक 1679 | आने 1680 | चोली 1681 | हेलमेट 1682 | बड़ी 1683 | हेडफोन्स 1684 | शाइन 1685 | पैकेट 1686 | थिएटर 1687 | ्चर 1688 | सॉलटेड 1689 | बो 1690 | रिपोर्ट 1691 | सीक्रेट 1692 | ियां 1693 | मन 1694 | कैंप 1695 | अंडरस्टैंड 1696 | मेमोरी 1697 | ाँ 1698 | हर्ड 1699 | आम 1700 | ग्राइंडर 1701 | प्स 1702 | बेल 1703 | ंगी 1704 | कपल 1705 | बेस 1706 | ेगा 1707 | यार 1708 | शुरू 1709 | यर्स 1710 | हेल्दी 1711 | चड्डी 1712 | डीप 1713 | रिफिल 1714 | चला 1715 | जाना 1716 | लोटस 1717 | किंग 1718 | स् 1719 | वन्स 1720 | मैरी 1721 | चैन 1722 | वेनिला 1723 | ैट 1724 | कॉर्न 1725 | शॉट 1726 | डाइ 1727 | प्रोब 1728 | टीम 1729 | बुलेट 1730 | इन 1731 | डिनर 1732 | सारी 1733 | ची 1734 | अस्स 1735 | हर 1736 | पे 1737 | सॉस 1738 | ल्ट 1739 | टॉयलेट 1740 | आदमी 1741 | आईटेल 1742 | यहाँ 1743 | हार्स 1744 | फ़ 1745 | ानी 1746 | ब्रांडेड 1747 | ओट्ज 1748 | जगह 1749 | ति 1750 | किल्ड 1751 | पोस्ट 1752 | फा 1753 | सि 1754 | टुनाइट 1755 | वाच 1756 | इंफीनिक्स 1757 | राउंड 1758 | ाइस 1759 | स्क्रब 1760 | रेस्ट 1761 | जाते 1762 | टेप 1763 | नाईट 1764 | खेलने 1765 | व्हील 1766 | यो 1767 | फेशियल 1768 | येलो 1769 | रीजन 1770 | नॉन 1771 | जेड 1772 | फन 1773 | मेकिंग 1774 | रंग 1775 | पूजा 1776 | िबल 1777 | माइसेल्फ 1778 | मॉ 1779 | स्ट्रेट 1780 | सेज 1781 | सिं 1782 | डब्लू 1783 | चू 1784 | गंजी 1785 | सिंह 1786 | मंत्रा 1787 | विंटर 1788 | प्रिंटेड 1789 | फर 1790 | लेट 1791 | गॉन 1792 | पिक्चर 1793 | वेस्ट 1794 | स्प्रेड 1795 | उसने 1796 | रियल 1797 | बिजनेस 1798 | बीट 1799 | ग्लू 1800 | नही 1801 | वाना 1802 | ऑफ़ 1803 | टॉर्च 1804 | अमूल 1805 | खिलौन 1806 | ब्ली 1807 | ट्यूब 1808 | बेट 1809 | पैन 1810 | चौबीस 1811 | कैश 1812 | ूल 1813 | साइ 1814 | बिहा 1815 | कीमत 1816 | माउथ 1817 | सिस्टर 1818 | रेट 1819 | गन 1820 | चि 1821 | कॉम 1822 | प्रोटेक्ट 1823 | ड्रा 1824 | फुट 1825 | रॉयल 1826 | इंग्लिश 1827 | सैनिटाइजर 1828 | लैंड 1829 | कल 1830 | लड़के 1831 | हाइ 1832 | हैंडल 1833 | ार्ड 1834 | प्रेशर 1835 | बार्स 1836 | सिंग 1837 | डैमेज 1838 | ग्रैंड 1839 | चा 1840 | हार 1841 | ्रायड 1842 | पच्चीस 1843 | चौंसठ 1844 | कल्न 1845 | काऊ 1846 | खिलौने 1847 | गै 1848 | दुनिया 1849 | कैडबरी 1850 | क्ट 1851 | डेथ 1852 | मह 1853 | ंडा 1854 | चे 1855 | ेक्शन 1856 | टूक 1857 | उनकी 1858 | हाइड 1859 | सोलर 1860 | गम 1861 | बताया 1862 | गलत 1863 | कैंडी 1864 | जार 1865 | फैक्ट 1866 | स्लीव 1867 | क्ले 1868 | ॉर 1869 | मेट 1870 | सरकार 1871 | यहां 1872 | प्रे 1873 | बुल 1874 | हे 1875 | ओरिगो 1876 | रिक 1877 | सिल 1878 | डव 1879 | प्यूमा 1880 | रेज 1881 | ट्री 1882 | एवरीवन 1883 | लीड 1884 | वार 1885 | कटर 1886 | गोल 1887 | किलो 1888 | टोमैटो 1889 | न्द 1890 | न्ना 1891 | डांस 1892 | इतना 1893 | गे 1894 | इट्स 1895 | ्द 1896 | क्यू 1897 | एनीवन 1898 | राईट 1899 | ईयर्स 1900 | ब्लेजर 1901 | आपने 1902 | माइन 1903 | चे 1904 | माइक्रो 1905 | ेंडर 1906 | सम 1907 | चीफ 1908 | एच 1909 | बिकम 1910 | पॉल 1911 | बादाम 1912 | उम 1913 | टेन 1914 | यास 1915 | ब्रोक 1916 | ब्रॉ 1917 | होते 1918 | ्योर 1919 | अलोन 1920 | शि 1921 | फीट 1922 | रात 1923 | लगेट 1924 | पारले 1925 | भा 1926 | कोशिश 1927 | फिंगरप्रिंट 1928 | विल 1929 | गेव 1930 | खाना 1931 | नए 1932 | देखा 1933 | लेग 1934 | ग्लव 1935 | साफ 1936 | स्मार्टफोन 1937 | जरूरत 1938 | पिन 1939 | शेविंग 1940 | पॉपकार् 1941 | हेल्थ 1942 | मैटर 1943 | वेडिंग 1944 | बनियान 1945 | कारण 1946 | मोटरसाइकिल 1947 | डाबर 1948 | कन् 1949 | वर्किंग 1950 | सुपरमार्ट 1951 | वर्ड 1952 | नीचे 1953 | टॉ 1954 | लुक्स 1955 | कैच 1956 | फ्लेक्स 1957 | तैयार 1958 | वही 1959 | ुट 1960 | ्श 1961 | स्टडी 1962 | सिलाई 1963 | सर्व 1964 | पेप्पर 1965 | स्ट्रीट 1966 | बर 1967 | चु 1968 | ीस 1969 | चाहता 1970 | गेंस्ट 1971 | टेक 1972 | थ्रो 1973 | लि 1974 | पल 1975 | फी 1976 | दूध 1977 | अव 1978 | पॉकेट 1979 | बाइ 1980 | कंट्री 1981 | चिल्ड्रेन 1982 | नि 1983 | जै 1984 | पोर्ट 1985 | पैसे 1986 | एग 1987 | ढ 1988 | डाय 1989 | स्टेप 1990 | बोर 1991 | शैम्पू 1992 | तू 1993 | मैक 1994 | ब्रिटानि 1995 | डिफरेंट 1996 | ईजी 1997 | ्यूट 1998 | लू 1999 | गले 2000 | बॉस 2001 | होंडा 2002 | पोको 2003 | एचपी 2004 | क्ल 2005 | स्ड 2006 | इसे 2007 | जरूर 2008 | ूँ 2009 | कोर्ट 2010 | मूंग 2011 | अवेलेबल 2012 | पॉ 2013 | िये 2014 | प्राइम 2015 | दोस्त 2016 | स्टेड 2017 | हेडसेट 2018 | पूछ 2019 | पढ 2020 | क्रॉप 2021 | मेक्स 2022 | ुअल 2023 | कैप्ट 2024 | डो 2025 | ्ता 2026 | जेंटल 2027 | अंडरवियर 2028 | टेल 2029 | राज 2030 | कैर 2031 | लिखा 2032 | ट्राउजर 2033 | सेंस 2034 | रबर 2035 | क्व 2036 | ेवर 2037 | फ्र 2038 | शायद 2039 | बंदूक 2040 | सर्विस 2041 | वल 2042 | टूल्स 2043 | क्वायट 2044 | देने 2045 | पुल 2046 | काउंट 2047 | रस 2048 | सिक 2049 | ड्रिल 2050 | विंडो 2051 | एवर 2052 | कोल्ड 2053 | चालीस 2054 | सोना 2055 | देखने 2056 | जॉन 2057 | हीटर 2058 | पाल 2059 | चो 2060 | टोन 2061 | आस्क्ड 2062 | सोल्ट 2063 | मत 2064 | कॉलेज 2065 | ग्रो 2066 | मिन 2067 | रहता 2068 | स्केटिंग 2069 | फिनिश 2070 | हह 2071 | िशन 2072 | इडली 2073 | जीवन 2074 | ट्रीट 2075 | हर्ट 2076 | दूसरे 2077 | द्ध 2078 | िच 2079 | बदल 2080 | कम्प 2081 | ब्ल 2082 | हॉर्लिक 2083 | इलेक्ट्रॉनिक 2084 | दुल्हन 2085 | फॉरगेट 2086 | सोने 2087 | इयररिंग 2088 | ंथ 2089 | शैल 2090 | ॉट 2091 | वर्ड 2092 | वेल 2093 | जिन 2094 | जू 2095 | एलजी 2096 | बाथरूम 2097 | डोंट 2098 | एक्सएल 2099 | मिस्ट 2100 | ब्लो 2101 | चौदह 2102 | न्ट 2103 | समबडी 2104 | खाने 2105 | मिला 2106 | रिच 2107 | अर्थ 2108 | आर्म 2109 | टैब 2110 | सीजनिंग 2111 | जल 2112 | सेक्सी 2113 | यल 2114 | र्थ 2115 | टेकिंग 2116 | ग्राउंड 2117 | क्लॉक 2118 | पनीर 2119 | मैगी 2120 | फोन्स 2121 | मोमेंट 2122 | पिज्जा 2123 | नस 2124 | ऑटो 2125 | शिट 2126 | ओलिव 2127 | टेक्स 2128 | ड्रॉप 2129 | व्हॉट 2130 | सामने 2131 | फ्लैट 2132 | खरीद 2133 | टूथब्रश 2134 | थैंक्स 2135 | चांस 2136 | कम 2137 | वाइ 2138 | मैच 2139 | वाइल्ड 2140 | ॉय 2141 | ट्रांस 2142 | टोपी 2143 | माउस 2144 | बच्ची 2145 | एलो 2146 | लेजर 2147 | फिट 2148 | एबल 2149 | लाय 2150 | इससे 2151 | शॉप 2152 | मिंट 2153 | लाइन 2154 | गरम 2155 | वाटरप्रूफ 2156 | प्लांट 2157 | वेजिटेबल 2158 | वेज 2159 | नेस्ल 2160 | फ्रोज 2161 | फोन 2162 | महा 2163 | लगे 2164 | फॉर्म 2165 | तेरह 2166 | कैरम 2167 | स्कूटी 2168 | काफी 2169 | मिक्स्ड 2170 | फैट 2171 | सेय 2172 | डायमंड 2173 | लाइटर 2174 | सादा 2175 | डैम 2176 | ोप 2177 | अठारह 2178 | ऐसी 2179 | फ्रा 2180 | वाई 2181 | लीस्ट 2182 | मर्डर 2183 | फाई 2184 | कुकी 2185 | शिप 2186 | इंटर 2187 | ढ़ 2188 | ृत 2189 | ुक 2190 | मोटोरोला 2191 | कहते 2192 | फ्रेम 2193 | लॉकेट 2194 | हैपन 2195 | आइडिया 2196 | पचहत 2197 | लंच 2198 | डर 2199 | इनसाइड 2200 | यदि 2201 | था 2202 | ब्राइट 2203 | रण 2204 | पंखा 2205 | रेंस 2206 | फॉलो 2207 | गला 2208 | काजल 2209 | ैंड 2210 | लोफर 2211 | टिंग 2212 | स्ट्रॉबेरी 2213 | परफेक्ट 2214 | मोस्ट 2215 | जियो 2216 | रिया 2217 | डियर 2218 | कुमार 2219 | साठ 2220 | पायल 2221 | ही 2222 | हाऊ 2223 | जिसमे 2224 | ओम 2225 | रखो 2226 | स्लीपर 2227 | ट्रैक्टर 2228 | स्टेशन 2229 | चाइना 2230 | ैर 2231 | टिल 2232 | होना 2233 | शेयर 2234 | बिटवीन 2235 | सर्फ 2236 | ॉस 2237 | नीम 2238 | क्लोथ्स 2239 | इम्प 2240 | ओं 2241 | मीटर 2242 | झ 2243 | वेलकम 2244 | डॉटर 2245 | बर्न 2246 | सूती 2247 | क्लॉथ 2248 | ड्यू 2249 | स्काई 2250 | रिकॉर्ड 2251 | इट 2252 | ृ 2253 | बार 2254 | टाउन 2255 | कम्प्लीट 2256 | बजे 2257 | इसका 2258 | ब्लॉक 2259 | शट 2260 | कुक 2261 | मू 2262 | वरी 2263 | सेस 2264 | हैंड्स 2265 | एमआरपी 2266 | भगवान 2267 | दान 2268 | पल 2269 | ब्लेंड 2270 | लेगिंग 2271 | मॉन्टे 2272 | जाएगी 2273 | एनीवे 2274 | बेल 2275 | शूट 2276 | स्टोर 2277 | िएट 2278 | ग्रुप 2279 | पापड़ 2280 | बह 2281 | फर 2282 | आह 2283 | पड 2284 | शियल 2285 | फ्रेड 2286 | क्विक 2287 | मीडियम 2288 | सोलह 2289 | डिजिटल 2290 | पॉट 2291 | कैजुअल 2292 | िनी 2293 | स्केट 2294 | स्प्लिट 2295 | ्यूज 2296 | आई 2297 | फ्री 2298 | सके 2299 | राइड 2300 | वैसे 2301 | ्ला 2302 | क्रैक 2303 | एम्पलीफा 2304 | पंच 2305 | लेकर 2306 | ाया 2307 | जन 2308 | एफ 2309 | ाइक 2310 | ब्ब 2311 | चिप 2312 | केट 2313 | दूसरा 2314 | खेल 2315 | ेंट्स 2316 | बोर्ड 2317 | वान 2318 | वूफर 2319 | पैनासोनिक 2320 | सपोज 2321 | ूट 2322 | ेन्ट 2323 | जिंजर 2324 | इन्क्रीज 2325 | कीबोर्ड 2326 | कोको 2327 | काला 2328 | िंक 2329 | जल्दी 2330 | इंस्ट 2331 | कुकिंग 2332 | अलमारी 2333 | जाम 2334 | शावर 2335 | उनका 2336 | पजामा 2337 | मैक्सी 2338 | चक 2339 | कैल 2340 | लाख 2341 | प्रा 2342 | हॉ 2343 | सर 2344 | सनफ्लॉवर 2345 | ब्रू 2346 | ्प्ल 2347 | मैड 2348 | चांदी 2349 | फिल्टर 2350 | लंदन 2351 | पार 2352 | लेने 2353 | फ्ल 2354 | एक्स 2355 | कॉन् 2356 | ठंड 2357 | ग्रेन 2358 | साड़िया 2359 | टैंक 2360 | टौल 2361 | टिन 2362 | साइड 2363 | डिक 2364 | ब्स 2365 | स्पीड 2366 | इंडक्शन 2367 | फार्म 2368 | गुलाब 2369 | इंट 2370 | मार 2371 | ट्रिपल 2372 | पेंटिंग 2373 | ्यूम 2374 | वेटिंग 2375 | हेट 2376 | एक्शन 2377 | लार्ज 2378 | सुन्दर 2379 | अधिक 2380 | वाक 2381 | ड्राइड 2382 | डेट्स 2383 | बल 2384 | क्व 2385 | लिन 2386 | फिगर 2387 | मना 2388 | ईस्ट 2389 | प्रिंसेस 2390 | हिल 2391 | मूर्ति 2392 | हेड 2393 | चलने 2394 | वाइप 2395 | बाजा 2396 | पैनल 2397 | रखना 2398 | एक्सेल 2399 | पार्ले 2400 | टिक 2401 | जीरा 2402 | वॉलपेपर 2403 | ाइज्ड 2404 | आशीर्वाद 2405 | क्यूब 2406 | आती 2407 | सारा 2408 | एडवांस्ड 2409 | कॉलर 2410 | वैन 2411 | लैंड 2412 | ह्यूमन 2413 | ्टन 2414 | नॉर्मल 2415 | बिट 2416 | आएग 2417 | पीज 2418 | नजर 2419 | स्पीकर्स 2420 | कंप 2421 | वूमे 2422 | ट्रस्ट 2423 | एग्स 2424 | सीरम 2425 | बायो 2426 | वंडर 2427 | करती 2428 | वजह 2429 | देखन 2430 | भू 2431 | माला 2432 | पूल 2433 | वहां 2434 | ंदा 2435 | फैब्रिक 2436 | मस्त 2437 | मंगलसूत्र 2438 | िली 2439 | टाई 2440 | डेढ़ 2441 | लक 2442 | डिलाइट 2443 | सैम 2444 | मैसेज 2445 | क्रेजी 2446 | एक्सेसरीज 2447 | प्लेइंग 2448 | लवली 2449 | चि 2450 | ट्राइड 2451 | सेंडल 2452 | फेसवॉश 2453 | खोल 2454 | साडी 2455 | क्रो 2456 | चावल 2457 | सनस्क्रीन 2458 | निक 2459 | दीवार 2460 | मेस 2461 | केशन 2462 | ढूँढो 2463 | गोज 2464 | बायोटिक 2465 | एनर्जी 2466 | ्रिक 2467 | कोर 2468 | महीने 2469 | पिलो 2470 | ओनियन 2471 | चटनी 2472 | आए 2473 | सेंटर 2474 | च्छ 2475 | मेटल 2476 | फाल 2477 | म्बर 2478 | एन 2479 | फॉग 2480 | बेक 2481 | सह 2482 | क्रेम 2483 | ध्यान 2484 | नॉर 2485 | फिक्स 2486 | इंटरेस्ट 2487 | परसेंट 2488 | फ्रेग 2489 | दे 2490 | बर्ड 2491 | ग्न 2492 | ैल 2493 | फाउंडेशन 2494 | पेड 2495 | ज्वेलरी 2496 | शे 2497 | स्पेस 2498 | नार्जो 2499 | मॉस्किटो 2500 | वू 2501 | ंडी 2502 | वॉलेट 2503 | मसूर 2504 | िनो 2505 | डंगरी 2506 | दवा 2507 | किलर 2508 | सक 2509 | ईएम 2510 | मॉप 2511 | अंकल 2512 | होगी 2513 | बाथ 2514 | टाइट 2515 | तरफ 2516 | पट्टी 2517 | मल्टि 2518 | समटाइम 2519 | ॉक्स 2520 | मिड 2521 | डर 2522 | मैनेज 2523 | गार्नि 2524 | साइकल 2525 | ढ 2526 | पटियाला 2527 | बॉ 2528 | विक 2529 | गेमिंग 2530 | सांग 2531 | प्ला 2532 | पेज 2533 | ्वे 2534 | फोम 2535 | र्ग 2536 | राय 2537 | सफेद 2538 | इसी 2539 | बेन 2540 | आउटसाइड 2541 | जानकारी 2542 | पर्दा 2543 | राजमा 2544 | अटैक 2545 | खुश 2546 | एक्सेप्ट 2547 | वक्त 2548 | दिनों 2549 | चै 2550 | चुनरी 2551 | नॉट 2552 | लिमिटेड 2553 | स्मूथ 2554 | सैंडविच 2555 | ेटिव 2556 | वेरा 2557 | पन 2558 | प्रिंटर 2559 | सीलिंग 2560 | बडी 2561 | कलेक्शन 2562 | पल्सर 2563 | टेकन 2564 | बाबा 2565 | गेम्स 2566 | ऐला 2567 | बैंगल 2568 | स्मोक 2569 | ठ 2570 | हवा 2571 | साइंस 2572 | क्वेश्चन 2573 | मैडम 2574 | क्रिस्टल 2575 | लर्न 2576 | डिफ 2577 | पाइप 2578 | ेरी 2579 | डील्स 2580 | डिलीवरी 2581 | एक्सपेक्ट 2582 | टन 2583 | पोल 2584 | काटने 2585 | निया 2586 | आंसर 2587 | ज्वैलरी 2588 | मिक्सी 2589 | पाइन 2590 | नील 2591 | फीलिंग 2592 | रिसीव 2593 | फ्रीज 2594 | शेप 2595 | रेल 2596 | ट्रबल 2597 | ऐस 2598 | देर 2599 | प्रोसेस 2600 | ुआ 2601 | मेकर 2602 | स्ट्रांग 2603 | थर्ड 2604 | फाइनल 2605 | हमारी 2606 | ये 2607 | रिलीज 2608 | क्लब 2609 | नून 2610 | ट्व 2611 | मगर 2612 | विन 2613 | फा 2614 | सर्टेन 2615 | प्लेयर 2616 | लु 2617 | शीट 2618 | सनफी 2619 | हार्वेस्ट 2620 | मैरिड 2621 | असली 2622 | डियो 2623 | समती 2624 | लेडीस 2625 | एवेन्यू 2626 | फॉर्च्यून 2627 | आखिर 2628 | एवरीबडी 2629 | त् 2630 | सेफ्टी 2631 | जेबीएल 2632 | मांग 2633 | उठा 2634 | हमेशा 2635 | करके 2636 | लोड 2637 | आइड 2638 | देते 2639 | बिल्डिंग 2640 | व्यक्ति 2641 | जनरल 2642 | मीटर 2643 | शोल्डर 2644 | अमेरिका 2645 | ऑवर 2646 | इंचेस 2647 | ्टेड 2648 | ल्ला 2649 | ष्ट 2650 | सैंड 2651 | मिरर 2652 | रैक 2653 | एगो 2654 | उससे 2655 | ड़े 2656 | कॉट 2657 | प्रो 2658 | एंट 2659 | फ्ट 2660 | रेडियो 2661 | कढ़ाई 2662 | विजिट 2663 | एग्जैक्ट 2664 | मिल्टन 2665 | टेर 2666 | बनारसी 2667 | छे 2668 | ऑप 2669 | जैम 2670 | ेटिंग 2671 | ्शन 2672 | चलाने 2673 | फॉर्मल 2674 | पड़ 2675 | ्का 2676 | माइट 2677 | देता 2678 | नई 2679 | नेट 2680 | च्वाइ 2681 | मार्केट 2682 | टर्मरिक 2683 | सुबह 2684 | स्प्लेंडर 2685 | बर्ड 2686 | पापा 2687 | स्टै 2688 | प्रेस्टीज 2689 | बढ 2690 | मेंस 2691 | फाइल 2692 | फ़ॉर 2693 | हॉस्पिटल 2694 | आइद 2695 | लाइम 2696 | डिलीवर 2697 | बिलिटी 2698 | रवा 2699 | दवाई 2700 | दिख 2701 | लिये 2702 | सत्रह 2703 | ीज़ 2704 | एड्रेस 2705 | ड्यूर 2706 | न्यूज 2707 | लिविंग 2708 | डिटेल 2709 | जैसा 2710 | मीटिंग 2711 | जग 2712 | ाउन 2713 | उषा 2714 | हैलो 2715 | ्मी 2716 | पेंटी 2717 | नकली 2718 | अल् 2719 | होटल 2720 | पिग 2721 | एंगे 2722 | गेट्स 2723 | जानते 2724 | कोलोन 2725 | परिवार 2726 | ैम 2727 | ट्टी 2728 | क्लींजर 2729 | टिकट 2730 | स्नैक 2731 | डेनिम 2732 | पतल 2733 | फेयरने 2734 | जुअल 2735 | फ़ोन 2736 | होल्डर 2737 | हैवी 2738 | कार्बन 2739 | रोम 2740 | क्रिज 2741 | कोड 2742 | टॉम 2743 | सॉक्स 2744 | पिता 2745 | मेजर 2746 | द्द 2747 | जवाब 2748 | ेंज 2749 | नरिश 2750 | कॉपी 2751 | शेरवानी 2752 | पार्ट्स 2753 | आयुर्वेद 2754 | सोया 2755 | मिन 2756 | स्विच 2757 | कॉप 2758 | स्टूडेंट 2759 | फोर्स 2760 | साइट 2761 | हॉर्न 2762 | बच 2763 | अनु 2764 | करवा 2765 | स्ता 2766 | कॉलिंग 2767 | ट्रुथ 2768 | फील्ड 2769 | सेल्फ 2770 | मटेरियल 2771 | मूसली 2772 | रिव 2773 | शूज़ 2774 | पौ 2775 | किन 2776 | शिफॉन 2777 | कार्स 2778 | बातें 2779 | मारने 2780 | मॉन्स्टर 2781 | टिक 2782 | भैया 2783 | ड्रायर 2784 | एनिमल 2785 | कू 2786 | कमर 2787 | आस 2788 | बढ़ा 2789 | जॉकी 2790 | स्लिम 2791 | डॉट 2792 | पर्सनल 2793 | कमांड 2794 | फाइबर 2795 | दिल्ली 2796 | साउथ 2797 | हायर 2798 | ऐप 2799 | प्रति 2800 | बंध 2801 | बज 2802 | मिसि 2803 | रेंजर 2804 | गुड़िया 2805 | स्म 2806 | सीरियस 2807 | क्राफ्ट 2808 | नीमोर 2809 | स्को 2810 | कैप्री 2811 | खड़ 2812 | गयी 2813 | सपोर्ट 2814 | डाटा 2815 | सेंसिटिव 2816 | क्रि 2817 | पेरिस 2818 | िता 2819 | वाओ 2820 | जर्सी 2821 | चाइनीज 2822 | क्रॉस 2823 | सठ 2824 | एक्वा 2825 | ट्रेड 2826 | हल्दीराम 2827 | रहने 2828 | स्मेल 2829 | स्थ 2830 | फल 2831 | स्टिक 2832 | एथनिक 2833 | एचडी 2834 | दूसर 2835 | सिर 2836 | उप 2837 | गवर्नमेंट 2838 | बोला 2839 | बू 2840 | चिक 2841 | एरिया 2842 | क्रिएट 2843 | गॉगल 2844 | सोर्टे 2845 | जोड़ 2846 | मिलता 2847 | व्ह 2848 | वुडलैंड 2849 | तुम्हार 2850 | मिलियन 2851 | वैक्यूम 2852 | गूगल 2853 | वीयर 2854 | पुन 2855 | करेंगे 2856 | रुपया 2857 | ओवन 2858 | चूल्हा 2859 | रेप 2860 | बोलो 2861 | रहते 2862 | चर्च 2863 | एं 2864 | यु 2865 | ग्ग 2866 | बीन्स 2867 | क्यूट 2868 | लेवल 2869 | गार्ड 2870 | साइन 2871 | ौर 2872 | आउट 2873 | मसल 2874 | हैप्स 2875 | वास 2876 | डिप 2877 | ॉग 2878 | वर्ष 2879 | जूनियर 2880 | ट्रीटमेंट 2881 | हमने 2882 | अंगूठी 2883 | मसाज 2884 | मां 2885 | बिर 2886 | प्रॉमिस 2887 | पास्ट 2888 | स्लो 2889 | प्वाइंट 2890 | आवाज 2891 | ब्रि 2892 | पैराशूट 2893 | अगरबत्ती 2894 | लोकल 2895 | स्लिपपर 2896 | स्माल 2897 | स्टा 2898 | लड 2899 | कंगन 2900 | ठा 2901 | जाओ 2902 | ट्राय 2903 | महिलाओं 2904 | तुम्हे 2905 | कार्टून 2906 | बीज 2907 | चले 2908 | अमेज 2909 | खान 2910 | क्रू 2911 | हत 2912 | लाफ 2913 | लक्स 2914 | स्पाइस 2915 | रोटी 2916 | मॉइश्चराइजर 2917 | वाय 2918 | रेफ्रिजरेटर 2919 | वाइट 2920 | ट्वाइस 2921 | लैंप 2922 | केशू 2923 | स्विमिंग 2924 | जंप 2925 | कॉन 2926 | प्रूफ 2927 | ब्लेड 2928 | इंची 2929 | बाय 2930 | कैरी 2931 | मदद 2932 | पैसा 2933 | किसान 2934 | बुक 2935 | पैं 2936 | फ्रे 2937 | ब्रेड 2938 | फ्यूचर 2939 | इर 2940 | डेंजर 2941 | अलावा 2942 | बुर 2943 | यूनिकॉर्न 2944 | वेदर 2945 | मास 2946 | जज 2947 | श्र 2948 | गेट 2949 | खो 2950 | ट्रेंड 2951 | गिटार 2952 | आते 2953 | रस्क 2954 | ईअरफोन 2955 | साब 2956 | ॅ 2957 | केसर 2958 | स्माइल 2959 | कैम 2960 | परेशान 2961 | नमकीन 2962 | फेम 2963 | क्रश 2964 | गिवेन 2965 | रेनो 2966 | बक 2967 | रागी 2968 | इंजन 2969 | क् 2970 | पब्लिक 2971 | राइट 2972 | वेजिटेरियन 2973 | हर्ब 2974 | रीच 2975 | राम 2976 | ट्रा 2977 | नियर 2978 | डाइनिंग 2979 | पहुंच 2980 | मैक्सिम 2981 | मीडिया 2982 | एरोप्लेन 2983 | फ्लाई 2984 | स्प्रिंग 2985 | तालीस 2986 | फ्लाइट 2987 | वॉश 2988 | क्वा 2989 | स्टेज 2990 | पट 2991 | वैक्स 2992 | टाइटन 2993 | बॉय 2994 | मेडिसिन 2995 | ब्रेन 2996 | झूला 2997 | फ्फ 2998 | कंट 2999 | पू 3000 | हल 3001 | ऑफिसर 3002 | बैम्ब 3003 | फल 3004 | रिपेयर 3005 | लिंग 3006 | कृष्णा 3007 | भाग 3008 | महंगा 3009 | डब्बा 3010 | डेकोरेशन 3011 | फ्राइड 3012 | ूंगा 3013 | ौल 3014 | खुल 3015 | सेलिंग 3016 | बैडमिंटन 3017 | केयर 3018 | धोती 3019 | फ्लाइंग 3020 | मरुधर 3021 | ंबर 3022 | मोटा 3023 | मजा 3024 | शिप 3025 | सजा 3026 | वेव 3027 | जाय 3028 | डाउनलोड 3029 | मोन 3030 | राजस्थानी 3031 | स्ट्रेंज 3032 | हां 3033 | ॉम 3034 | लगी 3035 | टेलिंग 3036 | जर्मन 3037 | मस्टर्ड 3038 | टाइम 3039 | कॉन्टैक्ट 3040 | विटामिन 3041 | पॉलिश 3042 | कंटेनर 3043 | शेल 3044 | बाटा 3045 | एमएम 3046 | क्लिप 3047 | पोर्ट 3048 | जयपुर 3049 | बॉर्डर 3050 | स्टॉक 3051 | प्रेजेंट 3052 | इंसेक्ट 3053 | स्ट्रेटनर 3054 | ्रेशन 3055 | विचार 3056 | स्पेंड 3057 | डिवाइस 3058 | रेडीमेड 3059 | वापस 3060 | प्राइज 3061 | चिंग 3062 | ॉनिक 3063 | शक्ति 3064 | पल्स 3065 | स्लाइस 3066 | टेट्राप 3067 | स्टोव 3068 | महिला 3069 | दो 3070 | पर्सेंट 3071 | समर 3072 | इतन 3073 | मैरिज 3074 | पंद्रह 3075 | टीचर 3076 | गाना 3077 | चूज 3078 | ड्राइवर 3079 | जिंदगी 3080 | सफोला 3081 | सिरप 3082 | कैप्सूल 3083 | यो 3084 | स्पाइडरमैन 3085 | लकड़ी 3086 | सीरीज 3087 | पुश 3088 | स्पॉट 3089 | िट्री 3090 | शिव 3091 | शॉक 3092 | डोम 3093 | तेज 3094 | फैब 3095 | आईकॉल 3096 | मम्मी 3097 | खत् 3098 | पेनड्राइव 3099 | चूड़ीदार 3100 | ल्फ 3101 | सैनिटरी 3102 | माल 3103 | औरत 3104 | कार्गो 3105 | पीटर 3106 | साहब 3107 | एडल्ट 3108 | अराइव 3109 | फोल्डिंग 3110 | प्रेम 3111 | कोरिेएंडर 3112 | एडम 3113 | फर्नीचर 3114 | बोन 3115 | उरद 3116 | कर्टेन 3117 | मिल्की 3118 | रैप 3119 | रेटेड 3120 | रेजर 3121 | आ 3122 | रिंग्स 3123 | काँच 3124 | धन्यवाद 3125 | मंदिर 3126 | नव 3127 | इवनिंग 3128 | पलंग 3129 | केवल 3130 | एप्पल 3131 | आर्डर 3132 | बिजी 3133 | ऑटोमेटिक 3134 | एस्ट 3135 | चाकू 3136 | चाह 3137 | पीए 3138 | स्केटबोर्ड 3139 | जॉय 3140 | प्रिया 3141 | ाउंस 3142 | वॉर 3143 | गुरु 3144 | पहली 3145 | क्लिनिक 3146 | सिन 3147 | अकाउंट 3148 | चस्मा 3149 | बनाना 3150 | हवाई 3151 | हांज 3152 | स्टेन 3153 | स्टार 3154 | आइल 3155 | चार 3156 | समाज 3157 | गोली 3158 | ल्डन 3159 | सिस 3160 | पहन 3161 | हमारा 3162 | पति 3163 | लिंक 3164 | उसको 3165 | प्रोजेक्ट 3166 | ड्रे 3167 | शेर 3168 | अट्ठाईस 3169 | ब्लैंकेट 3170 | पूछा 3171 | शॉपिंग 3172 | कुल 3173 | बेटी 3174 | तत्व 3175 | स्कूटर 3176 | फोर्थ 3177 | टि 3178 | पुरुष 3179 | सूप 3180 | लेडीज़ 3181 | पोलो 3182 | बोर्न 3183 | नेच्युर 3184 | पिल 3185 | जूसर 3186 | अ 3187 | स्टैंडर्ड 3188 | टाइगर 3189 | र्ण 3190 | कॉपर 3191 | सब्जी 3192 | जिओन 3193 | टेंट 3194 | रेटिंग 3195 | रिज 3196 | उंड 3197 | वाह 3198 | तुम्हारे 3199 | शेक 3200 | चादर 3201 | माय 3202 | हॉल 3203 | संतू 3204 | रैद 3205 | ट्रैवल 3206 | तार 3207 | नंदि 3208 | स्टुपिड 3209 | फो 3210 | हुक्क 3211 | आफर 3212 | कुरतीज 3213 | फेल्ट 3214 | पाम 3215 | सिक्योरिटी 3216 | वेस्टर्न 3217 | भूल 3218 | व्हीलर 3219 | स्टीक 3220 | ड्रग 3221 | ईयरफोन 3222 | इमरजेंसी 3223 | डस्ट 3224 | फार्मूला 3225 | टैप 3226 | डिस्ट 3227 | रीबॉक 3228 | विजय 3229 | विंग्स 3230 | एवेंजर 3231 | ियंस 3232 | सरप्राइज 3233 | वर्ड्स 3234 | ड्राइंग 3235 | हिन्द 3236 | फोर 3237 | इंटू 3238 | व्य 3239 | मोती 3240 | मीमी 3241 | खबर 3242 | पिस्ट 3243 | ट्रैक्ट 3244 | रेक 3245 | बाथिंग 3246 | चैनल 3247 | आना 3248 | घागरा 3249 | हैवेल्स 3250 | प्लीज़ 3251 | इंसान 3252 | नर्जो 3253 | लेक 3254 | ब्रेकफास्ट 3255 | एजेंट 3256 | अलाइव 3257 | फायर 3258 | सेल्व 3259 | वर्थ 3260 | जॉ 3261 | पॉसिबल 3262 | नाईफ 3263 | लेते 3264 | पोलिश 3265 | फास्टट्रैक 3266 | कश्मीर 3267 | फनी 3268 | ड्यूटी 3269 | फ्रैंक 3270 | फॉक्स 3271 | क्रिस 3272 | मौत 3273 | रखा 3274 | क्यू 3275 | मिल 3276 | बार् 3277 | अनारकली 3278 | रफ 3279 | रिप 3280 | बड्स 3281 | पोहा 3282 | पीच 3283 | पेशेंट 3284 | डम्बल 3285 | रैन 3286 | दर्द 3287 | क्वीन 3288 | प्रोजेक्टर 3289 | प्रॉ 3290 | मॉइस्चराइज 3291 | एलोवेरा 3292 | जोड़ो 3293 | सुना 3294 | शाम 3295 | देव 3296 | चियो 3297 | टिप 3298 | सत्तर 3299 | सेल्ल 3300 | हैज़ 3301 | लाइनर 3302 | लायन 3303 | ऑड 3304 | िक्ट 3305 | क्त 3306 | पीने 3307 | ्लि 3308 | चंक 3309 | लकी 3310 | डमी 3311 | बाजू 3312 | रास्त 3313 | स्टोल 3314 | बूट्स 3315 | ढाई 3316 | मुंबई 3317 | स्केर 3318 | गिर 3319 | स्क्रैच 3320 | लॉरियल 3321 | मग 3322 | ऑप्शन 3323 | यम 3324 | मल्टी 3325 | पैंपर् 3326 | टिफिन 3327 | मोदी 3328 | ल् 3329 | मेवा 3330 | इयरिंग 3331 | रोट 3332 | क्रा 3333 | जेन 3334 | वेपन 3335 | स्मार्टवॉच 3336 | देखते 3337 | बैंड 3338 | कहानी 3339 | शेड 3340 | हिस्ट्री 3341 | वोट 3342 | आयल 3343 | स्लिप 3344 | मिस्टेक 3345 | कपड़ 3346 | तवा 3347 | सपीएफ 3348 | पत्नी 3349 | हसबैंड 3350 | बाजार 3351 | नोटिस 3352 | एक्सीडेंट 3353 | ेटिक 3354 | डिस्कवर 3355 | मम 3356 | सूजी 3357 | रेसिपी 3358 | जॉर्ज 3359 | स्पाइडर 3360 | मोन 3361 | ंश 3362 | बजाने 3363 | लहंग 3364 | ग्रे 3365 | सॉन्ग 3366 | कैमरे 3367 | स्कार 3368 | ट्रिप 3369 | खास 3370 | स्लाइम 3371 | यानी 3372 | सोनाटा 3373 | समस्या 3374 | फीड 3375 | कुर्सी 3376 | फ़ाइ 3377 | डोर 3378 | विश्वास 3379 | फौजी 3380 | प्रोग्राम 3381 | मॉइस्चराइजर 3382 | चाहे 3383 | लॉर्ड 3384 | रॉल 3385 | ्वेयर 3386 | वेलवेट 3387 | एनफ 3388 | हॉर्स 3389 | किक 3390 | चक्की 3391 | मैथ 3392 | खुशी 3393 | जैस्मीन 3394 | स्क्रू 3395 | उनसे 3396 | बूस्ट 3397 | डाइजेस्टिव 3398 | अलार्म 3399 | अर्ली 3400 | फ्रेंच 3401 | बेहतर 3402 | वाद 3403 | पीनो 3404 | योग 3405 | देश 3406 | ियूज 3407 | आफ 3408 | फेवर 3409 | स्क्र 3410 | मॉनिटर 3411 | आंट 3412 | नब्ब 3413 | वेंडर 3414 | कैश्यू 3415 | हैंगिंग 3416 | मिर्च 3417 | टैल्क 3418 | क्राइम 3419 | िअ 3420 | शूटिंग 3421 | केप्ट 3422 | ग्लैड 3423 | अम्ब्रेल 3424 | विक 3425 | पॉण्ड 3426 | ग्रास 3427 | ्ति 3428 | जार 3429 | इस्तेमाल 3430 | रोक 3431 | ड्यूक्स 3432 | टैक्स 3433 | सफर 3434 | नाइट 3435 | यार्डल 3436 | िग्री 3437 | युव 3438 | हंट 3439 | प्रेसिडेंट 3440 | सिम्पल 3441 | वैल्यू 3442 | ुष 3443 | बोले 3444 | टब 3445 | रिवर 3446 | व्हेयर 3447 | पुरुषों 3448 | मोब 3449 | चुन 3450 | महसूस 3451 | फ्लैक्स 3452 | धोन 3453 | महाकाल 3454 | शाह 3455 | उपयोग 3456 | कांग्रेस 3457 | मामले 3458 | प्रोवाइड 3459 | नाग 3460 | बंडी 3461 | ायक 3462 | एक्सक्यूज 3463 | ह्वाट 3464 | पैटर्न 3465 | उम्मीद 3466 | एक्सचेंज 3467 | न्यूट्री 3468 | कहने 3469 | सैन 3470 | स्टीम 3471 | यस्टरडे 3472 | जिलेट 3473 | डैडी 3474 | तूर 3475 | एस्केप 3476 | कड़ाई 3477 | इये 3478 | डिजायर 3479 | मक 3480 | डेक 3481 | सट 3482 | रॉड 3483 | मुझसे 3484 | चाहती 3485 | विंड 3486 | एक्सप्लेन 3487 | ंनसन 3488 | पाय 3489 | लॉन्च 3490 | एक्सरसाइज 3491 | योगर्ट 3492 | बेसन 3493 | मिले 3494 | एग्री 3495 | हैपेन 3496 | चलता 3497 | माइ 3498 | नूर 3499 | स्केल 3500 | बॉब 3501 | अचार 3502 | वेंट 3503 | इफेक्ट 3504 | हैप्पिलो 3505 | मेडिकल 3506 | बियर 3507 | एक्सपर्ट 3508 | चुन्नी 3509 | कस्टमर 3510 | ंजी 3511 | च्च 3512 | बटरफ्लाई 3513 | अभि 3514 | आलू 3515 | देंगे 3516 | ब्रो 3517 | निर् 3518 | जनता 3519 | मधु 3520 | ताज 3521 | ियामा 3522 | होंगे 3523 | मेसन 3524 | ज्ञ 3525 | बॉम्ब 3526 | कन्नड़ 3527 | लॉज 3528 | किताब 3529 | बग 3530 | कार्डोमम 3531 | वेफर 3532 | बियर्ड 3533 | सिगरेट 3534 | मार्क 3535 | ंजा 3536 | कफील्ड 3537 | आग 3538 | माइक्रोवेव 3539 | रिस्ट 3540 | क्रॉस 3541 | बाग 3542 | स्कॉच 3543 | सोचा 3544 | आर्क 3545 | सोल्ड 3546 | डिसाइडेड 3547 | दिखाई 3548 | सेम 3549 | स्टोरेज 3550 | इमेज 3551 | मून 3552 | खराब 3553 | फिन 3554 | ियाँ 3555 | मटर 3556 | प्रोटेक्शन 3557 | देसी 3558 | जितन 3559 | पिछले 3560 | इसकी 3561 | सोयाबीन 3562 | निकॉन 3563 | युएसबी 3564 | अरेस्ट 3565 | लड्डू 3566 | आमल 3567 | फीमेल 3568 | बैक 3569 | स्टूडियो 3570 | देती 3571 | हॉक 3572 | फोल्ड 3573 | दिखाए 3574 | फॉरगॉट 3575 | नोवा 3576 | तुलसी 3577 | तलवार 3578 | भु 3579 | पार्टनर 3580 | माता 3581 | बिलकुल 3582 | पैशन 3583 | बाए 3584 | कम्पास 3585 | ट्राली 3586 | पाकिस्तान 3587 | डालने 3588 | कैलिफोर्निय 3589 | घु 3590 | ोला 3591 | झुमका 3592 | अगो 3593 | प्राइवेट 3594 | एयरटेल 3595 | वरें 3596 | थोड़ा 3597 | मिलने 3598 | मैग्नेट 3599 | एंटर 3600 | कराची 3601 | गर्लफ्रेंड 3602 | ्लैस 3603 | रानी 3604 | रहती 3605 | पोटैटो 3606 | स्त्र 3607 | एग्जाम 3608 | सैड 3609 | लगते 3610 | शेव 3611 | पैजामा 3612 | मुश्किल 3613 | ्दी 3614 | नर्स 3615 | इव 3616 | तू 3617 | हल्क 3618 | डोरेम 3619 | यॉर्क 3620 | डीएच 3621 | उन्नीस 3622 | बिलिन 3623 | रूट 3624 | शैडो 3625 | आसान 3626 | साढ़े 3627 | ल्यूशन 3628 | प्यूरी 3629 | टैटू 3630 | पाव 3631 | कन्फर्म 3632 | बोटल 3633 | स्लाइड 3634 | चेरी 3635 | बाइट 3636 | चीनी 3637 | ॉर्जेस 3638 | डिफेंस 3639 | जमा 3640 | अधिकार 3641 | आइआइ 3642 | जोर्जेट 3643 | जाये 3644 | क्राफ्ट 3645 | मैट्रेस 3646 | बिल्ड 3647 | वूमन 3648 | ुअर 3649 | स्पोक 3650 | बांधन 3651 | फ्राई 3652 | मौ 3653 | क्लेम 3654 | बेल्ला 3655 | छु 3656 | मस्क 3657 | सैंपल 3658 | ्टायर 3659 | बोर्नवीट 3660 | प्रैक्टिस 3661 | गीजर 3662 | काजू 3663 | ग्राफ 3664 | वर्जिन 3665 | लूक 3666 | इंटेंस 3667 | चुप 3668 | फीनिक्स 3669 | कुशन 3670 | रिस्क 3671 | स्टाइल 3672 | पियानो 3673 | साल्सा 3674 | ऑक्स 3675 | नाक 3676 | लीडर 3677 | स्नेक 3678 | पाल 3679 | होल्डिंग 3680 | डिजाइं 3681 | ड्रम 3682 | बाकी 3683 | मिशन 3684 | सेविंग 3685 | अमाउंट 3686 | धीरे 3687 | मामा 3688 | सोल्जर 3689 | कौ 3690 | बिजली 3691 | कोहि 3692 | डिफिकल्ट 3693 | चुकी 3694 | औ 3695 | इन्वॉल्व 3696 | जर्क 3697 | टफ 3698 | वॉयस 3699 | झालर 3700 | पहचान 3701 | हार्पिक 3702 | अन्य 3703 | खाली 3704 | ऑल्वेज 3705 | एभर 3706 | पिट 3707 | वालों 3708 | माइकल 3709 | ्रॉयड 3710 | बचा 3711 | जॉनसन 3712 | जेम्स 3713 | रेजिन 3714 | पापास 3715 | सेकेंड 3716 | छोड 3717 | एल्यूमिनियम 3718 | फाइ 3719 | इतने 3720 | स्नीकर्स 3721 | बेब्लेड 3722 | सोय 3723 | प्शन 3724 | कार्ट्रिज 3725 | प्रकार 3726 | डीलक्स 3727 | शिवा 3728 | बेडरूम 3729 | गीत 3730 | ऑफिशियल 3731 | क्टिव 3732 | इनसेन्स 3733 | ब्लॉग 3734 | र्ष 3735 | विक्टिम 3736 | विस्पर 3737 | डोन 3738 | क्श 3739 | ऑडियो 3740 | लक्ष्मी 3741 | राइज 3742 | तेरे 3743 | तेरा 3744 | ियत 3745 | चुके 3746 | क्रिसम 3747 | डायरेक्ट 3748 | पट्टा 3749 | द्वारा 3750 | यादव 3751 | लंड 3752 | माइल्स 3753 | लैक 3754 | इंग्लैंड 3755 | बेसिक 3756 | ट्रॉली 3757 | वनप्लस 3758 | हट 3759 | दार 3760 | इंटरव्यू 3761 | इंतजार 3762 | कैफे 3763 | देखो 3764 | रिपेलेंट 3765 | रिले 3766 | टॉवेल 3767 | पूरे 3768 | जैगरी 3769 | लखानी 3770 | बुरा 3771 | नमक 3772 | टिश्यू 3773 | गद्दा 3774 | िज्म 3775 | डेकोर 3776 | बिगिन 3777 | फुटवियर 3778 | उत्तर 3779 | वंडरफुल 3780 | टीशर्ट 3781 | बैलून 3782 | कम्फर्ट 3783 | धर्म 3784 | प्रसार 3785 | टैंग 3786 | फैसल 3787 | फियर 3788 | केम 3789 | पाया 3790 | क्लिक 3791 | निन्यान 3792 | आईपैड 3793 | लम्बा 3794 | ऑ 3795 | कैसा 3796 | डॉक 3797 | सीजन 3798 | मंजन 3799 | कच्ची 3800 | लिटर 3801 | बॉर्न 3802 | सिचुएशन 3803 | ब्ले 3804 | ईड 3805 | माह 3806 | बहन 3807 | रक्षा 3808 | नेस् 3809 | जिससे 3810 | बेकरी 3811 | पियर्स 3812 | मारुती 3813 | पॉलिसी 3814 | दीवान 3815 | लेख 3816 | एलेन 3817 | ट्रिक 3818 | डार्लिंग 3819 | टैक 3820 | चलो 3821 | वैली 3822 | बातों 3823 | स्ट्राइक 3824 | डेज़ 3825 | डेवलप 3826 | डुअल 3827 | छत 3828 | जानता 3829 | सांबर 3830 | मल्टीग्रेन 3831 | ग्लिटर 3832 | जम्प 3833 | शु 3834 | बैर 3835 | जामुन 3836 | शेफ 3837 | रिजल्ट 3838 | पिस्ता 3839 | इंफॉर्मे 3840 | ोनिक 3841 | सॉलिड 3842 | पेप्स 3843 | इमेजिन 3844 | फेवरेट 3845 | सक्सेस 3846 | केयरफुल 3847 | वॉटरप्रूफ 3848 | सेल्फी 3849 | मौका 3850 | गणेश 3851 | तभी 3852 | गैल 3853 | रिक्वायर 3854 | कुल 3855 | डेजर्ट 3856 | सेवेन 3857 | ब्वॉय 3858 | प्रिंस 3859 | रियलाइज 3860 | पहुँच 3861 | डायरी 3862 | केलॉग 3863 | गेस्ट 3864 | प्लाई 3865 | कार्य 3866 | टर्म 3867 | चमड़ 3868 | वाईफ 3869 | कैंसिल 3870 | वर्मिसिली 3871 | दीप 3872 | ोगे 3873 | यूम 3874 | व्यू 3875 | टावर 3876 | लिशियस 3877 | चुका 3878 | ेगी 3879 | क्रेडिट 3880 | पर्ल 3881 | नैपकिन 3882 | डोसा 3883 | मूवीज 3884 | इलेक्ट्र 3885 | बेंगाल 3886 | प्राइमर 3887 | विटनेस 3888 | दुकान 3889 | बौट 3890 | ग्रेव 3891 | वार्म 3892 | एफडी 3893 | ट्रेस 3894 | महंग 3895 | शामिल 3896 | थ्रेट 3897 | रुक 3898 | जिप 3899 | गोपाल 3900 | ईयररिंग 3901 | बल्कि 3902 | डिस्प 3903 | सूर्य 3904 | रोब 3905 | वास्तव 3906 | ऑब् 3907 | इलायची 3908 | ट्राइ 3909 | स्नो 3910 | सूज 3911 | रिसर्च 3912 | दाढ़ी 3913 | धनिया 3914 | अपाचे 3915 | इंटरनेशनल 3916 | भक्ति 3917 | गांधी 3918 | पैट 3919 | सिग्नेचर 3920 | स्ट्रेंथ 3921 | थिन 3922 | बॉटम 3923 | िनेंट 3924 | जर्म 3925 | एकदम 3926 | चेहरे 3927 | मंगल 3928 | बाबू 3929 | स्पार 3930 | वीएलसी 3931 | फ्रांस 3932 | स्टेबलाइजर 3933 | गैंग 3934 | कड़ा 3935 | वेई 3936 | हैडफोन 3937 | लोकेट 3938 | फोर्ड 3939 | बूफर 3940 | स्थिति 3941 | आधार 3942 | डेविड 3943 | स्टेनलेस 3944 | सूटकेस 3945 | हल्दी 3946 | प्रेफर 3947 | विनेगर 3948 | एक्साइट 3949 | पिल्सब 3950 | ब्लूबेरी 3951 | रेनकोट 3952 | विजन 3953 | कृप 3954 | जिसे 3955 | स्पाईस 3956 | सोशल 3957 | कमरे 3958 | प्रोफेशनल 3959 | रिक्वेस्ट 3960 | राहुल 3961 | स्ट्रेच 3962 | संडे 3963 | शर्मा 3964 | गोरिला 3965 | एबव 3966 | टॉप 3967 | रिलेशनशिप 3968 | बजट 3969 | इंजीनियर 3970 | इंटमेंट 3971 | डायरेक्टर 3972 | मुंह 3973 | चारकोल 3974 | फोल्डर 3975 | झुमक 3976 | िफाइड 3977 | शब्द 3978 | डीजे 3979 | घंट 3980 | फ्लैश 3981 | हेडलाइट 3982 | एंकल 3983 | सेक्टर 3984 | थ्रेड 3985 | बबल 3986 | नेशनल 3987 | कुर्ते 3988 | प्रिपेयर 3989 | खोज 3990 | आर्टिफिशियल 3991 | बॉम्बे 3992 | उपमा 3993 | पिस्टल 3994 | बताये 3995 | मंत्र 3996 | चड्ड 3997 | स्क्वायर 3998 | न्यूट्रीशन 3999 | िस्टिक 4000 | एव्री 4001 | चूड़ा 4002 | मॉडर्न 4003 | कारपेट 4004 | डायन 4005 | दिवाली 4006 | ज्योमेट्री 4007 | बॉउल 4008 | डेस्क 4009 | मैटिक 4010 | रसना 4011 | तेरी 4012 | ोलॉजी 4013 | क्वेश्चं 4014 | लॉयर 4015 | हालांकि 4016 | बताएं 4017 | स्पेंट 4018 | आलवेज 4019 | चक्का 4020 | अनुसार 4021 | सनग्लास 4022 | फेड 4023 | हुजा 4024 | पुराना 4025 | ज्वाइन 4026 | फिल 4027 | लौ 4028 | स्पेयर 4029 | गिल 4030 | सुख 4031 | रुपए 4032 | टारगेट 4033 | अपार्टमेंट 4034 | प्रूव 4035 | झूमर 4036 | माउंटेन 4037 | पम्प 4038 | डाइंग 4039 | उड़द 4040 | पेरेंट 4041 | ग्रैब 4042 | माउंट 4043 | आदि 4044 | मॉर् 4045 | मंजी 4046 | ट्रांसपेरेंट 4047 | चेस्ट 4048 | पेट्रोल 4049 | नॉव 4050 | क्वार्टर 4051 | दलिया 4052 | जिसके 4053 | बैकपैक 4054 | रोग 4055 | दीवाल 4056 | गाडी 4057 | गुजरात 4058 | सुंदर 4059 | ब्रिज 4060 | कॉम्प 4061 | सिग्नल 4062 | आरबी 4063 | लिफ्ट 4064 | घंटे 4065 | डिपार्टमेंट 4066 | इंडिकेटर 4067 | कलरफुल 4068 | कैसी 4069 | इश्यू 4070 | टॉफी 4071 | डु 4072 | ड्रंक 4073 | स्टोप्ड 4074 | क्रिएशन 4075 | अमर 4076 | सिविल 4077 | चित्र 4078 | विकास 4079 | उम्र 4080 | संत 4081 | ट्रॉपिक 4082 | महाराज 4083 | मुख 4084 | स्मिथ 4085 | करीब 4086 | वलॉन 4087 | सस्पेक्ट 4088 | रिलैक्स 4089 | ओप 4090 | डेकोरेट 4091 | बेसिल 4092 | स्टीव 4093 | उनको 4094 | हार्म 4095 | अनारदाना 4096 | धाग 4097 | बिसाइड 4098 | मीठा 4099 | लिखने 4100 | वूलन 4101 | एंशिएंट 4102 | इवेन 4103 | यॉर 4104 | सुपीरिय 4105 | टोस्ट 4106 | ऊँ 4107 | ब्लेस 4108 | पोजीशन 4109 | ग्रू 4110 | आइलैंड 4111 | स्लॉट 4112 | फ्नै 4113 | एक्सपीरिय 4114 | मिश्र 4115 | मार्ग 4116 | डिसाइड 4117 | मेगा 4118 | कंडीशन 4119 | लैब 4120 | एनफील्ड 4121 | उड़न 4122 | ब्रेस्ट 4123 | परफॉर्म 4124 | ग्लैमर 4125 | एमपी 4126 | गाइड 4127 | लगने 4128 | आँखों 4129 | हैंडसम 4130 | दिमाग 4131 | राजपूत 4132 | सनग्लासे 4133 | फोकस 4134 | इंडस्ट्री 4135 | ट्विस्ट 4136 | रशिय 4137 | आफ्टरशेव 4138 | स्वेटशर्ट 4139 | पीएस 4140 | क्राउन 4141 | शरीर 4142 | एंजेल 4143 | स्वाद 4144 | ग्रोथ 4145 | बैठने 4146 | पर्पल 4147 | सप्लाई 4148 | पिजन 4149 | कलेक्ट 4150 | ब्लेम 4151 | एविडेंस 4152 | वर्क 4153 | उठ 4154 | घूम 4155 | प्योर 4156 | नेबर 4157 | बोलेर 4158 | क्लाइंट 4159 | लह 4160 | इंटरनेट 4161 | ड्यूड 4162 | स्पिरिट 4163 | डिग्री 4164 | स्विफ्ट 4165 | जीसस 4166 | क्रीम 4167 | लोहे 4168 | पागल 4169 | हाइट 4170 | सेलिब्रेशन 4171 | बोल्ट 4172 | बंगाल 4173 | चैट 4174 | एक्सएक्सए 4175 | कैरेक्टर 4176 | नगर 4177 | नींद 4178 | मिकी 4179 | स्प्र 4180 | लिटल 4181 | इंगेज 4182 | एडमिट 4183 | ड्डी 4184 | कंटिन्यू 4185 | टाइड 4186 | डाउट 4187 | पैंतीस 4188 | प्राप्त 4189 | एक्सप्रेस 4190 | बास्टर्ड 4191 | चार्ली 4192 | एक्वेरियम 4193 | बैलेंस 4194 | बिलिव 4195 | अपीयर 4196 | जहाँ 4197 | ट्रै 4198 | धूप 4199 | भग 4200 | सुनने 4201 | फॉ 4202 | डिब्बा 4203 | ब्लेज़र 4204 | फ्रीडम 4205 | स्कॉट 4206 | कॉर्डिंग 4207 | फटा 4208 | सिक्योर 4209 | टेम्पल 4210 | चार्म 4211 | सैंडलवुड 4212 | थौल 4213 | जिसक 4214 | ब्लैकबेरी 4215 | कॉम्पैक्ट 4216 | रजिस्टर 4217 | रंगोल 4218 | बिलियन 4219 | मसाले 4220 | बॉलीवुड 4221 | च्यवनप्राश 4222 | मैदा 4223 | ट्यून 4224 | कपडे 4225 | कविता 4226 | माफ 4227 | रिफ्रेश 4228 | हस्बैंड 4229 | प्रोफेसर 4230 | एनिमी 4231 | नींबू 4232 | जेगिंग 4233 | बताइये 4234 | वॉलीबॉल 4235 | सफल 4236 | टुवर्ड 4237 | क्रिस्पी 4238 | जोवार 4239 | बिग्गर 4240 | चूड़िया 4241 | भारतीय 4242 | मिट्टी 4243 | सांभ 4244 | आँख 4245 | लेबल 4246 | चिल्ल 4247 | अपॉइंटमेंट 4248 | मैसूर 4249 | पूर्ण 4250 | एडिशन 4251 | चेहरा 4252 | विषय 4253 | कॉर्न 4254 | चिंता 4255 | ब्रीद 4256 | खिला 4257 | तरीके 4258 | मेयोनेज 4259 | स्कोर 4260 | डिस्पेंसर 4261 | माइल्ड 4262 | सागो 4263 | डेफिनेट 4264 | रूम 4265 | शुभ 4266 | आनंद 4267 | नाइक 4268 | किट्टी 4269 | बर्थ 4270 | भारी 4271 | एवरेस्ट 4272 | स्क्वैश 4273 | रिप्लेस 4274 | स्ट्रैप 4275 | मेथी 4276 | हिस्स 4277 | सद 4278 | तमिल 4279 | खिलाफ 4280 | गैजेट 4281 | चोक 4282 | मार्टिन 4283 | दौरान 4284 | छोड़ 4285 | एंगल 4286 | लियोनार्ड 4287 | फंड 4288 | कुंभ 4289 | ईमेल 4290 | आइब्रो 4291 | सलमान 4292 | हिसाब 4293 | बाइसिकल 4294 | प्रकाश 4295 | पिट्ट 4296 | रिव्यू 4297 | ट्रेडिशन 4298 | शार्प 4299 | अटेंशन 4300 | राज्य 4301 | जापान 4302 | ंजल 4303 | यूनिवर्स 4304 | रिलीफ 4305 | कच्चा 4306 | चकोत 4307 | पर्पस 4308 | लगती 4309 | लेहेंगा 4310 | नेटवर्क 4311 | बॉडी 4312 | मोटे 4313 | कॉम्ब 4314 | ओरियो 4315 | ऑपरेट 4316 | थोडा 4317 | सुप्रीम 4318 | डर्टी 4319 | यूनिब 4320 | मैप्रो 4321 | एंग्री 4322 | मैरून 4323 | बेर्री 4324 | लैप 4325 | ऑपरेशन 4326 | शरारा 4327 | जल्द 4328 | नहान 4329 | बर्द 4330 | पप्पी 4331 | पैड 4332 | स्सीन 4333 | बॉयफ्रेंड 4334 | भाभी 4335 | इवेंट 4336 | आवश्यक 4337 | एम्प्टी 4338 | नॉइज 4339 | पॉवर 4340 | फॉरगिव 4341 | कनेक्शन 4342 | प्ले 4343 | छूट 4344 | शिफ्ट 4345 | प्रदेश 4346 | हाइलाइटर 4347 | एस्पेस 4348 | डांगरी 4349 | लौट 4350 | विवेल 4351 | कंबल 4352 | टूरिस्ट 4353 | ट्रांसफर 4354 | ब्लीच 4355 | इम्पोर्टेंट 4356 | षण 4357 | टिक्का 4358 | बर्ग 4359 | असेफोेटीडा 4360 | क्विट 4361 | सोल्डरिंग 4362 | पंख 4363 | फिग 4364 | सेरेलैक 4365 | घड़िया 4366 | टांगन 4367 | पर्दे 4368 | भुजिया 4369 | क्सपेंसिव 4370 | सर्वाइव 4371 | नॉर्थ 4372 | बिकान 4373 | ेंद्र 4374 | मेट्रो 4375 | गिल्ट 4376 | फेसबुक 4377 | फोटोग्राफ 4378 | िआ 4379 | पॉर्टेंट 4380 | इक्वल 4381 | चश्मे 4382 | ह्यूज 4383 | लैंग्वेज 4384 | शीश 4385 | पैरेग 4386 | कैम्प 4387 | ुलेट 4388 | बकेट 4389 | लडकी 4390 | अगले 4391 | डोनिल 4392 | ऐरो 4393 | आराम 4394 | इक्कीस 4395 | जहां 4396 | वाल्क 4397 | अरलिय 4398 | एशियन 4399 | स्पून 4400 | इमीडिएट 4401 | सैंडिल 4402 | रौंग 4403 | स्पेक्ट 4404 | फॉयल 4405 | केसियो 4406 | ड्रि 4407 | चक्र 4408 | छत्तीस 4409 | तस्वीर 4410 | एसएम 4411 | व्हर्लपूल 4412 | स्पंज 4413 | लेंथ 4414 | मित्र 4415 | तौर 4416 | जंगल 4417 | चमक 4418 | ट्विन 4419 | ्फोर 4420 | ग्राउंड 4421 | मिडिल 4422 | बरसात 4423 | सेवरल 4424 | कंसर्न 4425 | पैलेट 4426 | ट्रैप 4427 | इन्फेंट 4428 | प्लेजर 4429 | एल्बो 4430 | प्राउड 4431 | टेरिब 4432 | चिपकान 4433 | श्रग 4434 | हुड 4435 | बॉश 4436 | डम्ब 4437 | पपड़ी 4438 | झूठ 4439 | मछली 4440 | प्रयास 4441 | इमाम 4442 | टेलीफोन 4443 | बनाय 4444 | क्षेत्र 4445 | न्युट्रोज 4446 | शहर 4447 | शुभकामनाए 4448 | चैलेंज 4449 | इन्वर्टर 4450 | घटना 4451 | डिटेक्टिव 4452 | अपसेट 4453 | कदम 4454 | ब्लास्ट 4455 | सप्पो 4456 | थर्मस 4457 | बोतल 4458 | बूंदी 4459 | डैंड्रफ 4460 | शिकायत 4461 | यामह 4462 | सौंफ 4463 | रैकेट 4464 | फंक्शन 4465 | खूब 4466 | सडन 4467 | एग्जॉ 4468 | अपार्ट 4469 | जन्म 4470 | रिटेन 4471 | गुआवा 4472 | रिपीट 4473 | प्रोड्यूस 4474 | स्टाफ 4475 | जॉर्डन 4476 | ब्रैन 4477 | ग्लिसर 4478 | कुत्ता 4479 | फिटनेस 4480 | कैरियर 4481 | मार्च 4482 | स्क्रीम 4483 | लिबर्टी 4484 | कीजिये 4485 | सीनियर 4486 | एलाउड 4487 | क्लाउड 4488 | खट्ट 4489 | ब्रैंड 4490 | पीतल 4491 | सफाई 4492 | जमीन 4493 | डिसीजन 4494 | नाचो 4495 | मेहेंदी 4496 | गाँव 4497 | यूनीफि 4498 | शॉवर 4499 | दुर्गा 4500 | क्रंची 4501 | पचप 4502 | डंग्री 4503 | पूर 4504 | एप्रीकॉट 4505 | स्केच 4506 | बोदर 4507 | आइडेंटि 4508 | स्वीकार 4509 | अल्फा 4510 | सैफ्रन 4511 | बधाई 4512 | संबंध 4513 | लोबिया 4514 | ओबवियस 4515 | कृष्ण 4516 | ओरिएंट 4517 | डिस्ट्रॉय 4518 | टंकी 4519 | स्ट्रीक 4520 | माइक्रोफोन 4521 | घोस्ट 4522 | मराठी 4523 | योनेक्स 4524 | कोरोना 4525 | यूनाइटेड 4526 | मंकी 4527 | बीआई 4528 | डब्ब 4529 | डर्म 4530 | डिलिशियस 4531 | गौर 4532 | आर्टिस्ट 4533 | नौकरी 4534 | सेंट्रल 4535 | मंडे 4536 | राधे 4537 | टशर्ट 4538 | यूनिवर्सिटी 4539 | रिफ्यूज 4540 | लाउड 4541 | टाइल्स 4542 | इंटेल 4543 | आईलाइनर 4544 | फूल्ल 4545 | ब्रीफ 4546 | डीएसएलआर 4547 | सॉल्ट 4548 | रोमांटिक 4549 | नारजो 4550 | कपूर 4551 | कंसीडर 4552 | राधा 4553 | फ्लॉप 4554 | स्वोर्ड 4555 | प्रॉपर 4556 | फुकन 4557 | स्वेर 4558 | वॉट्सऐप 4559 | मैग्नेटिक 4560 | हगीज 4561 | बिल्कुल 4562 | हार्दिक 4563 | अनुभव 4564 | मुस्लिम 4565 | आईशैडो 4566 | एडवांस 4567 | एडेप्टर 4568 | तुझ 4569 | मॉइश्चर 4570 | सतहत 4571 | क्रिमिनल 4572 | ट्रिगर 4573 | पाउंड 4574 | डिफरेंस 4575 | डिमांड 4576 | अदरवाइज 4577 | सब्जेक्ट 4578 | गार्बे 4579 | गये 4580 | रिचर्ड 4581 | एंजॉय 4582 | पोर्टेबल 4583 | इलाज 4584 | सप्लीमेंट 4585 | गारंटी 4586 | पुराने 4587 | कन्वि 4588 | मोबिल 4589 | ऐक् 4590 | घानी 4591 | पिंपल 4592 | मल्टीकलर 4593 | इधर 4594 | एक्सीलें 4595 | बादशाह 4596 | फ्यूजन 4597 | लैश 4598 | यकीन 4599 | प्रॉपर्टी 4600 | फ्रेंडशिप 4601 | नयी 4602 | शांति 4603 | अशोक 4604 | पत्थर 4605 | केचोड 4606 | टेमेरिं 4607 | ब्लाइंड 4608 | पोमि 4609 | ग्रेनेट 4610 | कजिन 4611 | परचेज 4612 | ट्रेवल 4613 | रुद्राक्ष 4614 | ल्लू 4615 | यूरोप 4616 | रिसेंट 4617 | कूलपै 4618 | दुख 4619 | क्वाइट 4620 | माध्यम 4621 | वीकेंड 4622 | आयुष 4623 | पामोलि 4624 | सरसो 4625 | पोछ 4626 | फिलिप 4627 | एन्जॉय 4628 | ज्वेल 4629 | इडियट 4630 | मुँह 4631 | बारबेक 4632 | रिअल 4633 | सोसायटी 4634 | जहाज 4635 | कैंडल 4636 | सफारी 4637 | क्वि 4638 | टेलीविजन 4639 | संपन्न 4640 | चंदन 4641 | पहला 4642 | पतंग 4643 | यूनिफॉर्म 4644 | ऑर्गनाइज 4645 | मीपोको 4646 | रेजिं 4647 | लाईज 4648 | कैबिनेट 4649 | घेर 4650 | क्रैप 4651 | वेबसाइट 4652 | ग्रिप 4653 | रिस्पेक्ट 4654 | पकड 4655 | डिजर्व 4656 | फैंटेसी 4657 | उतन 4658 | ज्ञान 4659 | सेपरेट 4660 | ऐ 4661 | मिस्ट्री 4662 | क्लींज 4663 | पोंछ 4664 | ोडेंट 4665 | एब्सोल्य 4666 | फ्लेम 4667 | कॉर्ड 4668 | सुजुक 4669 | कंसल्ट 4670 | मार्बल 4671 | पीडियाश 4672 | पजल 4673 | अटैच 4674 | शून्य 4675 | बाइसिकिल 4676 | महिन्द्र 4677 | िप्पी 4678 | इंस्ट्रूमेंट 4679 | एजींग 4680 | अरेंज 4681 | ऑल्टो 4682 | टेक्नोलॉजी 4683 | मिठाई 4684 | कॉर्निटो 4685 | स्नैपि 4686 | एडवर्ड 4687 | पुदीन 4688 | फिफ्थ 4689 | भोग 4690 | सेंसोडाइन 4691 | सैशे 4692 | फोक्स 4693 | टेटल 4694 | खर्च 4695 | दरवाजा 4696 | अर्बन 4697 | हनुमान 4698 | लिटो 4699 | ऑब्जेक्ट 4700 | स्टिच 4701 | कांती 4702 | केचप 4703 | बलून 4704 | यात्रा 4705 | जंपसूट 4706 | मच्छरदान 4707 | थॉमस 4708 | वीडियोकॉन 4709 | गुरूज 4710 | एजुकेशन 4711 | टीएम 4712 | अलाव 4713 | रॉबर्ट 4714 | अल्कोहल 4715 | तारीख 4716 | गिलास 4717 | डिसैपीअर 4718 | पॉजिटिव 4719 | इसीलिए 4720 | भरोस 4721 | एंटीसेप्टिक 4722 | फायदा 4723 | सिलिकॉन 4724 | माटिक 4725 | क्रैश 4726 | डेस्ट्रॉय 4727 | रेस्पेक्ट 4728 | योजना 4729 | सेंचुरी 4730 | ग्रीक 4731 | क्यूमिन 4732 | कोडुबले 4733 | बत्ती 4734 | हैंडबैग 4735 | जूलिय 4736 | स्थान 4737 | विल्लिंग 4738 | रिमाइंड 4739 | भाषा 4740 | चाभी 4741 | गांव 4742 | पीरियड 4743 | इन्वाइट 4744 | डिलीट 4745 | सिंथेटिक 4746 | धारा 4747 | इक्विपमेंट 4748 | ग्रॉसरी 4749 | इंटरप्राइजे 4750 | मैक्विटी 4751 | जिन्दगी 4752 | सैटरडे 4753 | मार्वल 4754 | बचपन 4755 | निक्कर 4756 | डेंटिस्ट 4757 | मिनिस्टर 4758 | पड़ेग 4759 | क्राउड 4760 | सूरज 4761 | अपस्टे 4762 | सत्तू 4763 | ब्रेव 4764 | क्रेनबेरी 4765 | तरीक 4766 | पनिश 4767 | जर्नी 4768 | ऍ 4769 | इनोसेंट 4770 | तेलुग 4771 | अचानक 4772 | गुस्सा 4773 | ग्राम 4774 | वायलें 4775 | सिनेमा 4776 | वॉन्ट 4777 | टैलेंट 4778 | पुरानी 4779 | जेनरेशन 4780 | एयरपॉड 4781 | चुनाव 4782 | वर्धन 4783 | रूहफजा 4784 | नॉलेज 4785 | एलिमेंट 4786 | खूबसूरत 4787 | बिछाने 4788 | कांति 4789 | डेल्ही 4790 | इन्फिनि 4791 | सर्जिं 4792 | ग्लूकोज 4793 | पपाया 4794 | इरेजर 4795 | वैसा 4796 | ः 4797 | भविष्य 4798 | एब्सोल्यूट 4799 | स्टॉर्म 4800 | स्नैप 4801 | अपेरेंट 4802 | विशेष 4803 | अथॉरिटी 4804 | राजनीति 4805 | अट्ठारह 4806 | ड्रॉप 4807 | रिलाय 4808 | छल्ल 4809 | वुड 4810 | किनोवा 4811 | अकेले 4812 | बच्चन 4813 | सेन्सर 4814 | लाइफ 4815 | अटेंड 4816 | सर्किट 4817 | सर्जरी 4818 | डिस्टर्ब 4819 | रिजर्व 4820 | संभव 4821 | क्यूकु 4822 | ग्रेनोला 4823 | बच्चियो 4824 | चुंदर 4825 | प्रोमिस 4826 | लस्सी 4827 | एन्चैंट 4828 | मच्छर 4829 | बाजरा 4830 | ज्योति 4831 | कन्फ्यूज 4832 | रेस्क्यू 4833 | ग्रांट 4834 | चाहेंगे 4835 | इन्फॉर्म 4836 | बेरीज 4837 | रिश्ते 4838 | जैपनी 4839 | ष्ठ 4840 | एनिवर्सरी 4841 | मौसम 4842 | पट्टू 4843 | पॉपुलर 4844 | स्ट्रोंग 4845 | जन्मदिन 4846 | क्लीयर 4847 | गरारा 4848 | फीचर 4849 | भोजपुरी 4850 | राजधानी 4851 | पुलियोग 4852 | एंटरप्राइज 4853 | सैलून 4854 | ऑर्डिनर 4855 | वैरायटी 4856 | नेसेसरी 4857 | विनायका 4858 | ओडोम 4859 | चाहिये 4860 | असिस्टेंट 4861 | पहनत 4862 | सुरक्षा 4863 | टाइनी 4864 | ज्वॉइ 4865 | इंटेलिजें 4866 | काबुली 4867 | डेस्कटॉप 4868 | चैंपियन 4869 | प्रिंसिपल 4870 | स्पीच 4871 | गुल्लक 4872 | झंडू 4873 | वॉल्नट 4874 | अंतर 4875 | रेस्पॉन्सिब 4876 | कौंप्ल 4877 | क्रिएश 4878 | मोनाक 4879 | मसीन 4880 | इंस्पेक्टर 4881 | ब्रिटिश 4882 | गेनर 4883 | फ्लास्क 4884 | इंटरनल 4885 | ख्याल 4886 | पत्ता 4887 | शाकाहार 4888 | नयार्ड 4889 | हाउस 4890 | ऑर्गन 4891 | एंड्रॉइड 4892 | क्युल 4893 | आदत 4894 | कॉकटेल 4895 | ट्ट्ल 4896 | जिम्मेदार 4897 | कीचेन 4898 | कैपिटल 4899 | ऑक्सीजन 4900 | डब्लू 4901 | क्वायल 4902 | ईश्वर 4903 | कंफर्ट 4904 | लटकन 4905 | हॉव 4906 | खींच 4907 | अवॉइड 4908 | इन्दुले 4909 | मखाना 4910 | राउटर 4911 | डेनियल 4912 | एक्जाम्पल 4913 | सेक्शुअल 4914 | लगभग 4915 | रिटायर 4916 | पैनास 4917 | इंटिमेट 4918 | छुट्टी 4919 | अनासाज 4920 | ब्लॉसम 4921 | संगीत 4922 | मैजेस्टी 4923 | पोशाक 4924 | स्वयं 4925 | राजस्थान 4926 | तंदूर 4927 | चद्दर 4928 | लिमिट 4929 | कुत्ते 4930 | उधर 4931 | सम्मान 4932 | अर्जुन 4933 | इंश्योरेंस 4934 | पोजिशन 4935 | स्ट्रीप 4936 | दीपाव 4937 | गरीब 4938 | मकान 4939 | लुइस 4940 | लाईट 4941 | स्पेसिफिक 4942 | सिसका 4943 | हरियाण 4944 | छाप 4945 | कैंसर 4946 | किडनैप 4947 | विडियो 4948 | अटेम्प्ट 4949 | इंस्टैंट 4950 | सरफेस 4951 | सेलिब्रेट 4952 | लीजिये 4953 | वर्जन 4954 | कुर्तिया 4955 | मैकेनिक 4956 | ट्रेसेमे 4957 | क्लाइंब 4958 | नायलॉन 4959 | प्रश्न 4960 | खेत 4961 | एजेंसी 4962 | ट्रैफिक 4963 | संजय 4964 | चंद्र 4965 | सजेस्ट 4966 | अनफोरच्युनेट 4967 | मामाअर्थ 4968 | सत्ता 4969 | शुरुआत 4970 | इक्यानब 4971 | रिकोगनॉइज 4972 | ग्राफिक 4973 | पूर्व 4974 | रॉबिन 4975 | मुलायम 4976 | वॉइस 4977 | शेड्यूल 4978 | चिरोंजी 4979 | टीट्यूड 4980 | वान् 4981 | प्रेग्नेंट 4982 | एग्झीस्ट 4983 | इग्नोर 4984 | रेग्युलर 4985 | अपडेट 4986 | डिस्ट्रिक्ट 4987 | केलोग 4988 | एग्झिस्ट 4989 | नटमेग 4990 | ऋ 4991 | ङ 4992 | औ 4993 | ॊ 4994 | ऎ 4995 | ॐ 4996 | ऱ 4997 | ॆ 4998 | ञ 4999 | ऒ 5000 | ॠ 5001 | -------------------------------------------------------------------------------- /decoder/Makefile: -------------------------------------------------------------------------------- 1 | DEBUG:= -Xcompiler="-fpermissive" 2 | 3 | TARGET = decoder 4 | 5 | SRC_DIR_MAIN = ./ 6 | SRC_DIR_SYS = ../sys 7 | SRC_DIR_COMMON = ../common 8 | 9 | OBJ_DIR_MAIN = ./obj 10 | OBJ_DIR_SYS = ../sys/obj 11 | OBJ_DIR_COMMON = ../common/obj 12 | 13 | INCLUDES:=-I../common/header -I../sys/header -I../ext/include/ -I./header/ 14 | 15 | NVCC:=nvcc 16 | LDFLAGS:= -lcudnn -lcublas -lcurand 17 | NVCCFLAGS:= -arch=sm_70 --use_fast_math -std=c++14 -O2 18 | CUDNN_PATH:= /usr/local/cuda/ 19 | LIBS:= -L $(CUDNN_PATH)/lib64 -L/usr/local/lib -L ../ext/lib/ 20 | 21 | EXTRA_FLAGS:= $(DEBUG) 22 | 23 | 24 | CU_FILES_MAIN_H = $(wildcard $(SRC_DIR_MAIN)/header/*.hpp) 25 | CU_FILES_MAIN = $(wildcard $(SRC_DIR_MAIN)/src/*.cu) 26 | OBJS_MAIN = $(patsubst %.cu,$(OBJ_DIR_MAIN)/%.o,$(notdir $(CU_FILES_MAIN))) 27 | 28 | CU_FILES_SYS_H = $(wildcard $(SRC_DIR_SYS)/header/*.hpp) 29 | CU_FILES_SYS = $(wildcard $(SRC_DIR_SYS)/src/*.cu) 30 | OBJS_SYS = $(patsubst %.cu,$(OBJ_DIR_SYS)/%.o,$(notdir $(CU_FILES_SYS))) 31 | 32 | CU_FILES_COMMON_H = $(wildcard $(SRC_DIR_COMMON)/header/*.hpp) 33 | CU_FILES_COMMON = $(wildcard $(SRC_DIR_COMMON)/src/*.cpp) 34 | OBJS_COMMON = $(patsubst %.cpp,$(OBJ_DIR_COMMON)/%.o,$(notdir $(CU_FILES_COMMON))) 35 | 36 | $(TARGET) : EXTRA_FLAGS += -D T2_CN 37 | $(TARGET) : dirmake cleanmain $(OBJS_COMMON) $(OBJS_SYS) $(OBJS_MAIN) 38 | $(NVCC) $(NVCCFLAGS) $(LDFLAGS) $(LIBS) -o $@ $(OBJS_COMMON) $(OBJS_SYS) $(OBJS_MAIN) 39 | 40 | $(OBJ_DIR_SYS)/%.o : $(SRC_DIR_SYS)/src/%.cu $(CU_FILES_SYS_H) $(CU_FILES_COMMON_H) 41 | $(NVCC) $(NVCCFLAGS) $(INCLUDES) -o $@ -c $< $(EXTRA_FLAGS) 42 | 43 | $(OBJ_DIR_COMMON)/%.o : $(SRC_DIR_COMMON)/src/%.cpp $(CU_FILES_COMMON_H) 44 | $(NVCC) $(NVCCFLAGS) $(INCLUDES) -o $@ -c $< $(EXTRA_FLAGS) 45 | 46 | $(OBJ_DIR_MAIN)/%.o : $(SRC_DIR_MAIN)/src/%.cu $(CU_FILES_MAIN_H) 47 | $(NVCC) $(NVCCFLAGS) $(INCLUDES) -I./ -o $@ -c $< $(EXTRA_FLAGS) 48 | 49 | 50 | dirmake: 51 | @mkdir -p $(OBJ_DIR_COMMON) 52 | @mkdir -p $(OBJ_DIR_SYS) 53 | @mkdir -p $(OBJ_DIR_MAIN) 54 | 55 | cleanmain: 56 | rm -f $(OBJ_DIR_MAIN)/*.o 57 | 58 | 59 | .PHONY : clean 60 | clean : 61 | rm -f $(TARGET) 62 | rm -f $(OBJ_DIR_COMMON)/*.o 63 | rm -f $(OBJ_DIR_SYS)/*.o 64 | rm -f $(OBJ_DIR_MAIN)/*.o 65 | 66 | rebuild: clean build 67 | -------------------------------------------------------------------------------- /decoder/decoder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/decoder/decoder -------------------------------------------------------------------------------- /decoder/header/decoder.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __DECODER_HPP__ 2 | #define __DECODER_HPP__ 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | using namespace std; 13 | 14 | namespace s2t 15 | { 16 | namespace decodernet 17 | { 18 | struct data_tuple 19 | { 20 | string beam_string; // can change this to long long beam_string_idx; 21 | float log_prob; 22 | size_t last_decoded_sid; 23 | int hidden_idx; 24 | vector beam_sids; 25 | }; 26 | 27 | struct min_first 28 | { 29 | bool operator()(pair const& pair1, pair const& pair2); 30 | }; 31 | 32 | class TrieNode 33 | { 34 | 35 | public: 36 | static const int letters = hparams::joint_net_logit_size; 37 | TrieNode* children[letters]; 38 | bool isCompleteWord; 39 | TrieNode(); 40 | ~TrieNode(); 41 | }; 42 | 43 | class Trie 44 | { 45 | 46 | private: 47 | TrieNode* root; 48 | vector all_trie_nodes; 49 | 50 | public: 51 | Trie(); 52 | bool insert_and_check(vector& word); 53 | ~Trie(); 54 | }; 55 | 56 | class decoder 57 | { 58 | 59 | private: 60 | size_t vocab_size; 61 | size_t blank_index; 62 | vector subword_map; 63 | // std::vector is_space_subword; 64 | // use https://github.com/Tessil/hat-trie to create trie based lexicon 65 | 66 | cudnnHandle_t cudnn; 67 | prednet prednet1; 68 | jointnet jointnet1; 69 | 70 | // gpu variables used while decoding 71 | gpu_float_array prednet_out; 72 | gpu_float_array enc_pred_concated; 73 | gpu_float_array jointnet_out; 74 | 75 | // cpu variables used while decoding 76 | float* log_probs; 77 | bool boost_phase; 78 | 79 | public: 80 | decoder(size_t p_vocab_size, size_t p_blank_index); 81 | void operator() (const string& encoder_features_file, size_t beamsize, vector>& beams_and_logprobs_out); 82 | void boost_prob(data_tuple& final, data_tuple& prefix); 83 | ~decoder(); // free all resources 84 | }; 85 | } 86 | } 87 | 88 | 89 | #endif 90 | -------------------------------------------------------------------------------- /decoder/header/hparams.hpp: -------------------------------------------------------------------------------- 1 | #ifndef _HPARAMS_HPP__ 2 | #define _HPARAMS_HPP__ 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | 9 | namespace s2t 10 | { 11 | namespace decodernet 12 | { 13 | namespace hparams 14 | { 15 | using namespace std; 16 | 17 | static const string base_param_folder = "../data/params/pred_joint_wts/"; 18 | static const string base_input_folder = "../data/inputs/"; 19 | static const string base_output_folder = "../data/outputs/"; 20 | 21 | // encoder network parameters 22 | 23 | static const size_t enc_net_logit_size = 700; 24 | 25 | // prediction network parameters 26 | 27 | // embedding table 28 | static const string pred_net_embedding = base_param_folder + "pred_net_embedding_embeddings:0.npy"; 29 | 30 | // lstm layers 31 | static const size_t pred_net_lstm_layers = 2; 32 | static const string pred_net_lstm_0_kernel = base_param_folder + "pred_net_lstm_10_kernel:0.npy"; 33 | static const string pred_net_lstm_0_bias = base_param_folder + "pred_net_lstm_10_bias:0.npy"; 34 | static const string pred_net_lstm_1_kernel = base_param_folder + "pred_net_lstm_11_kernel:0.npy"; 35 | static const string pred_net_lstm_1_bias = base_param_folder + "pred_net_lstm_11_bias:0.npy"; 36 | 37 | // other parameters 38 | static const size_t pred_net_logit_size = 700; 39 | static const size_t pred_net_state_h_size = 700; 40 | static const size_t pred_net_state_c_size = 700; 41 | static const size_t max_input_size = 1; 42 | static const size_t gpu_states_buffer_size = 80000; 43 | 44 | // joint network parameters 45 | 46 | // dense_1 47 | static const string joint_net_dense_0_kernel = base_param_folder + "joint_net_dense_kernel:0.npy"; 48 | static const string joint_net_dense_0_bias = base_param_folder + "joint_net_dense_bias:0.npy"; 49 | 50 | // dense_2 51 | static const string joint_net_dense_1_kernel = base_param_folder + "joint_net_dense_1_kernel:0.npy"; 52 | static const string joint_net_dense_1_bias = base_param_folder + "joint_net_dense_1_bias:0.npy"; 53 | 54 | // joint network inputs 55 | static const string joint_net_encoder_feats = base_input_folder + "py_joint_net_input_encoder_features.npy"; 56 | static const string joint_net_prediction_feats = base_input_folder + "py_joint_net_input_prediction_features.npy"; 57 | 58 | // other parameters 59 | static const size_t joint_net_logit_size = 5001; 60 | 61 | // decoder specific parameters 62 | 63 | static const string subword_file = "../data/params/vocab_list.txt"; 64 | static const string output_beams_logprobs_file = base_output_folder + "beam_and_logprobs.txt"; 65 | static const bool boost_phase = true; 66 | static const float prune_log_prob = -11.512925464970229; // = log(1e-5) 67 | 68 | } 69 | } 70 | } 71 | 72 | #endif 73 | -------------------------------------------------------------------------------- /decoder/header/jointnet.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __JOINTNET_HPP__ 2 | #define __JOINTNET_HPP__ 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | namespace s2t 12 | { 13 | namespace decodernet 14 | { 15 | class jointnet 16 | { 17 | private: 18 | sys::dense dense_1; 19 | sys::dense dense_2; 20 | 21 | gpu_float_array var1; 22 | gpu_float_array var2; 23 | 24 | sys::activation activation_t; 25 | 26 | float one = 1; 27 | float zero = 0; 28 | cudnnTensorDescriptor_t tExamples; 29 | 30 | public: 31 | noCopy(jointnet); 32 | jointnet(); 33 | void init(cudnnHandle_t& cudnn, const std::string& base_model_path); // initialize the jointnet 34 | void operator() (cudnnHandle_t& cudnn, gpu_float_array& input, gpu_float_array& output); 35 | ~jointnet(); // free all resources 36 | }; 37 | } 38 | } 39 | 40 | #endif 41 | -------------------------------------------------------------------------------- /decoder/header/prednet.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __PREDNET_HPP__ 2 | #define __PREDNET_HPP__ 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | namespace s2t 12 | { 13 | namespace decodernet 14 | { 15 | struct DLSTMState 16 | { 17 | gpu_float_array cell_state_h; 18 | gpu_float_array cell_state_c; 19 | }; 20 | 21 | class prednet 22 | { 23 | private: 24 | sys::embedding_table embed_t; 25 | sys::dlstm lstm_t; 26 | 27 | DLSTMState state_buffer[hparams::gpu_states_buffer_size]; 28 | int next_free_state[hparams::gpu_states_buffer_size]; 29 | int state_use_count[hparams::gpu_states_buffer_size]; 30 | int first_free_state_idx; 31 | 32 | gpu_float_array var1; 33 | gpu_float_array var2; 34 | 35 | public: 36 | noCopy(prednet); 37 | prednet(); 38 | void init(cudnnHandle_t& cudnn, const std::string& base_model_path); // initialize the prednet 39 | void free_state(int idx); 40 | void reuse_state(int idx); 41 | void reset_state_buffer(); 42 | int get_zerod_state(); 43 | int operator() (cudnnHandle_t& cudnn, const size_t input_symbol, gpu_float_array& output, int input_state_idx, int output_state_idx = -1); 44 | ~prednet(); // free all resources 45 | }; 46 | } 47 | } 48 | 49 | #endif 50 | -------------------------------------------------------------------------------- /decoder/obj/decoder.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/decoder/obj/decoder.o -------------------------------------------------------------------------------- /decoder/obj/jointnet.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/decoder/obj/jointnet.o -------------------------------------------------------------------------------- /decoder/obj/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/decoder/obj/main.o -------------------------------------------------------------------------------- /decoder/obj/prednet.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/decoder/obj/prednet.o -------------------------------------------------------------------------------- /decoder/src/decoder.cu: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | using namespace s2t::decodernet; 16 | using namespace s2t::sys; 17 | using namespace s2t::common; 18 | using namespace std; 19 | 20 | // kernel for decoder compuatations 21 | __global__ void decoder_concat(size_t in1_sz, size_t in2_sz, float* in1, const float* in2) 22 | { 23 | // concat in2 into in1 24 | size_t index = blockIdx.x*blockDim.x + threadIdx.x; 25 | if(index < in2_sz) 26 | { 27 | in1[in1_sz+index] = in2[index]; 28 | } 29 | } 30 | 31 | // min_first methods 32 | bool min_first::operator()(pair const& pair1, pair const& pair2) 33 | { 34 | // pair with minimum value of first will be at the top of priority queue 35 | return pair1.first > pair2.first; 36 | } 37 | 38 | // TrieNode methods 39 | TrieNode::TrieNode() 40 | { 41 | isCompleteWord = false; 42 | for (int i = 0; i < letters; ++i) 43 | { 44 | children[i] = NULL; 45 | } 46 | } 47 | 48 | TrieNode::~TrieNode() 49 | { 50 | 51 | } 52 | 53 | // Trie methods 54 | Trie::Trie() 55 | { 56 | root = new TrieNode(); 57 | all_trie_nodes.push_back(root); 58 | } 59 | 60 | bool Trie::insert_and_check(vector& word) 61 | { 62 | /* returns true if word already exists; 63 | else returns false and inserts word */ 64 | auto current = root; 65 | for(int i = 0; i < word.size(); ++i) 66 | { 67 | int index = word[i]; 68 | if(!current->children[index]) 69 | { 70 | current->children[index] = new TrieNode(); 71 | all_trie_nodes.push_back(current->children[index]); 72 | } 73 | current = current->children[index]; 74 | } 75 | if(current->isCompleteWord) 76 | return true; 77 | current->isCompleteWord = true; 78 | return false; 79 | } 80 | 81 | Trie::~Trie() 82 | { 83 | for(int i=0; i& sids_1, vector& sids_2) 91 | { 92 | if(sids_1.size() >= sids_2.size()) 93 | { 94 | return false; 95 | } 96 | 97 | for(int i=0; i& pair1, pair& pair2) 107 | { 108 | return (pair1.second < pair2.second); 109 | } 110 | 111 | // log sum exp function for a pair of float values 112 | float logsumexp(float x, float y) 113 | { 114 | float maxval = max(x, y); 115 | return log(exp(x - maxval) + exp(y - maxval)) + maxval; 116 | } 117 | 118 | // decoder methods 119 | decoder::decoder(size_t p_vocab_size, size_t p_blank_index) 120 | { 121 | vocab_size = p_vocab_size; 122 | blank_index = p_blank_index; 123 | 124 | // Read the subword file 125 | { 126 | string subword; 127 | ifstream subwords(hparams::subword_file); 128 | if(subwords.is_open()) 129 | { 130 | while(getline(subwords, subword)) 131 | { 132 | subword_map.push_back(subword); 133 | } 134 | subwords.close(); 135 | } 136 | else 137 | { 138 | cout << "Couldn't open vocabulary file!" << endl; 139 | } 140 | subword_map.push_back(""); // appending blank symbol at last 141 | 142 | assert(vocab_size==subword_map.size() && "Number of subwords in file and vocab_size do not match!"); 143 | assert(vocab_size==hparams::joint_net_logit_size && "hparams::joint_net_logit_size and vocab_size do not match!"); 144 | } 145 | 146 | // intialise prednet and jointnet 147 | { 148 | checkCUDNN(cudnnCreate(&cudnn)); 149 | prednet1.init(cudnn, ""); 150 | jointnet1.init(cudnn, ""); 151 | } 152 | 153 | // initialise the gpu variables 154 | { 155 | prednet_out.init(hparams::max_input_size, hparams::pred_net_logit_size); 156 | enc_pred_concated.init(hparams::max_input_size, hparams::enc_net_logit_size+hparams::pred_net_logit_size); // first 700 enocder, next 700 decoder 157 | jointnet_out.init(hparams::max_input_size, hparams::joint_net_logit_size); 158 | } 159 | 160 | // initialise the cpu variables 161 | { 162 | log_probs = (float*) malloc(hparams::joint_net_logit_size * sizeof(float)); 163 | boost_phase = hparams::boost_phase; 164 | } 165 | } 166 | 167 | void decoder::boost_prob(data_tuple& final, data_tuple& prefix) 168 | { 169 | float boost_log_prob = prefix.log_prob; 170 | size_t input_symbol = prefix.last_decoded_sid; 171 | int output_state_idx, input_state_idx; 172 | for(int i=prefix.beam_sids.size(); i>>(700, 700, enc_pred_concated.ptr, prednet_out.ptr); 208 | jointnet1(cudnn, enc_pred_concated, jointnet_out); 209 | 210 | // loading log_probs in float array 211 | size_t log_probs_N = jointnet_out.data_at_host(&log_probs); 212 | log_prob = log_probs[output_symbol]; 213 | } 214 | 215 | boost_log_prob += log_prob; 216 | input_symbol = output_symbol; 217 | } 218 | 219 | if(prefix.beam_sids.size()+1==final.beam_sids.size()) 220 | { 221 | prednet1.free_state(output_state_idx); 222 | } 223 | else 224 | { 225 | prednet1.free_state(input_state_idx); 226 | prednet1.free_state(output_state_idx); 227 | } 228 | 229 | final.log_prob = logsumexp(final.log_prob, boost_log_prob); 230 | } 231 | 232 | 233 | 234 | void decoder::operator() (const string& encoder_features_file, size_t beamsize, vector>& beams_and_logprobs_out) 235 | { 236 | // resetting state buffer for LSTM 237 | prednet1.reset_state_buffer(); 238 | 239 | auto encoder_features = cnpy::npy_load(encoder_features_file); 240 | size_t acoustic_time_steps = encoder_features.shape[0]; // T * 700 file 241 | 242 | // b_heap related data structures 243 | vector data_b; 244 | priority_queue, vector>, min_first> b_heap; 245 | 246 | // a_heap realted data structures 247 | vector data_a; 248 | priority_queue, vector>, min_first> a_heap; 249 | 250 | // initialse b_heap related data structures before t=0 251 | int zeroed_dlsm_state_idx = prednet1.get_zerod_state(); 252 | data_tuple init_data_tuple = {"", 0.f, blank_index, zeroed_dlsm_state_idx /* hidden index */, {blank_index}}; 253 | prednet1.reuse_state(zeroed_dlsm_state_idx); 254 | data_b.push_back(init_data_tuple); 255 | b_heap.push(make_pair(0.f, 0)); 256 | 257 | for(int t=0; t() + hparams::enc_net_logit_size*t, hparams::enc_net_logit_size); 260 | 261 | // delete all for a_heap; 262 | { 263 | for(int i=0; i> data_b_idx_sids_len_vector; 279 | while(b_heap.size()) 280 | { 281 | pair log_prob_data_idx_pair = b_heap.top(); 282 | data_b_idx_sids_len_vector.push_back(make_pair(log_prob_data_idx_pair.second, data_b[log_prob_data_idx_pair.second].beam_sids.size())); 283 | b_heap.pop(); 284 | } 285 | 286 | sort(data_b_idx_sids_len_vector.begin(), data_b_idx_sids_len_vector.end(), compareSIDsLengths); 287 | 288 | for(int i=0; i=0; --j) 291 | { 292 | // if data_b object at index j is a prefix of data_b object at index i; 293 | if(is_prefix(data_b[data_b_idx_sids_len_vector[j].first].beam_sids, data_b[data_b_idx_sids_len_vector[i].first].beam_sids)) 294 | { 295 | boost_prob(data_b[data_b_idx_sids_len_vector[i].first], data_b[data_b_idx_sids_len_vector[j].first]); 296 | break; 297 | } 298 | } 299 | // data_b object at index i is boosted so push to a_heap; 300 | a_heap.push(make_pair(-data_b[data_b_idx_sids_len_vector[i].first].log_prob, data_b_idx_sids_len_vector[i].first)); 301 | } 302 | } 303 | data_a = data_b; 304 | data_b.clear(); 305 | } 306 | 307 | // choose the most probable for a_heap and iterate 308 | pair top_log_prob_data_idx_pair = a_heap.top(); 309 | a_heap.pop(); 310 | size_t top_id_data_a = top_log_prob_data_idx_pair.second; 311 | float top_log_prob_a = data_a[top_id_data_a].log_prob; 312 | float bmszth_top_log_prob_b = -numeric_limits::infinity(); 313 | Trie trie; 314 | 315 | while(top_log_prob_a!=-numeric_limits::infinity() && bmszth_top_log_prob_b>>(700, 700, enc_pred_concated.ptr, prednet_out.ptr); 323 | jointnet1(cudnn, enc_pred_concated, jointnet_out); 324 | 325 | // loading log_probs in float array 326 | size_t log_probs_N = jointnet_out.data_at_host(&log_probs); 327 | 328 | // add blank transition to B 329 | if(top_log_prob_a+log_probs[blank_index] > bmszth_top_log_prob_b && !trie.insert_and_check(data_a[top_id_data_a].beam_sids)) // and not already in trie: 330 | { 331 | data_tuple next_data_tuple = {data_a[top_id_data_a].beam_string, top_log_prob_a + log_probs[blank_index], data_a[top_id_data_a].last_decoded_sid, data_a[top_id_data_a].hidden_idx, data_a[top_id_data_a].beam_sids}; 332 | prednet1.reuse_state(data_a[top_id_data_a].hidden_idx); 333 | 334 | b_heap.push(make_pair(next_data_tuple.log_prob, data_b.size())); 335 | data_b.push_back(next_data_tuple); 336 | 337 | if(b_heap.size()==beamsize+1) 338 | { 339 | b_heap.pop(); 340 | } 341 | if(b_heap.size()==beamsize) 342 | { 343 | pair log_prob_data_idx_pair = b_heap.top(); 344 | bmszth_top_log_prob_b = data_b[log_prob_data_idx_pair.second].log_prob; 345 | } 346 | } 347 | 348 | // add non-blank transition to A 349 | for(int i=0; i::infinity(); 364 | if(a_heap.size()) 365 | { 366 | top_log_prob_data_idx_pair = a_heap.top(); 367 | a_heap.pop(); 368 | top_id_data_a = top_log_prob_data_idx_pair.second; 369 | top_log_prob_a = data_a[top_id_data_a].log_prob; 370 | } 371 | } 372 | } 373 | 374 | // dealloc all hiddens floats 375 | for(int i=0; i log_prob_data_idx_pair = b_heap.top(); b_heap.pop(); 384 | int data_b_idx = log_prob_data_idx_pair.second; 385 | beams_and_logprobs_out.push_back(make_pair(data_b[data_b_idx].beam_string, data_b[data_b_idx].log_prob)); 386 | } 387 | } 388 | 389 | decoder::~decoder() 390 | { 391 | // de-initialise the cpu variables 392 | { 393 | free(log_probs); 394 | } 395 | } -------------------------------------------------------------------------------- /decoder/src/jointnet.cu: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | // #include 10 | #include 11 | 12 | 13 | using namespace s2t::decodernet; 14 | using namespace s2t::common; 15 | using namespace std; 16 | 17 | jointnet::jointnet() 18 | {} 19 | 20 | void jointnet::init(cudnnHandle_t& cudnn, const std::string& base_model_path) 21 | { 22 | size_t dense_1_hidden_size = 0; 23 | size_t dense_2_hidden_size = 0; 24 | 25 | // initialize dense_1 26 | { 27 | auto kernel_weight = cnpy::npy_load(base_model_path + hparams::joint_net_dense_0_kernel); 28 | auto bias_weight = cnpy::npy_load(base_model_path + hparams::joint_net_dense_0_bias); 29 | 30 | dense_1.init(kernel_weight, bias_weight); 31 | 32 | dense_1_hidden_size = kernel_weight.shape[1]; 33 | 34 | cout << "JointNet Dense 1 Size: " << kernel_weight.shape[0] << " " << kernel_weight.shape[1] << endl; 35 | } 36 | 37 | // initialise relu activation layer 38 | { 39 | activation_t.init(1, dense_1_hidden_size, 1, 1, CUDNN_ACTIVATION_RELU); 40 | } 41 | 42 | // initialize dense_2 43 | { 44 | auto kernel_weight = cnpy::npy_load(base_model_path + hparams::joint_net_dense_1_kernel); 45 | auto bias_weight = cnpy::npy_load(base_model_path + hparams::joint_net_dense_1_bias); 46 | 47 | dense_2.init(kernel_weight, bias_weight); 48 | 49 | dense_2_hidden_size = kernel_weight.shape[1]; 50 | 51 | cout << "JointNet Dense 2 Size: " << kernel_weight.shape[0] << " " << kernel_weight.shape[1] << endl; 52 | } 53 | 54 | // intitlaize gpu variables 55 | { 56 | var1.init(hparams::max_input_size, dense_1_hidden_size); 57 | // var2.init(hparams::max_input_size, dense_2_hidden_size); 58 | cudnnCreateTensorDescriptor(&tExamples); 59 | cudnnSetTensor4dDescriptor(tExamples, cudnnTensorFormat_t::CUDNN_TENSOR_NCHW, cudnnDataType_t::CUDNN_DATA_FLOAT, 1, dense_2_hidden_size, 1, 1); 60 | } 61 | } 62 | 63 | 64 | void jointnet::operator() (cudnnHandle_t& cudnn, gpu_float_array& input, gpu_float_array& output) 65 | { 66 | // reset and reshape the Vars based on input size 67 | var1.reset(); 68 | var1.reshape(1, var1.shape[1]); 69 | 70 | dense_1(cudnn, input, var1); 71 | activation_t(cudnn, var1); 72 | dense_2(cudnn, var1, output); 73 | cudnnStatus_t status = cudnnSoftmaxForward(cudnn, cudnnSoftmaxAlgorithm_t::CUDNN_SOFTMAX_LOG, cudnnSoftmaxMode_t::CUDNN_SOFTMAX_MODE_INSTANCE, &one, tExamples, output.ptr, &zero, tExamples, output.ptr); 74 | } 75 | 76 | jointnet::~jointnet() 77 | {} -------------------------------------------------------------------------------- /decoder/src/main.cu: -------------------------------------------------------------------------------- 1 | //# define NDEBUG // switch off all the assert calls. 2 | //#undef NDEBUG 3 | // #ifdef ONLY_T2 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | using namespace s2t; 21 | using namespace std; 22 | using namespace s2t::common; 23 | using namespace s2t::decodernet; 24 | using namespace std::chrono; 25 | 26 | void testprednet(cudnnHandle_t& cudnn) 27 | { 28 | // testing prednet 29 | size_t input_symbol = 1; 30 | 31 | prednet prednet1; 32 | prednet1.init(cudnn, ""); 33 | 34 | gpu_float_array output; 35 | output.init(hparams::max_input_size, 700); 36 | int input_state_idx = prednet1.get_zerod_state(); 37 | prednet1.reuse_state(input_state_idx); 38 | prednet1(cudnn, input_symbol, output, input_state_idx); 39 | prednet1.free_state(input_state_idx); 40 | 41 | string filename = hparams::base_output_folder + "cpp_prednet_output.npy"; 42 | log_e("pred net output", output.log(filename)); 43 | } 44 | 45 | void testjointnet(cudnnHandle_t& cudnn) 46 | { 47 | auto encoder_features = cnpy::npy_load(hparams::joint_net_encoder_feats); 48 | auto decoder_features = cnpy::npy_load(hparams::joint_net_prediction_feats); 49 | encoder_features.merge(decoder_features); 50 | 51 | gpu_float_array jointnet_input; 52 | jointnet_input.init(encoder_features.shape); 53 | cudaMemcpy(jointnet_input.ptr, encoder_features.data(), jointnet_input.size()*sizeof(float_t), cudaMemcpyHostToDevice); 54 | jointnet_input.reshape(1, 1400); 55 | 56 | jointnet jointnet1; 57 | jointnet1.init(cudnn, ""); 58 | 59 | gpu_float_array output; 60 | output.init(hparams::max_input_size, 301); 61 | jointnet1(cudnn, jointnet_input, output); 62 | 63 | string filename = hparams::base_output_folder + "cpp_joint_net_dense_2_softmax_final.npy"; 64 | log_e("joint net output softmax output", output.log(filename)); 65 | } 66 | 67 | void testdecoder() 68 | { 69 | const string encoder_features_file = hparams::base_input_folder + "encoder_features.npy"; 70 | size_t beamsize = 1000; 71 | size_t vocab_size = 301; 72 | size_t blank_index = 300; 73 | decoder decoder1(vocab_size, blank_index); 74 | vector> beams_and_logprobs; 75 | 76 | // calling the decoder 77 | auto time_start = high_resolution_clock::now(); 78 | decoder1(encoder_features_file, beamsize, beams_and_logprobs); 79 | auto time_stop = high_resolution_clock::now(); 80 | auto time_duration = duration_cast(time_stop - time_start); 81 | cout << "TIME ELAPSED IN DECODING: " << time_duration.count() << endl; 82 | 83 | assert(beamsize==beams_and_logprobs.size() && "Number of beams returned and beamsize do not match!"); 84 | 85 | // write beams to output file 86 | ofstream outfile(hparams::output_beams_logprobs_file); 87 | if (outfile.is_open()) 88 | { 89 | for(int i=0; iend_index) 123 | { 124 | ++count; 125 | continue; 126 | } 127 | 128 | string encoder_features_file_path = "../data/inputs/" + encoder_features_file; 129 | string output_beams_logprobs_file = "../data/outputs/" + encoder_features_file + ".txt"; 130 | // cout << encoder_features_file_path << " Input file!" << endl; 131 | // cout << output_beams_logprobs_file << " Output file!" << endl; 132 | vector> beams_and_logprobs; 133 | 134 | auto time_start = high_resolution_clock::now(); 135 | decoder1(encoder_features_file_path, beamsize, beams_and_logprobs); 136 | auto time_stop = high_resolution_clock::now(); 137 | auto time_duration = duration_cast(time_stop - time_start); 138 | total_time += time_duration.count(); 139 | // cout << "TIME ELAPSED IN DECODING (" << count << "): " << time_duration.count() << endl; 140 | 141 | ofstream outfile(output_beams_logprobs_file); 142 | if (outfile.is_open()) 143 | { 144 | for(int i=int(beams_and_logprobs.size())-1; i>=0; i--) 145 | { 146 | outfile << beams_and_logprobs[i].first << "\t"; 147 | outfile << fixed << setprecision(16) << beams_and_logprobs[i].second << "\n"; 148 | } 149 | outfile.close(); 150 | ++count; 151 | } 152 | else 153 | { 154 | cout << "Couldn't open output file!\n"; 155 | } 156 | } 157 | metadata.close(); 158 | } 159 | else 160 | { 161 | cout << "Couldn't open metadata file!\n"; 162 | } 163 | cout << "Average time for decoding: " << total_time / (end_index-begin_index+1) << endl; 164 | } 165 | 166 | int main(int argc, char *argv[]) 167 | { 168 | // create a cuda handle 169 | cudnnHandle_t cudnn; 170 | checkCUDNN(cudnnCreate(&cudnn)); 171 | 172 | // testprednet(cudnn); 173 | // testjointnet(cudnn); 174 | // testdecoder(); 175 | 176 | assert(argc==6 && "pararm 1: path to metadata; pararm 2: begin_index; pararm 3: end_index; param 4: beamsize; param 5 vocabsize;"); 177 | string metadata_path = argv[1]; 178 | int begin_index = stoi(argv[2]), end_index = stoi(argv[3]); 179 | size_t beamsize = stoi(argv[4]), vocab_size = stoi(argv[5]); // vocab size 301 or 5001 180 | cout << "Loading weights from: " << s2t::decodernet::hparams::base_param_folder << "\n"; 181 | decodemultiple(metadata_path, begin_index, end_index, beamsize, vocab_size); 182 | cudnnDestroy(cudnn); 183 | return 0; 184 | } 185 | // #endif 186 | 187 | 188 | -------------------------------------------------------------------------------- /decoder/src/prednet.cu: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | using namespace s2t::decodernet; 12 | using namespace s2t::common; 13 | using namespace std; 14 | 15 | prednet::prednet() 16 | { 17 | 18 | } 19 | 20 | void prednet::init(cudnnHandle_t& cudnn, const std::string& base_model_path) 21 | { 22 | // initialize embedding_table 23 | size_t embedding_sz = 0; 24 | size_t lstm_hidden_size = 0; 25 | 26 | { 27 | auto arr = cnpy::npy_load(hparams::pred_net_embedding); 28 | embed_t.init(arr); 29 | embedding_sz = arr.shape[1]; 30 | cout << "PredNet Emdedding Size: " << arr.shape[0] << " " << arr.shape[1] << endl; 31 | } 32 | 33 | size_t lstm_input_size = embedding_sz; 34 | 35 | // intitalize lstm_t 36 | { 37 | auto kernel_weight_0 = cnpy::npy_load(hparams::pred_net_lstm_0_kernel); 38 | auto bias_weight_0 = cnpy::npy_load(hparams::pred_net_lstm_0_bias); 39 | 40 | auto kernel_weight_1 = cnpy::npy_load(hparams::pred_net_lstm_1_kernel); 41 | auto bias_weight_1= cnpy::npy_load(hparams::pred_net_lstm_1_bias); 42 | 43 | kernel_weight_0.merge(kernel_weight_1); 44 | bias_weight_0.merge(bias_weight_1); 45 | 46 | lstm_hidden_size = kernel_weight_0.shape[1] / 4; 47 | 48 | lstm_t.init(kernel_weight_0, bias_weight_0, hparams::pred_net_lstm_layers, lstm_hidden_size, lstm_input_size); 49 | } 50 | 51 | // initialize DLSTM state 52 | for(size_t i=0; i 5 | #include 6 | #include 7 | 8 | namespace s2t 9 | { 10 | 11 | using namespace common; 12 | 13 | namespace sys 14 | { 15 | 16 | class activation 17 | { 18 | private: 19 | cudnnTensorDescriptor_t in_out_descriptor; 20 | cudnnActivationDescriptor_t activation_descriptor; 21 | 22 | public: 23 | noCopy(activation); 24 | activation(){} 25 | /* 26 | Alloc memory at device and memcopy the parameters ( shared memory ) 27 | * */ 28 | void init(size_t in_rows, size_t in_cols, size_t in_channels, 29 | size_t batch_size = 1, cudnnActivationMode_t mode = CUDNN_ACTIVATION_RELU) 30 | { 31 | checkCUDNN(cudnnCreateTensorDescriptor(&in_out_descriptor)); 32 | checkCUDNN(cudnnSetTensor4dDescriptor(in_out_descriptor, 33 | /*format=*/CUDNN_TENSOR_NHWC, 34 | /*dataType=*/CUDNN_DATA_FLOAT, 35 | /*batch_size=*/batch_size, 36 | /*channels=*/in_channels, 37 | /*image_height=*/in_rows, 38 | /*image_width=*/in_cols)); 39 | 40 | checkCUDNN(cudnnCreateActivationDescriptor(&activation_descriptor)); 41 | checkCUDNN(cudnnSetActivationDescriptor(activation_descriptor, 42 | /*mode=*/mode, 43 | /*reluNanOpt=*/CUDNN_PROPAGATE_NAN, 44 | /*relu_coef=*/0)); 45 | 46 | } 47 | 48 | void operator () (cudnnHandle_t& cudnn, gpu_float_array& d_input) 49 | { 50 | const float alpha = 1, beta = 0; 51 | // Perform the forward pass of the activation 52 | checkCUDNN(cudnnActivationForward(cudnn, 53 | activation_descriptor, 54 | &alpha, 55 | in_out_descriptor, 56 | d_input.ptr, 57 | &beta, 58 | in_out_descriptor, 59 | d_input.ptr)); 60 | 61 | 62 | d_input.reset(d_input.size()); 63 | 64 | } 65 | 66 | // free host & device memory 67 | ~activation() 68 | { 69 | cudnnDestroyTensorDescriptor(in_out_descriptor); 70 | cudnnDestroyActivationDescriptor(activation_descriptor); 71 | } 72 | }; 73 | } 74 | } 75 | #endif -------------------------------------------------------------------------------- /sys/header/dense.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __DENSE_HPP__ 2 | #define __DENSE_HPP__ 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | namespace s2t 10 | { 11 | using namespace common; 12 | 13 | namespace sys 14 | { 15 | class dense 16 | { 17 | private: 18 | cublasHandle_t handle ; 19 | gpu_float_array d_kernel; // this is Rows*Cols [ column major memory layoput ] 20 | const_gpu_float_array d_bias; // Bias vector at gpu constant memory 21 | 22 | bool hasbias; 23 | 24 | public: 25 | noCopy(dense); 26 | dense(); 27 | /* 28 | Alloc memory at device and memcopy the parameters ( shared memory ) 29 | * */ 30 | void init(const cnpy::NpyArray& h_kernel, const cnpy::NpyArray& h_bias); 31 | void init(const cnpy::NpyArray& h_kernel); 32 | void operator() (cudnnHandle_t& cudnn, const gpu_float_array& d_input, gpu_float_array& d_output, size_t offset=0); 33 | void forward (cudnnHandle_t& cudnn, const gpu_float_array& d_input, gpu_float_array& d_output, size_t ldc, float alp=1.0, float bet =1.0); 34 | 35 | // free host & device memory 36 | ~dense(); 37 | }; 38 | } 39 | } 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /sys/header/dlstm.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __DLSTM_HPP__ 2 | #define __DLSTM_HPP__ 3 | // Class for forward propagation of LSTM with zoneout in CUDA 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | namespace s2t 10 | { 11 | using namespace common; 12 | 13 | namespace sys 14 | { 15 | class dlstm 16 | { 17 | public: 18 | gpu_float_array d_kernel; 19 | gpu_float_array d_bias; 20 | 21 | // workspace for lastm execution 22 | gpu_float_array tmp_h; 23 | gpu_float_array tmp_i; 24 | gpu_float_array var1; 25 | 26 | // cublas handle 27 | cublasHandle_t handle; 28 | 29 | // model parameters 30 | size_t numLayers; 31 | size_t hiddenSize; 32 | size_t inputSize; 33 | size_t numElements; 34 | 35 | cudaStream_t stream_i; 36 | cudaStream_t stream_h; 37 | 38 | dim3 blockDim; 39 | dim3 gridDim; 40 | 41 | public: 42 | dlstm(); 43 | void init(const cnpy::NpyArray& h_kernel, const cnpy::NpyArray& h_bias, 44 | size_t numLayers, size_t hiddenSize, size_t inputSize); 45 | 46 | void operator()(const gpu_float_array& input, const gpu_float_array& h_data, const gpu_float_array& c_data 47 | , gpu_float_array& output, gpu_float_array& h_data_out, gpu_float_array& c_data_out, 48 | float zoneout_factor_cell = 0.f, float zoneout_factor_outputs = 0.f, float forget_bias = 1.f) ; 49 | 50 | ~dlstm(); 51 | }; 52 | } 53 | } 54 | #endif 55 | -------------------------------------------------------------------------------- /sys/header/embedding_table.hpp: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | --This class searches the embedding vector for an character in embedding table and places the vector into given memory location 4 | --All operations are done at device only 5 | --This doesn't create any memory so making free is the responsibility of caller 6 | 7 | **/ 8 | #ifndef __embedding_hpp__ 9 | #define __embedding_hpp__ 10 | 11 | #pragma once 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | #include 19 | 20 | using namespace s2t::common; 21 | 22 | namespace s2t 23 | { 24 | namespace sys 25 | { 26 | class embedding_table 27 | { 28 | private: 29 | gpu_float_array d_table; // device memory 30 | 31 | public: 32 | noCopy(embedding_table); 33 | embedding_table() 34 | { } 35 | 36 | void init(cnpy::NpyArray h_data) 37 | { 38 | d_table.init(h_data.shape); 39 | cudaMemcpy(d_table.ptr, h_data.data(), d_table.size()*sizeof(float_t), cudaMemcpyHostToDevice); 40 | } 41 | 42 | void lookup(cudnnHandle_t& cudnn, const std::vector& seq, gpu_float_array& output); 43 | ~embedding_table() 44 | { } 45 | }; 46 | } 47 | } 48 | 49 | #endif -------------------------------------------------------------------------------- /sys/obj/dense.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/sys/obj/dense.o -------------------------------------------------------------------------------- /sys/obj/dlstm.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/sys/obj/dlstm.o -------------------------------------------------------------------------------- /sys/obj/embedding_table.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iamjanvijay/rnnt_decoder_cuda/bdd85a708d1036a93108cffbc083822b9377c7a1/sys/obj/embedding_table.o -------------------------------------------------------------------------------- /sys/src/dense.cu: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace s2t::sys; 4 | 5 | __global__ void dense_add(size_t sz, float_t* src, float_t* dest, size_t dst_offset) 6 | { 7 | size_t srcIndex = threadIdx.x; 8 | size_t destIndex = blockIdx.x*blockDim.x + threadIdx.x; 9 | if(destIndex < sz) 10 | { 11 | dest[destIndex + dst_offset] += src[srcIndex]; 12 | } 13 | } 14 | 15 | __global__ void dense_add_conv(size_t sz, float_t* src, float_t* dest, size_t audio_len) 16 | { 17 | size_t index = blockIdx.x*blockDim.x + threadIdx.x; 18 | if(index < sz) 19 | { 20 | dest[index] += src[index/audio_len]; 21 | } 22 | } 23 | 24 | 25 | dense::dense() { } 26 | 27 | void dense::init(const cnpy::NpyArray& h_kernel, const cnpy::NpyArray& h_bias) 28 | { 29 | checkCUBLAS(cublasCreate (& handle )); 30 | (cublasSetMathMode(handle, CUBLAS_TENSOR_OP_MATH)); 31 | 32 | // load kernel 33 | d_kernel.init(h_kernel.shape); 34 | cudaMemcpy(d_kernel.ptr, h_kernel.data(), d_kernel.size()*sizeof(float_t), cudaMemcpyHostToDevice); 35 | 36 | // load bias 37 | d_bias.init(h_bias.shape); 38 | cudaMemcpy(d_bias.ptr, h_bias.data(), d_bias.size()*sizeof(float_t), cudaMemcpyHostToDevice); 39 | 40 | hasbias = true; 41 | } 42 | 43 | void dense::init(const cnpy::NpyArray& h_kernel) 44 | { 45 | checkCUBLAS(cublasCreate (& handle )); 46 | (cublasSetMathMode(handle, CUBLAS_TENSOR_OP_MATH)); 47 | 48 | // load kernel 49 | d_kernel.init(h_kernel.shape); 50 | cudaMemcpy(d_kernel.ptr, h_kernel.data(), d_kernel.size()*sizeof(float_t), cudaMemcpyHostToDevice); 51 | 52 | hasbias = false; 53 | } 54 | 55 | // This computes - d_input(n*k) * d_kernel (k*m) = d_output (n*m) 56 | 57 | void dense::operator () (cudnnHandle_t& cudnn, const gpu_float_array& d_input, gpu_float_array& d_output, size_t ptr_offset) 58 | { 59 | const float alpha = 1, beta = 0; 60 | size_t m = d_kernel.shape[1]; 61 | size_t k = d_kernel.shape[0]; 62 | size_t n = d_input.shape[0]; 63 | 64 | //std::cout<>>(m, d_bias.ptr, d_output.ptr, ptr_offset); 85 | } 86 | } 87 | else 88 | { 89 | // cublasSgemm(handle, CUBLAS_OP_N, CUBLAS_OP_N, m, n, k, &alpha, d_kernel.ptr, m, d_input.ptr, k, &beta, d_output.ptr + ptr_offset, m); 90 | cublasSgemmEx(handle, CUBLAS_OP_N, CUBLAS_OP_N, m, n, k, &alpha, d_kernel.ptr, CUDA_R_32F, m, d_input.ptr, CUDA_R_32F, k, &beta, d_output.ptr + ptr_offset, CUDA_R_32F, m); 91 | 92 | // add bias 93 | if(hasbias) 94 | { 95 | dense_add<<>>(m*n, d_bias.ptr, d_output.ptr, ptr_offset); 96 | } 97 | } 98 | } 99 | 100 | 101 | 102 | void dense::forward(cudnnHandle_t& cudnn, const gpu_float_array& d_input, gpu_float_array& d_output, size_t ldc, float alp, float bet) 103 | { 104 | 105 | const float alpha = alp, beta = bet; 106 | size_t m = d_kernel.shape[1]; 107 | size_t k = d_kernel.shape[0]; 108 | size_t n = d_input.shape[0]; 109 | 110 | { 111 | 112 | m = d_input.shape[1]; 113 | n = d_kernel.shape[0]; 114 | k = d_kernel.shape[1]; 115 | // cublasSgemm(handle, CUBLAS_OP_N, CUBLAS_OP_N, m, n, k, &alpha, d_kernel.ptr, m, d_input.ptr, k, &beta, d_output.ptr, m); 116 | // cublasSgemm(handle, CUBLAS_OP_N, CUBLAS_OP_N, m, n, k, &alpha, d_input.ptr, m, d_kernel.ptr, k, &beta, d_output.ptr, ldc); 117 | cublasSgemmEx(handle, CUBLAS_OP_N, CUBLAS_OP_N, m, n, k, &alpha, d_input.ptr, CUDA_R_32F, m, d_kernel.ptr, CUDA_R_32F, k, &beta, d_output.ptr, CUDA_R_32F, ldc); 118 | 119 | if(hasbias) 120 | { 121 | dense_add_conv<<<(d_output.size())/512, 512>>>(d_output.size(), d_bias.ptr, d_output.ptr, ldc); 122 | } 123 | } 124 | } 125 | 126 | 127 | // free host & device memory 128 | dense::~dense() 129 | { 130 | cublasDestroy ( handle ); 131 | } 132 | -------------------------------------------------------------------------------- /sys/src/dlstm.cu: -------------------------------------------------------------------------------- 1 | // Class for forward propagation of LSTM with zoneout in CUDA 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace s2t::sys; 8 | 9 | __forceinline__ __device__ float d_sigmoidf(float in) { 10 | return 1.f / (1.f + expf(-in)); 11 | } 12 | 13 | __global__ void d_elementWise_fp(int hiddenSize, int miniBatch, 14 | float *tmp_h, 15 | float *tmp_i, 16 | float *bias, 17 | float *h_in, 18 | float *h_out, 19 | float *i_out, 20 | float *c_in, 21 | float *c_out, 22 | float zoneout_cell = 0.f, 23 | float zoneout_outputs = 0.f, 24 | float forget_bias = 1.f) { 25 | int index = blockIdx.x * blockDim.x + threadIdx.x; 26 | 27 | int numElements = hiddenSize * miniBatch; 28 | if (index >= numElements) return; 29 | 30 | int batch = index / hiddenSize; 31 | int gateIndex = (index % hiddenSize) + 4 * batch * hiddenSize; 32 | 33 | float g[4]; 34 | 35 | for (int i = 0; i < 4; i++) { 36 | g[i] = tmp_i[i * hiddenSize + gateIndex] + tmp_h[i * hiddenSize + gateIndex]; 37 | g[i] += bias[i * hiddenSize + index % hiddenSize] + ((i==2) ? forget_bias : 0); 38 | } 39 | 40 | float in_gate = d_sigmoidf(g[0]); 41 | float in_gate2 = tanhf(g[1]); 42 | float forget_gate = d_sigmoidf(g[2]); 43 | float out_gate = d_sigmoidf(g[3]); 44 | 45 | float val = (forget_gate * c_in[index]) + (in_gate * in_gate2); 46 | 47 | c_out[index] = (1.f - zoneout_cell) * val + zoneout_cell * c_in[index]; 48 | 49 | val = out_gate * tanhf(val); 50 | 51 | h_out[index] = (1.f - zoneout_outputs) * val + zoneout_outputs * h_in[index]; 52 | i_out[index] = val; 53 | } 54 | 55 | dlstm::dlstm() {} 56 | 57 | void dlstm::init(const cnpy::NpyArray& h_kernel, const cnpy::NpyArray& h_bias, 58 | size_t numLayers, size_t hiddenSize, size_t inputSize) 59 | { 60 | this->numLayers = numLayers; 61 | this->hiddenSize = hiddenSize; 62 | this->inputSize = inputSize; 63 | this->numElements = hiddenSize; 64 | 65 | // load kernel 66 | d_kernel.init(h_kernel.shape); 67 | cudaMemcpy(d_kernel.ptr, h_kernel.data(), d_kernel.size()*sizeof(float_t), cudaMemcpyHostToDevice); 68 | 69 | // load bias 70 | d_bias.init(h_bias.shape); 71 | cudaMemcpy(d_bias.ptr, h_bias.data(), d_bias.size()*sizeof(float_t), cudaMemcpyHostToDevice); 72 | 73 | checkCUBLAS(cublasCreate(&handle)); 74 | 75 | tmp_h.init(4 * numLayers, numElements); 76 | tmp_i.init(4, numElements); 77 | var1.init(1,numElements); 78 | 79 | blockDim.x = 256; 80 | gridDim.x = (numElements + blockDim.x - 1) / blockDim.x; 81 | } 82 | 83 | void dlstm::operator()(const gpu_float_array& input, const gpu_float_array& h_data, const gpu_float_array& c_data 84 | , gpu_float_array& output, gpu_float_array& h_data_out, gpu_float_array& c_data_out, 85 | float zoneout_factor_cell, float zoneout_factor_outputs, float forget_bias) 86 | { 87 | float alpha = 1.f; 88 | float beta = 0.f; 89 | 90 | tmp_i.reset(); 91 | tmp_h.reset(); 92 | var1.reset(); 93 | 94 | checkCUBLAS(cublasSgemm(handle, 95 | CUBLAS_OP_N, CUBLAS_OP_N, 96 | 4 * hiddenSize, 97 | 1, 98 | inputSize, 99 | &alpha, 100 | d_kernel.ptr, // kernel 101 | 4 * hiddenSize, 102 | input.ptr, // data 103 | inputSize, 104 | &beta, 105 | tmp_i.ptr, // output 106 | 4 * hiddenSize)); 107 | 108 | 109 | checkCUBLAS(cublasSgemm(handle, 110 | CUBLAS_OP_N, CUBLAS_OP_N, 111 | 4 * hiddenSize, 112 | 1, 113 | hiddenSize, 114 | &alpha, 115 | d_kernel.ptr + (4 * hiddenSize * inputSize), 116 | 4 * hiddenSize, 117 | h_data.ptr, // h_data 118 | hiddenSize, 119 | &beta, 120 | tmp_h.ptr, // output 121 | 4 * hiddenSize)); 122 | 123 | //checkCUDAERROR(cudaDeviceSynchronize()); 124 | 125 | d_elementWise_fp <<< gridDim, blockDim >>> 126 | (hiddenSize, 127 | 1, 128 | tmp_h.ptr, 129 | tmp_i.ptr, 130 | d_bias.ptr, 131 | h_data.ptr, 132 | h_data_out.ptr, // + numElements, // h_out 133 | var1.ptr, // + inputSize, // i_out 134 | c_data.ptr, 135 | c_data_out.ptr, // + numElements, // c_out 136 | zoneout_factor_cell, 137 | zoneout_factor_outputs, 138 | forget_bias); 139 | 140 | //checkCUDAERROR(cudaDeviceSynchronize()); 141 | 142 | 143 | // layer -2 operation.. 144 | checkCUBLAS(cublasSgemm(handle, 145 | CUBLAS_OP_N, CUBLAS_OP_N, 146 | 4 * hiddenSize, 147 | 1, 148 | hiddenSize, 149 | &alpha, 150 | d_kernel.ptr + (hiddenSize * (hiddenSize + inputSize) * 4), 151 | 4 * hiddenSize, 152 | var1.ptr, // + inputSize, 153 | hiddenSize, 154 | &beta, 155 | tmp_i.ptr, 156 | 4 * hiddenSize)); 157 | 158 | 159 | checkCUBLAS(cublasSgemm(handle, 160 | CUBLAS_OP_N, CUBLAS_OP_N, 161 | 4 * hiddenSize, 162 | 1, 163 | hiddenSize, 164 | &alpha, 165 | d_kernel.ptr + ((hiddenSize * hiddenSize * 4 + hiddenSize * (hiddenSize + inputSize) * 4)), 166 | 4 * hiddenSize, 167 | h_data.ptr + numElements, 168 | hiddenSize, 169 | &beta, 170 | tmp_h.ptr + (4 * numElements), 171 | 4 * hiddenSize)); 172 | 173 | //checkCUDAERROR(cudaDeviceSynchronize()); 174 | d_elementWise_fp <<< gridDim, blockDim >>> 175 | (hiddenSize, 1, 176 | tmp_h.ptr + (4 * numElements), 177 | tmp_i.ptr, 178 | d_bias.ptr + (4 * hiddenSize), 179 | h_data.ptr + numElements, 180 | h_data_out.ptr + numElements, // h_out 181 | output.ptr, // + numElements + inputSize, //i_out 182 | c_data.ptr + numElements, 183 | c_data_out.ptr + numElements, //c_out 184 | zoneout_factor_cell, 185 | zoneout_factor_outputs, 186 | forget_bias); 187 | 188 | //checkCUDAERROR(cudaDeviceSynchronize()); 189 | } 190 | 191 | dlstm::~dlstm() { 192 | } 193 | -------------------------------------------------------------------------------- /sys/src/embedding_table.cu: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace s2t::sys; 5 | 6 | __global__ void embed_copy(size_t destIndex, size_t srcIndex, float_t* src, float_t* dest) 7 | { 8 | // int i = blockIdx.x*blockDim.x + threadIdx.x; 9 | //printf("Hello from block %d, thread %d %d\n", blockIdx.x, threadIdx.x, blockDim.x); 10 | 11 | // TBD:: put a check on length 12 | 13 | size_t gpu_srcIndex = srcIndex*blockDim.x + threadIdx.x; 14 | size_t gpu_destIndex = destIndex*blockDim.x + threadIdx.x; 15 | 16 | dest[gpu_destIndex] = src[gpu_srcIndex]; 17 | } 18 | 19 | void embedding_table::lookup(cudnnHandle_t& cudnn, const std::vector& seq, gpu_float_array& output) 20 | { 21 | output.reshape(seq.size(), d_table.shape[1]); 22 | 23 | // can we make a single kernel call ? 24 | for(size_t index = 0;index < seq.size();++index) 25 | { 26 | embed_copy<<<1, output.shape[1]>>>(index, seq[index], d_table.ptr, output.ptr); 27 | } 28 | } --------------------------------------------------------------------------------