| 910 | } |
| 911 | |
| 912 | void DevProjector :: Project (BaseVector & x) const |
| 913 | { |
| 914 | static Timer t("DevProjector::Project"); RegionTimer reg(t); |
| 915 | if (x.EntrySize() != 1) |
| 916 | throw Exception("DevProjector :: Project not implemented for EntrySize > 1"); |
| 917 | |
| 918 | UnifiedVectorWrapper ux(x); |
| 919 | |
| 920 | ux.UpdateDevice(); |
| 921 | |
| 922 | // DevProjectorProject (bits->Size(), (double*)ux.DevData(), bits->Data(), keep_values); |
| 923 | if (keep_values) |
| 924 | DeviceParallelFor |
| 925 | (bits->Size(), |
| 926 | [x=ux.DevData(), bits=bits->Data()] DEVICE_LAMBDA (auto i) |
| 927 | { |
| 928 | unsigned char mask = (char(1) << (i % CHAR_BIT)); |
| 929 | unsigned int addr = i / CHAR_BIT; |
| 930 | |
| 931 | if (! (bits[addr] & mask) ) |
| 932 | x[i] = 0.0; |
| 933 | }); |
| 934 | else |
| 935 | DeviceParallelFor |
| 936 | (bits->Size(), |
| 937 | [x=ux.DevData(), bits=bits->Data()] DEVICE_LAMBDA (auto i) |
| 938 | { |
| 939 | unsigned char mask = (char(1) << (i % CHAR_BIT)); |
| 940 | unsigned int addr = i / CHAR_BIT; |
| 941 | |
| 942 | if (bits[addr] & mask) |
| 943 | x[i] = 0; |
| 944 | }); |
| 945 | |
| 946 | |
| 947 | ux.InvalidateHost(); |
| 948 | } |
| 949 | |
| 950 | |
| 951 |
nothing calls this directly
no test coverage detected