source: icGREP/icgrep-devel/icgrep/kernels/deletion.h @ 5098

Last change on this file since 5098 was 5074, checked in by cameron, 3 years ago

Kernel infrastructure: move common logic into KernelBuilder? base class; demo linking in wc

File size: 1.8 KB
Line 
1/*
2 *  Copyright (c) 2016 International Characters.
3 *  This software is licensed to the public under the Open Software License 3.0.
4 */
5#ifndef DELETION_H
6#define DELETION_H
7
8#include "streamset.h"
9#include "interface.h"
10#include "kernel.h"
11
12
13namespace llvm { class Module; class Value;}
14
15namespace IDISA { class IDISA_Builder; }
16
17//
18// Parallel Prefix Deletion
19// see Parallel Prefix Compress in Henry S. Warren, Hacker's Delight, Chapter 7
20//
21// Given that we want to delete bits within fields of width fw, moving
22// nondeleted bits to the right, the parallel prefix compress method can
23// be applied.   This requires a preprocessing step to compute log2(fw)
24// masks that can be used to select bits to be moved in each step of the
25// algorithm.
26//
27// Deletion Mask Calculation
28
29std::vector<llvm::Value *> parallel_prefix_deletion_masks(IDISA::IDISA_Builder * iBuilder, unsigned fw, llvm::Value * del_mask);
30
31// Applying Deletion Masks to a Stream
32
33llvm::Value * apply_parallel_prefix_deletion(IDISA::IDISA_Builder * iBuilder, unsigned fw, llvm::Value * del_mask, std::vector<llvm::Value *> mv, llvm::Value * strm);
34
35using namespace kernel;
36
37class deletionKernel : public kernel::KernelBuilder {
38public:
39    deletionKernel(IDISA::IDISA_Builder * iBuilder, unsigned fw, unsigned stream_count) :
40    KernelBuilder(iBuilder, "del",
41                  {StreamSetBinding{StreamSetType(stream_count + 2, 1), "inputStreamSet"}},
42                  {StreamSetBinding{StreamSetType(stream_count, 1), "outputStreamSet"}, StreamSetBinding{StreamSetType(1, 1), "deletionCounts"}},
43                  {}, {}, {}),
44    mDeletionFieldWidth(fw),
45    mStreamCount(stream_count) {}
46   
47private:
48    void generateDoBlockMethod() override;
49    void generateFinalBlockMethod() override;
50    unsigned mDeletionFieldWidth;
51    unsigned mStreamCount;
52};
53   
54#endif
55
Note: See TracBrowser for help on using the repository browser.