Esempio n. 1
0
        // TODO: recycle ptr!
        void load() {
            is_loaded = true;
            adjfilesize = get_filesize(filename_adj);
            edatafilesize = get_filesize(filename_edata);
            
            bool async_inedgedata_loading = !svertex_t().computational_edges();
            
#ifdef SUPPORT_DELETIONS
            async_inedgedata_loading = false;  // Currently we encode the deleted status of an edge into the edge value (should be changed!),
                                               // so we need the edge data while loading
#endif
                        
            //preada(adjf, adjdata, adjfilesize, 0);
            
            adj_session = iomgr->open_session(filename_adj, true);
            iomgr->managed_malloc(adj_session, &adjdata, adjfilesize, 0);
            adj_stream_session = streaming_task(iomgr, adj_session, adjfilesize, (char**) &adjdata);
            
            iomgr->launch_stream_reader(&adj_stream_session);            
            /* Initialize edge data asynchonous reading */
            if (!only_adjacency) {
                edata_iosession = iomgr->open_session(filename_edata, false);
                
                iomgr->managed_malloc(edata_iosession, &edgedata, edatafilesize, 0);
                if (async_inedgedata_loading) {
                    iomgr->managed_preada_async(edata_iosession, &edgedata, edatafilesize, 0);
                } else {
                    iomgr->managed_preada_now(edata_iosession, &edgedata, edatafilesize, 0);
                }
            }
        }
 vdblock load_block(int blockid) {
     vdblock db(blockid);
     
     std::string blockfname = blockfilename(blockid);
     db.fd = iomgr->open_session(blockfname, false, true);
     int realsize = get_block_uncompressed_size(blockfname, -1);
     assert(realsize > 0);
     
     iomgr->managed_malloc(db.fd, &db.data, realsize, 0);
     iomgr->managed_preada_now(db.fd, &db.data, realsize, 0);
     db.dblock = new dynamicdata_block<VertexDataType>(verticesperblock, (uint8_t *)db.data, realsize);
     return db;
 }
Esempio n. 3
0
 /**
   * Loads a chunk of vertex degrees
   * @param vertex_st first vertex id
   * @param vertex_en last vertex id, inclusive
   */
 virtual void load(vid_t _vertex_st, vid_t _vertex_en) {
     assert(_vertex_en >= _vertex_st);
     vertex_st = _vertex_st;
     vertex_en = _vertex_en;
     
     size_t datasize = (vertex_en - vertex_st + 1) * sizeof(degree);
     size_t datastart = vertex_st * sizeof(degree);
     
     if (loaded_chunk != NULL) {
         iomgr->managed_release(filedesc, &loaded_chunk);
     }
     
     iomgr->managed_malloc(filedesc, &loaded_chunk, datasize, datastart);
     iomgr->managed_preada_now(filedesc, &loaded_chunk, datasize, datastart);
 }
Esempio n. 4
0
        /**
         * Loads a chunk of vertex values
         * @param vertex_st first vertex id
         * @param vertex_en last vertex id, inclusive
         */
        virtual void load(vid_t _vertex_st, vid_t _vertex_en) {
            if (!use_mmap) {
                assert(_vertex_en >= _vertex_st);
                vertex_st = _vertex_st;
                vertex_en = _vertex_en;
                
                size_t datasize = (vertex_en - vertex_st + 1)* sizeof(VertexDataType);
                size_t datastart = vertex_st * sizeof(VertexDataType);
                
                if (loaded_chunk != NULL) {
                    iomgr->managed_release(filedesc, &loaded_chunk);
                }
                
                iomgr->managed_malloc(filedesc, &loaded_chunk, datasize, datastart);
                iomgr->managed_preada_now(filedesc, &loaded_chunk, datasize, datastart);
            } else {
                // Do nothing
            }

        }
Esempio n. 5
0
 inline void check_adjblock(size_t toread) {
     if (curadjblock == NULL || curadjblock->end <= adjoffset + toread) {
         if (curadjblock != NULL) {
             curadjblock->release(iomgr);
             delete curadjblock;
             curadjblock = NULL;
         }
         sblock<ET> * newblock = new sblock<ET>(0, adjfile_session);
         newblock->offset = adjoffset;
         newblock->end = std::min(adjfilesize, adjoffset+blocksize);
         assert(newblock->end > 0);
         assert(newblock->end >= newblock->offset);
         iomgr->managed_malloc(adjfile_session, &newblock->data, newblock->end - newblock->offset, adjoffset);
         newblock->ptr = newblock->data;
         metrics_entry me = m.start_time();
         iomgr->managed_preada_now(adjfile_session, &newblock->data, newblock->end - newblock->offset, adjoffset);
         m.stop_time(me, "blockload");
         curadjblock = newblock;
     }
 }